From ca6f3100e17f589582f74aed1ce326d9792181bd Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Fri, 22 Aug 2025 14:39:56 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WorkerAttendanceController.java | 95 ++++- ...DailyAttendanceStatisticsV2Controller.java | 65 +-- .../worker/entity/vo/StatisticsListVo.java | 5 - ...zSecurityDangerFieldConfigServiceImpl.java | 25 +- .../impl/XzHikvisionSyncServiceImpl.java | 6 +- .../java/com/zhgd/xmgl/util/EasyPoiUtil.java | 18 + .../java/com/zhgd/xmgl/util/ExcelUtils.java | 398 ++++++++++++++++++ .../java/com/zhgd/xmgl/util/Fileutils.java | 65 ++- .../考勤日报-出勤导出模版(上午下午).xlsx | Bin 0 -> 11735 bytes .../考勤日报-出勤导出模版(进场出场).xlsx | Bin 13049 -> 13106 bytes .../考勤月报-按单位-出勤人数与考勤报表.xlsx | Bin 13791 -> 12422 bytes .../考勤月报-按班组.xlsx | Bin 13082 -> 12861 bytes .../考勤月报-按项目.xlsx | Bin 13280 -> 13008 bytes .../resources/excel/人员考勤记录导出.xlsx | Bin 0 -> 9271 bytes .../考勤日报-出勤导出模版(上午下午).xlsx | Bin 11744 -> 0 bytes 15 files changed, 608 insertions(+), 69 deletions(-) create mode 100644 src/main/resources/excel/workerDailyAttendanceStatisticsV2/考勤日报-出勤导出模版(上午下午).xlsx rename src/main/resources/excel/{ => workerDailyAttendanceStatisticsV2}/考勤日报-出勤导出模版(进场出场).xlsx (81%) create mode 100644 src/main/resources/excel/人员考勤记录导出.xlsx delete mode 100644 src/main/resources/excel/考勤日报-出勤导出模版(上午下午).xlsx diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/controller/WorkerAttendanceController.java b/src/main/java/com/zhgd/xmgl/modules/worker/controller/WorkerAttendanceController.java index 1f0b51e9d..7db125f77 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/controller/WorkerAttendanceController.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/controller/WorkerAttendanceController.java @@ -1,5 +1,7 @@ package com.zhgd.xmgl.modules.worker.controller; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; @@ -8,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zhgd.annotation.OperLog; +import com.zhgd.file.FileUtil; import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.jeecg.common.mybatis.EntityMap; @@ -15,9 +18,9 @@ import com.zhgd.xmgl.constant.Cts; import com.zhgd.xmgl.entity.vo.AttendanceOfEachCompanyVo; import com.zhgd.xmgl.entity.vo.NumberTimeTableVo; import com.zhgd.xmgl.modules.basicdata.service.INoticeService; -import com.zhgd.xmgl.modules.realnamestatistics.entity.vo.WorkerAttendanceVo; import com.zhgd.xmgl.modules.quality.entity.QualityRegionToUfaceDev; import com.zhgd.xmgl.modules.quality.service.IQualityRegionToUfaceDevService; +import com.zhgd.xmgl.modules.realnamestatistics.entity.vo.WorkerAttendanceVo; import com.zhgd.xmgl.modules.worker.entity.MockWorkerAttendanceConfig; import com.zhgd.xmgl.modules.worker.entity.UfaceDev; import com.zhgd.xmgl.modules.worker.entity.WorkerAttendance; @@ -28,7 +31,9 @@ import com.zhgd.xmgl.modules.worker.entity.vo.PresentDayByMonthVo; import com.zhgd.xmgl.modules.worker.entity.vo.SafetyPerformanceAnalysisVo; import com.zhgd.xmgl.modules.worker.service.*; import com.zhgd.xmgl.security.util.SecurityUtils; +import com.zhgd.xmgl.util.EasyPoiUtil; import com.zhgd.xmgl.util.ExcelUtils; +import com.zhgd.xmgl.util.Fileutils; import com.zhgd.xmgl.util.MapBuilder; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -36,6 +41,7 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; +import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; @@ -44,6 +50,7 @@ import springfox.documentation.annotations.ApiIgnore; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.*; import java.util.concurrent.ThreadLocalRandom; import java.util.function.Function; @@ -541,4 +548,90 @@ public class WorkerAttendanceController { public Result> getPresentDayByMonth(@ApiIgnore @RequestBody Map paramMap) { return Result.success(workerAttendanceService.getPresentDayByMonth(paramMap)); } + + @ApiOperation(value = "人员考勤导出excel记录", notes = "人员考勤导出excel记录", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"), + }) + @PostMapping(value = "/exportXls") + public void exportXls(HttpServletResponse response, @RequestBody HashMap param) { + String templateUrl = null; + try { + Map map = new HashMap<>(); + List records = workerAttendanceService.selectWorkerAttendancePage(param).getRecords(); + List> listMap = new ArrayList<>(); + for (int i = 0; i < records.size(); i++) { + Map objectMap = new HashMap<>(); + WorkerAttendanceVo vo = records.get(i); + objectMap.put("no", i + 1); + objectMap.put("workerName", vo.getWorkerName()); + objectMap.put("personSn", vo.getPersonSn()); + objectMap.put("passType", Objects.equals(vo.getPassType(), 1) ? "进" : "出"); + objectMap.put("createTime", vo.getCreateTime()); + objectMap.put("projectSn", vo.getProjectSn()); + objectMap.put("cardType", getType(vo.getCardType())); + objectMap.put("imageUrl", EasyPoiUtil.getImageEntityByXls(vo.getImageUrl())); + objectMap.put("attendanceType", vo.getAttendanceType()); + objectMap.put("passagewayName", vo.getPassagewayName()); + objectMap.put("attendanceStatus", vo.getAttendanceStatus()); + objectMap.put("temperature", vo.getTemperature()); + objectMap.put("devSn", vo.getDevSn()); + objectMap.put("isStatistics", vo.getIsStatistics()); + objectMap.put("carNumber", vo.getCarNumber()); + objectMap.put("address", vo.getAddress()); + objectMap.put("idCard", vo.getIdCard()); + objectMap.put("regionName", vo.getRegionName()); + objectMap.put("teamName", vo.getTeamName()); + objectMap.put("departmentTeamId", vo.getDepartmentTeamId()); + objectMap.put("workerClassify", vo.getWorkerClassify()); + objectMap.put("codeState", vo.getCodeState()); + objectMap.put("isMock", vo.getIsMock()); + objectMap.put("fieldAcquisitionUrl", vo.getFieldAcquisitionUrl()); + objectMap.put("departmentTeamName", vo.getDepartmentTeamName()); + objectMap.put("mockTime", vo.getMockTime()); + objectMap.put("enterpriseName", vo.getEnterpriseName()); + listMap.add(objectMap); + } + map.put("listMap", listMap); + templateUrl = Fileutils.getExportTemplateFile("excel/人员考勤记录导出.xlsx").getAbsolutePath(); + TemplateExportParams params = new TemplateExportParams(templateUrl); + Workbook workbook = ExcelExportUtil.exportExcel(params, map); + //设置下拉 + ExcelUtils.downLoadExcel("风险点清单导出模板.xlsx", response, workbook); + } catch (IOException e) { + log.error("", e); + throw new OpenAlertException("系统错误"); + } finally { + if (templateUrl != null) { + FileUtil.deleteFile(templateUrl); + } + } + } + + public static String getType(Integer number) { + if (number == null) { + return ""; + } + switch (number) { + case 1: + return "IC卡"; + case 2: + return "人脸识别"; + case 3: + return "指纹识别"; + case 4: + return "补卡操作"; + case 5: + return "二维码"; + case 6: + return "蓝牙"; + case 7: + return "手机打卡"; + case 8: + return "车辆通行"; + default: + return "未知类型"; + } + } + } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/controller/WorkerDailyAttendanceStatisticsV2Controller.java b/src/main/java/com/zhgd/xmgl/modules/worker/controller/WorkerDailyAttendanceStatisticsV2Controller.java index 348b4a2a5..9d62597ec 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/controller/WorkerDailyAttendanceStatisticsV2Controller.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/controller/WorkerDailyAttendanceStatisticsV2Controller.java @@ -46,6 +46,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.jetbrains.annotations.Nullable; import org.simpleframework.xml.core.Validate; import org.springframework.beans.factory.annotation.Autowired; @@ -747,7 +748,7 @@ public class WorkerDailyAttendanceStatisticsV2Controller { sheetMap.put("listMap", listMap); root.put(j++, sheetMap); } - templateUrl = Fileutils.getExportTemplateFile("excel/" + tempSheetName).getAbsolutePath(); + templateUrl = Fileutils.getExportTemplateFile("excel/workerDailyAttendanceStatisticsV2/" + tempSheetName).getAbsolutePath(); String outputTemplateFilePath = PathUtil.getBasePath() + "/temp/" + IdUtil.randomUUID() + ".xlsx"; EasyPoiUtil.cloneSheetMultipleTimes(templateUrl, outputTemplateFilePath, "1", dateTimes.size() - 1); TemplateExportParams params = new TemplateExportParams(outputTemplateFilePath, true); @@ -843,6 +844,7 @@ public class WorkerDailyAttendanceStatisticsV2Controller { public void exportWorkerDailyAttendancesStaticsByMonthXls(HttpServletResponse response, @RequestBody HashMap param) { String templateUrl = null; try { + ArrayList delColIndexes = new ArrayList<>(); String projectSn = MapUtils.getString(param, "projectSn"); Project project = projectService.getOne(new LambdaQueryWrapper() .eq(Project::getProjectSn, projectSn)); @@ -872,9 +874,9 @@ public class WorkerDailyAttendanceStatisticsV2Controller { .stream().filter(w -> Objects.nonNull(w.getPersonSn())).collect(Collectors.groupingBy(WorkerAttendance::getPersonSn, Collectors.groupingBy(o -> DateUtil.formatDate(DateUtil.parseDate(o.getCreateTime())), Collectors.toList()))); - BigDecimal totalAttendanceDay = BigDecimal.ZERO; BigDecimal totalHour = BigDecimal.ZERO; for (Map.Entry> entry : deptNameMap.entrySet()) { + BigDecimal totalAttendanceDay = BigDecimal.ZERO; Map sheetMap = new HashMap<>(); List> listMap = new ArrayList<>(); List vos = entry.getValue(); @@ -882,7 +884,7 @@ public class WorkerDailyAttendanceStatisticsV2Controller { for (StatisticsListVo vo : vos) { Map map = new HashMap<>(); map.put("no", ++index); - map.put("personType", vo.getPersonType()); + map.put("personType", Objects.equals(vo.getPersonType(), 1) ? "施工人员" : "管理人员"); map.put("enterpriseName", vo.getEnterpriseName()); map.put("workerName", vo.getWorkerName()); map.put("deptName", vo.getDeptName()); @@ -896,7 +898,6 @@ public class WorkerDailyAttendanceStatisticsV2Controller { for (int z = 0; z < dateTimes.size(); z++) { DateTime dateTime = dateTimes.get(z); sheetMap.put("date" + (z + 1), DateUtil.format(dateTime, "M/d")); - sheetMap.put("delete" + (z + 1), false); String value; if (Objects.equals(downloadType, 1) || Objects.equals(downloadType, 2)) { value = getExcelAmPmAttendanceByDate(personSn2Date2AttendancesMap, vo, dateTime, downloadType); @@ -909,9 +910,6 @@ public class WorkerDailyAttendanceStatisticsV2Controller { } map.put("attendanceByDate" + (z + 1), value); } - for (int i = dateTimes.size(); i < 31; i++) { - sheetMap.put("delete" + (i + 1), true); - } map.put("totalHour", vo.getTotalHour()); map.put("totalAttendanceDay", vo.getTotalAttendanceDay()); totalAttendanceDay = NumberUtil.add(vo.getTotalAttendanceDay(), totalAttendanceDay); @@ -928,7 +926,13 @@ public class WorkerDailyAttendanceStatisticsV2Controller { root.put(sheetIndex++, sheetMap); sheetNames.add(entry.getKey()); } + for (int i = 11 + dateTimes.size(); i < 11 + 31; i++) { + delColIndexes.add(i); + } templateUrl = Fileutils.getExportTemplateFile("excel/workerDailyAttendanceStatisticsV2/" + tempSheetName).getAbsolutePath(); + if (CollUtil.isNotEmpty(delColIndexes)) { + ExcelUtils.removeColumns(templateUrl, 0, delColIndexes); + } String outputTemplateFilePath = PathUtil.getBasePath() + "/temp/" + IdUtil.randomUUID() + ".xlsx"; EasyPoiUtil.cloneSheetMultipleTimes(templateUrl, outputTemplateFilePath, "1", sheetNames.size() - 1); TemplateExportParams params = new TemplateExportParams(outputTemplateFilePath, true); @@ -947,8 +951,8 @@ public class WorkerDailyAttendanceStatisticsV2Controller { Integer totalGlNum = 0; Integer totalSgNum = 0; Map deptKeyMap = new HashMap<>(); + int index = 0; for (Map.Entry> entry : date2Map.entrySet()) { - int index = 0; Map map = new HashMap<>(); map.put("no", ++index); map.put("date", entry.getKey()); @@ -963,8 +967,7 @@ public class WorkerDailyAttendanceStatisticsV2Controller { String sgKey = "sg" + bo.getDeptName(); e.put("glNum", "t." + glKey); e.put("sgNum", "t." + sgKey); - e.put("glTotalNum", glKey); - e.put("sgTotalNum", sgKey); + e.put("totalNumKey", bo.getDeptName()); colList.add(e); if (Objects.equals(bo.getPersonType(), 1)) { sgNum = bo.getWorkerNum() + sgNum; @@ -985,7 +988,10 @@ public class WorkerDailyAttendanceStatisticsV2Controller { totalGlNum += glNum; totalSgNum += sgNum; } - sheetMap1.putAll(deptKeyMap); + for (Map map : colList) { + map.put("glTotalNum", deptKeyMap.get("gl" + MapUtils.getString(map, "totalNumKey"))); + map.put("sgTotalNum", deptKeyMap.get("sg" + MapUtils.getString(map, "totalNumKey"))); + } sheetMap1.put("listMap", listMap1); sheetMap1.put("totalGlNum", totalGlNum); sheetMap1.put("totalSgNum", totalSgNum); @@ -999,16 +1005,17 @@ public class WorkerDailyAttendanceStatisticsV2Controller { sheetMap1.put("colList", colList); root.put(0, sheetMap1); sheetNames.add(enterpriseName + "出勤人数"); - + param.put("startTime", startDate); + param.put("endTime", endDate); //导出sheet2上海振南考勤报表 List voList = this.doCountDailyAttendanceByDateRange(param).getRecords(); Map sheetMap2 = new HashMap<>(); - int index = 0; + index = 0; List> listMap2 = new ArrayList<>(); for (StatisticsListVo vo : voList) { Map map = new HashMap<>(); map.put("no", ++index); - map.put("personType", vo.getPersonType()); + map.put("personType", Objects.equals(vo.getPersonType(), 1) ? "施工人员" : "管理人员"); map.put("enterpriseName", vo.getEnterpriseName()); map.put("workerName", vo.getWorkerName()); map.put("deptName", vo.getDeptName()); @@ -1024,14 +1031,10 @@ public class WorkerDailyAttendanceStatisticsV2Controller { for (int z = 0; z < dateTimes.size(); z++) { DateTime dateTime = dateTimes.get(z); sheetMap2.put("date" + (z + 1), DateUtil.format(dateTime, "M/d")); - sheetMap2.put("delete" + (z + 1), false); //每日工时 String value = Optional.ofNullable(vo.getDailyHourMap().get(DateUtil.formatDate(dateTime))).map(decimal -> decimal.toString()).orElse(""); map.put("attendanceByDate" + (z + 1), value); } - for (int i = dateTimes.size(); i < 31; i++) { - sheetMap2.put("delete" + (i + 1), true); - } listMap2.add(map); } sheetMap2.put("listMap", listMap2); @@ -1043,11 +1046,22 @@ public class WorkerDailyAttendanceStatisticsV2Controller { sheetNames.add(enterpriseName + "考勤报表"); templateUrl = Fileutils.getExportTemplateFile("excel/workerDailyAttendanceStatisticsV2/" + tempSheetName).getAbsolutePath(); TemplateExportParams params = new TemplateExportParams(templateUrl, true); + params.setColForEach(true); params.setSheetName(sheetNames.toArray(new String[]{})); Workbook workbook = ExcelExportUtil.exportExcel(root, params); + for (int i = 9 + dateTimes.size(); i < 9 + 31; i++) { + delColIndexes.add(i); + } + if (CollUtil.isNotEmpty(delColIndexes)) { + ExcelUtils.removeColumns(((XSSFWorkbook) workbook), 1, delColIndexes); + } + ExcelUtils.mergeRows(workbook, 0, 0, 0, 0, 4 + colList.size() * 2); ExcelUtils.downLoadExcel(tempSheetName, response, workbook); } else if (Objects.equals(groupByType, 4)) { //按人员 + param.put("startTime", startDate); + param.put("endTime", endDate); + param.put("pageSize", -1); tempSheetName = "单个人员考勤出入明细报表.xlsx"; List voList = this.doCountDailyAttendanceByDateRange(param).getRecords(); Map>> personSn2Date2AttendancesMap = workerAttendanceService.list(new LambdaQueryWrapper() @@ -1074,6 +1088,7 @@ public class WorkerDailyAttendanceStatisticsV2Controller { listMap.add(map); } root.put(sheetIndex++, sheetMap); + sheetMap.put("listMap", listMap); sheetMap.put("projectName", project.getProjectName()); sheetMap.put("personType", vo.getPersonType() == 1 ? "班组" : "部门"); sheetMap.put("enterpriseName", vo.getEnterpriseName()); @@ -1113,7 +1128,7 @@ public class WorkerDailyAttendanceStatisticsV2Controller { for (StatisticsListVo vo : vos) { Map map = new HashMap<>(); map.put("no", ++index); - map.put("personType", vo.getPersonType()); + map.put("personType", Objects.equals(vo.getPersonType(), 1) ? "施工人员" : "管理人员"); map.put("enterpriseName", vo.getEnterpriseName()); map.put("workerName", vo.getWorkerName()); map.put("deptName", vo.getDeptName()); @@ -1127,7 +1142,6 @@ public class WorkerDailyAttendanceStatisticsV2Controller { for (int z = 0; z < dateTimes.size(); z++) { DateTime dateTime = dateTimes.get(z); sheetMap.put("date" + (z + 1), DateUtil.format(dateTime, "M/d")); - sheetMap.put("delete" + (z + 1), false); String value; if (Objects.equals(downloadType, 1) || Objects.equals(downloadType, 2)) { value = getExcelAmPmAttendanceByDate(personSn2Date2AttendancesMap, vo, dateTime, downloadType); @@ -1140,15 +1154,16 @@ public class WorkerDailyAttendanceStatisticsV2Controller { } map.put("attendanceByDate" + (z + 1), value); } - for (int i = dateTimes.size(); i < 31; i++) { - sheetMap.put("delete" + (i + 1), true); - } + map.put("totalHour", vo.getTotalHour()); map.put("totalAttendanceDay", vo.getTotalAttendanceDay()); totalAttendanceDay = NumberUtil.add(vo.getTotalAttendanceDay(), totalAttendanceDay); totalHour = NumberUtil.add(vo.getTotalHour(), totalHour); listMap.add(map); } + for (int i = 11 + dateTimes.size(); i < 11 + 31; i++) { + delColIndexes.add(i); + } sheetMap.put("listMap", listMap); sheetMap.put("totalAttendanceDay", totalAttendanceDay); sheetMap.put("totalWorkerNum", vos.size()); @@ -1162,7 +1177,9 @@ public class WorkerDailyAttendanceStatisticsV2Controller { TemplateExportParams params = new TemplateExportParams(templateUrl, true); params.setSheetName(sheetNames.toArray(new String[]{})); Workbook workbook = ExcelExportUtil.exportExcel(root, params); - + if (CollUtil.isNotEmpty(delColIndexes)) { + ExcelUtils.removeColumns(((XSSFWorkbook) workbook), 0, delColIndexes); + } ExcelUtils.downLoadExcel(tempSheetName, response, workbook); } } catch (IOException e) { diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/StatisticsListVo.java b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/StatisticsListVo.java index 6dddc698f..e25e6e18a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/StatisticsListVo.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/StatisticsListVo.java @@ -79,11 +79,6 @@ public class StatisticsListVo { */ @ApiModelProperty(value = "人员sn") private java.lang.String personSn; - /** - * 劳务人员Id - */ - @ApiModelProperty(value = "劳务人员Id") - private java.lang.Long workerId; /** * 工种名称 */ diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/service/impl/XzSecurityDangerFieldConfigServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/xz/security/service/impl/XzSecurityDangerFieldConfigServiceImpl.java index a8f793f19..1fccf1aa5 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/security/service/impl/XzSecurityDangerFieldConfigServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/service/impl/XzSecurityDangerFieldConfigServiceImpl.java @@ -1,26 +1,24 @@ package com.zhgd.xmgl.modules.xz.security.service.impl; -import com.zhgd.jeecg.common.execption.OpenAlertException; -import com.zhgd.xmgl.modules.xz.security.entity.XzSecurityDangerFieldConfig; -import com.zhgd.xmgl.modules.xz.security.entity.vo.XzSecurityDangerFieldConfigVo; -import com.zhgd.xmgl.modules.xz.security.entity.dto.XzSecurityDangerFieldConfigDto; -import com.zhgd.xmgl.modules.xz.security.mapper.XzSecurityDangerFieldConfigMapper; -import com.zhgd.xmgl.modules.xz.security.service.IXzSecurityDangerFieldConfigService; -import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.zhgd.jeecg.common.system.query.QueryGenerator; -import com.zhgd.xmgl.util.PageUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zhgd.jeecg.common.execption.OpenAlertException; +import com.zhgd.jeecg.common.system.query.QueryGenerator; +import com.zhgd.xmgl.modules.xz.security.entity.XzSecurityDangerFieldConfig; +import com.zhgd.xmgl.modules.xz.security.entity.dto.XzSecurityDangerFieldConfigDto; +import com.zhgd.xmgl.modules.xz.security.entity.vo.XzSecurityDangerFieldConfigVo; +import com.zhgd.xmgl.modules.xz.security.mapper.XzSecurityDangerFieldConfigMapper; +import com.zhgd.xmgl.modules.xz.security.service.IXzSecurityDangerFieldConfigService; +import com.zhgd.xmgl.util.PageUtil; +import com.zhgd.xmgl.util.RefUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.List; -import com.zhgd.xmgl.util.RefUtil; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.beans.factory.annotation.Autowired; - /** * @Description: 安全隐患检查字段设置配置 * @author: pds @@ -90,4 +88,5 @@ public class XzSecurityDangerFieldConfigServiceImpl extends ServiceImpl syncList = new ArrayList<>(); @@ -382,6 +378,8 @@ public class XzHikvisionSyncServiceImpl extends ServiceImpl deleteColumnIndexes) throws IOException { + // 对列索引进行降序排序,以便从右到左删除,避免索引变化问题 + deleteColumnIndexes.sort(Collections.reverseOrder()); + + Sheet sheet = workbook.getSheetAt(sheetIndex); + for (int colIndex : deleteColumnIndexes) { + removeColumn(sheet, colIndex); + } + } + + public static void removeColumns(String excelPath, int sheetIndex, List columnIndexes) throws IOException { + // 对列索引进行降序排序,以便从右到左删除,避免索引变化问题 + columnIndexes.sort(Collections.reverseOrder()); + + try (FileInputStream fis = new FileInputStream(excelPath); + Workbook workbook = WorkbookFactory.create(fis)) { + + Sheet sheet = workbook.getSheetAt(sheetIndex); + + for (int colIndex : columnIndexes) { + removeColumn(sheet, colIndex); + } + + try (FileOutputStream fos = new FileOutputStream(excelPath)) { + workbook.write(fos); + } + } + } + + private static void removeColumn(Sheet sheet, int colIndex) { + // 处理行数据 + for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) { + Row row = sheet.getRow(rowIndex); + if (row != null) { + removeCell(row, colIndex); + + // 将右侧单元格左移 + shiftCellsLeft(row, colIndex); + } + } + + // 处理合并区域 + processMergedRegions(sheet, colIndex); + + // 处理列宽 + shiftColumnWidths(sheet, colIndex); + } + + private static void removeCell(Row row, int colIndex) { + Cell cell = row.getCell(colIndex); + if (cell != null) { + row.removeCell(cell); + } + } + + private static void shiftCellsLeft(Row row, int colIndex) { + for (int i = colIndex + 1; i <= row.getLastCellNum(); i++) { + Cell oldCell = row.getCell(i); + if (oldCell != null) { + Cell newCell = row.createCell(i - 1, oldCell.getCellType()); + copyCellContent(oldCell, newCell); + copyCellStyle(oldCell, newCell); + row.removeCell(oldCell); + } + } + } + + private static void copyCellContent(Cell oldCell, Cell newCell) { + switch (oldCell.getCellType()) { + case STRING: + newCell.setCellValue(oldCell.getStringCellValue()); + break; + case NUMERIC: + newCell.setCellValue(oldCell.getNumericCellValue()); + break; + case BOOLEAN: + newCell.setCellValue(oldCell.getBooleanCellValue()); + break; + case FORMULA: + newCell.setCellFormula(oldCell.getCellFormula()); + break; + case BLANK: + newCell.setCellValue(""); // 将单元格值设置为空字符串 + newCell.setCellType(CellType.BLANK); + break; + case ERROR: + newCell.setCellErrorValue(oldCell.getErrorCellValue()); + break; + default: + break; + } + } + + private static void copyCellStyle(Cell oldCell, Cell newCell) { + Workbook workbook = newCell.getSheet().getWorkbook(); + CellStyle newStyle = workbook.createCellStyle(); + newStyle.cloneStyleFrom(oldCell.getCellStyle()); + newCell.setCellStyle(newStyle); + } + + private static void processMergedRegions(Sheet sheet, int colIndex) { + for (int i = sheet.getNumMergedRegions() - 1; i >= 0; i--) { + CellRangeAddress region = sheet.getMergedRegion(i); + + if (colIndex >= region.getFirstColumn() && colIndex <= region.getLastColumn()) { + // 如果删除的列在合并区域内 + if (region.getFirstColumn() == region.getLastColumn()) { + // 如果合并区域只有一列,直接删除 + sheet.removeMergedRegion(i); + } else { + // 缩小合并区域 + region.setLastColumn(region.getLastColumn() - 1); + sheet.removeMergedRegion(i); + sheet.addMergedRegion(region); + } + } else if (colIndex < region.getFirstColumn()) { + // 如果删除的列在合并区域左侧,将合并区域左移 + region.setFirstColumn(region.getFirstColumn() - 1); + region.setLastColumn(region.getLastColumn() - 1); + sheet.removeMergedRegion(i); + sheet.addMergedRegion(region); + } + // 如果删除的列在合并区域右侧,不需要处理 + } + } + + private static void shiftColumnWidths(Sheet sheet, int colIndex) { + int maxColumn = 255; // Excel的最大列数 + for (int i = colIndex; i < maxColumn; i++) { + int width = sheet.getColumnWidth(i + 1); + sheet.setColumnWidth(i, width); + } + // 清空最后一列 + sheet.setColumnWidth(maxColumn, sheet.getDefaultColumnWidth()); + } + + // 示例用法 + public static void main(String[] args) { + try { + // 假设要删除第1列和第3列(0-based索引) + long l = System.currentTimeMillis(); + List columnsToRemove = new ArrayList<>(); + for (int i = 13; i < 41 + 1; i++) { + columnsToRemove.add(i); + } + removeColumns("C:\\Users\\Administrator\\Desktop\\1.xlsx", 0, columnsToRemove); + System.out.println("列删除成功!" + (System.currentTimeMillis() - l)); + } catch (IOException e) { + e.printStackTrace(); + } + } + + + /** + * 合并Excel中的行 + * + * @param filePath Excel文件路径 + * @param sheetIndex 工作表索引(0-based) + * @param startRow 开始行索引(0-based) + * @param endRow 结束行索引(0-based) + * @throws IOException 文件操作异常 + */ + public static void mergeRows(String filePath, int sheetIndex, int startRow, int endRow) throws IOException { + if (startRow > endRow) { + throw new IllegalArgumentException("开始行索引不能大于结束行索引"); + } + + try (FileInputStream fis = new FileInputStream(filePath); + Workbook workbook = WorkbookFactory.create(fis)) { + + Sheet sheet = workbook.getSheetAt(sheetIndex); + + // 获取工作表的列数 + int lastColumn = getLastColumn(sheet, startRow, endRow); + + // 逐列合并行 + for (int colIndex = 0; colIndex <= lastColumn; colIndex++) { + mergeCellsInColumn(sheet, colIndex, startRow, endRow); + } + + // 保存修改后的文件 + try (FileOutputStream fos = new FileOutputStream(filePath)) { + workbook.write(fos); + } + } + } + + /** + * 获取工作表中指定行范围内的最大列数 + */ + private static int getLastColumn(Sheet sheet, int startRow, int endRow) { + int maxColumn = -1; + for (int rowIndex = startRow; rowIndex <= endRow; rowIndex++) { + Row row = sheet.getRow(rowIndex); + if (row != null) { + int lastCellNum = row.getLastCellNum(); + if (lastCellNum > maxColumn) { + maxColumn = lastCellNum; + } + } + } + return maxColumn == -1 ? 0 : maxColumn - 1; + } + + /** + * 合并指定列中的行单元格 + */ + private static void mergeCellsInColumn(Sheet sheet, int colIndex, int startRow, int endRow) { + // 检查是否需要合并(检查单元格内容是否相同) + if (shouldMergeCells(sheet, colIndex, startRow, endRow)) { + // 创建合并区域 + CellRangeAddress mergeRegion = new CellRangeAddress( + startRow, // 起始行 + endRow, // 结束行 + colIndex, // 起始列 + colIndex // 结束列 + ); + + // 添加合并区域到工作表 + sheet.addMergedRegion(mergeRegion); + + // 设置合并后单元格的样式和内容 + setMergedCellContentAndStyle(sheet, colIndex, startRow, endRow); + } + } + + /** + * 检查指定列中的单元格内容是否相同(决定是否需要合并) + */ + private static boolean shouldMergeCells(Sheet sheet, int colIndex, int startRow, int endRow) { + if (startRow == endRow) { + return false; // 只有一行,不需要合并 + } + + Object firstValue = null; + for (int rowIndex = startRow; rowIndex <= endRow; rowIndex++) { + Row row = sheet.getRow(rowIndex); + if (row == null) { + return false; // 有空行,不合并 + } + + Cell cell = row.getCell(colIndex); + Object currentValue = getCellValue(cell); + + if (firstValue == null) { + firstValue = currentValue; + } else if (!isEqual(firstValue, currentValue)) { + return false; // 值不相同,不合并 + } + } + + return firstValue != null; // 所有值相同且不为空,可以合并 + } + + /** + * 获取单元格的值 + */ + private static Object getCellValue(Cell cell) { + if (cell == null) { + return null; + } + + switch (cell.getCellType()) { + case STRING: + return cell.getStringCellValue(); + case NUMERIC: + return cell.getNumericCellValue(); + case BOOLEAN: + return cell.getBooleanCellValue(); + case FORMULA: + return cell.getCellFormula(); + case BLANK: + return ""; + case ERROR: + return cell.getErrorCellValue(); + default: + return null; + } + } + + /** + * 比较两个值是否相等 + */ + private static boolean isEqual(Object value1, Object value2) { + if (value1 == null && value2 == null) { + return true; + } + if (value1 == null || value2 == null) { + return false; + } + return value1.equals(value2); + } + + /** + * 设置合并后单元格的内容和样式 + */ + private static void setMergedCellContentAndStyle(Sheet sheet, int colIndex, int startRow, int endRow) { + Row firstRow = sheet.getRow(startRow); + if (firstRow == null) { + firstRow = sheet.createRow(startRow); + } + + Cell firstCell = firstRow.getCell(colIndex); + if (firstCell == null) { + firstCell = firstRow.createCell(colIndex); + } + + // 设置合并区域的样式(使用第一个单元格的样式) + CellStyle style = firstCell.getCellStyle(); + + // 为合并区域内的所有单元格设置相同的样式 + for (int rowIndex = startRow; rowIndex <= endRow; rowIndex++) { + Row row = sheet.getRow(rowIndex); + if (row == null) { + row = sheet.createRow(rowIndex); + } + + Cell cell = row.getCell(colIndex); + if (cell == null) { + cell = row.createCell(colIndex); + } + + cell.setCellStyle(style); + } + } + + /** + * 重载方法:合并指定区域 + */ + public static void mergeRows(Workbook workbook, int sheetIndex, int startRow, int endRow, int startCol, int endCol) throws IOException { + Sheet sheet = workbook.getSheetAt(sheetIndex); + // 创建合并区域 + CellRangeAddress mergeRegion = new CellRangeAddress( + startRow, endRow, startCol, endCol + ); + // 添加合并区域 + sheet.addMergedRegion(mergeRegion); + + // 设置合并区域样式 + setMergedRegionStyle(sheet, mergeRegion); + } + + /** + * 设置合并区域的样式 + */ + private static void setMergedRegionStyle(Sheet sheet, CellRangeAddress region) { + Row firstRow = sheet.getRow(region.getFirstRow()); + if (firstRow == null) { + firstRow = sheet.createRow(region.getFirstRow()); + } + + Cell firstCell = firstRow.getCell(region.getFirstColumn()); + if (firstCell == null) { + firstCell = firstRow.createCell(region.getFirstColumn()); + } + + CellStyle style = firstCell.getCellStyle(); + + // 为合并区域内的所有单元格设置相同样式 + for (int row = region.getFirstRow(); row <= region.getLastRow(); row++) { + Row currentRow = sheet.getRow(row); + if (currentRow == null) { + currentRow = sheet.createRow(row); + } + + for (int col = region.getFirstColumn(); col <= region.getLastColumn(); col++) { + Cell cell = currentRow.getCell(col); + if (cell == null) { + cell = currentRow.createCell(col); + } + cell.setCellStyle(style); + } + } + } + +// // 示例用法 +// public static void main(String[] args) { +// try { +// // 示例1:合并第2行到第5行的所有列(0-based索引) +// mergeRows("C:\\Users\\Administrator\\Desktop\\heng.xlsx", 0, 0, 7); +// +// // 示例2:合并第3行到第6行的第2列(0-based索引) +//// mergeRows("example.xlsx", 0, 2, 5, 1, 1); +// +// System.out.println("行合并成功!"); +// } catch (IOException e) { +// e.printStackTrace(); +// } +//} + } diff --git a/src/main/java/com/zhgd/xmgl/util/Fileutils.java b/src/main/java/com/zhgd/xmgl/util/Fileutils.java index 62cc99a6e..227771827 100644 --- a/src/main/java/com/zhgd/xmgl/util/Fileutils.java +++ b/src/main/java/com/zhgd/xmgl/util/Fileutils.java @@ -7,15 +7,13 @@ import org.apache.poi.util.IOUtils; import org.springframework.core.io.ClassPathResource; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @Slf4j @@ -69,30 +67,64 @@ public class Fileutils { } /** - * 获取导出的模板 + * 获取导出模板文件,每次生成新的随机目录 * - * @param classPath - * @return - * @throws IOException + * @param classPath 类路径下的文件路径 + * @return 临时文件对象 + * @throws IOException 文件操作异常 */ public static File getExportTemplateFile(String classPath) throws IOException { InputStream fis = null; File out = null; try { fis = new ClassPathResource(classPath).getInputStream(); - out = new File(new File(System.getProperty("user.dir").replace("file:/", "/").replace("\\", "/"), "tmp"), StringUtils.substringAfter(classPath, "/")); + + // 生成随机目录名 + String randomDirName = UUID.randomUUID().toString(); + + // 构建输出路径:基础临时目录/随机目录/文件名 + String fileName = StringUtils.substringAfterLast(classPath, "/"); + if (StringUtils.isBlank(fileName)) { + fileName = "template.xlsx"; // 默认文件名 + } + + // 创建临时目录结构 + File baseTempDir = new File(System.getProperty("java.io.tmpdir"), "export_templates"); + File randomTempDir = new File(baseTempDir, randomDirName); + + out = new File(randomTempDir, fileName); + + // 确保目录存在 if (!out.getParentFile().exists()) { out.getParentFile().mkdirs(); } - IOUtils.copy(fis, out); + + // 复制文件 + IOUtils.copy(fis, new FileOutputStream(out)); + } finally { if (fis != null) { - fis.close(); + try { + fis.close(); + } catch (IOException e) { + // 忽略关闭异常 + } } } return out; } + public static List searchData(final List fileArray, String startTime, String endTime) { + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + //开始时间 + LocalDateTime stadt = LocalDateTime.parse(startTime, df); + //截止时间 + LocalDateTime enddt = LocalDateTime.parse(endTime, df); + + return fileArray.stream().filter(s -> new Date(s.lastModified()).toLocaleString() != null && new Date(s.lastModified()).toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().isAfter(stadt) && new Date(s.lastModified()).toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().isBefore(enddt)).collect(Collectors.toList()); + + } + //根据文件修改时间进行比较的内部类 static class CompratorByLastModified implements Comparator { @Override @@ -108,15 +140,4 @@ public class Fileutils { } } - public static List searchData(final List fileArray, String startTime, String endTime) { - DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - //开始时间 - LocalDateTime stadt = LocalDateTime.parse(startTime, df); - //截止时间 - LocalDateTime enddt = LocalDateTime.parse(endTime, df); - - return fileArray.stream().filter(s -> new Date(s.lastModified()).toLocaleString() != null && new Date(s.lastModified()).toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().isAfter(stadt) && new Date(s.lastModified()).toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().isBefore(enddt)).collect(Collectors.toList()); - - } - } diff --git a/src/main/resources/excel/workerDailyAttendanceStatisticsV2/考勤日报-出勤导出模版(上午下午).xlsx b/src/main/resources/excel/workerDailyAttendanceStatisticsV2/考勤日报-出勤导出模版(上午下午).xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7f7f59470970dc9d5cd94193a16999eaf2d6125c GIT binary patch literal 11735 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/excel/考勤日报-出勤导出模版(进场出场).xlsx b/src/main/resources/excel/workerDailyAttendanceStatisticsV2/考勤日报-出勤导出模版(进场出场).xlsx similarity index 81% rename from src/main/resources/excel/考勤日报-出勤导出模版(进场出场).xlsx rename to src/main/resources/excel/workerDailyAttendanceStatisticsV2/考勤日报-出勤导出模版(进场出场).xlsx index dca067ec2787eafd5357cb570a4660e6815cbb08..21e9aa642994318f17f5e5208a6094dce0621b82 100644 GIT binary patch delta 1332 zcmeyFx+!hLLPpl(?%I|1lb12-)Ca9tb7U$*sjI3=m%|&K>RWC{`ckDY$u*jK^BwA) zu!A*kR*O=^hAsc*o7eCA{L(G-qH#p{wOtOGP5~@YS2kT)&2(2U?IVlpxnkYQ&}@wh zVluNfJzg9mp_RpbeVbWAEvFur%G(tNtWnkZ8pr(BI2KN4Y3F;iXYwd}Ekp!KzF7 zzB^WSSD%=cq|f)RSDQWgvWcg0R&vW9&3*IZ?`~OsZ0WsHRfdhR_M+u=a;svdDV*Q_ z=JC_7pWoUZ-#;~`%S>8SYzMn!Yi`N>wc+pF#GR*iOD0L4JZ3oah)VPXV=K8}C%K|K zyLVNZF@$daCx1joz}U+#!^%qG8^g6{|9(Dx!yVww%p$_Tz`()K?)S){EjPn*vnaD2 zBahOgKWWW=*RB2={b!i`P(W&PB};-j-|>xqq$C&_7&b98Fi0^>K5HOTzjyL^uOkKm z$KE%+7bx0(IV{%2>~1$l_0?YtigW)h%oQ@acx$_P$c?vU)2kx)u%xw}`Tjd?(%W~t z-`^0o%IXob=}bBopdD{J}HZin2?S-*O+kyYEK9w0<*< z|95XsNnQNm=!)}lTlXt4J~^%@k+8EwwCZ5}V-16%9XkIjLVreC>D=4PeR*#1nakM* z{MTDPCc0P192GfKqL$6`ox3ejV$s2%B_?yu+WR)B<;O0*ZG1Sm$X6@YW3A0<F)hobeoKu<-~pbgCA?}s(`OtOdhld^+E z`fhCLxV3xM*VS^`2RzqrnSJ$5?x&D@8<-{+cuBlpke2OGX1;5Wgx@vB4GXf`O|yfz zw$E9dbAW424THONu>4w&Ej`9^Epxgh>pwWIFF(7qoHIr%c=bWI!|XG~4>-X7%(?X2}n=S^a6rGyxSE}(;eBq)~HEhzdAG&f3_D#R=?hoIORn-eK7KH`$ zxcZzwG>LcJ9vOG}36mGT%Aaa$_P1n}>V#v5f>=bi=xPU~DtLBy9^U@k{^lij3)y{V zSFE+GpSk0}leaI=_#HMnEyEcv+1J~#ATD@G=aJ1XC6qW?c^x(_yLIti->H2!_SZ_h zeRh1uhKNI6hr}kH=3~5c>ww{{-P>2cd2;)uLARWO`mU`9K5wosI~4hh;lttMKX-rs zyg6}h+U@gEkqhq%{;^^9cLgs zA09`n3=G1+OaTIn3<^L}Qg`wpJ$uHm$xQmjj8&7(^e00LopbtDGN4?e4UAerCUk9# z%#-DrMJHPtXtBq#Ffdf)=ueh5l9`;K&u6hn8_bU{O3f+OM|TKnJ_9)e=8%(<<Ef z35icO5Eq-QZK%aKXL6XK732NM6AjH6*(RSbbYM)I%xPr9SU1_t$eMB0w$~`0IH}&(*OVf delta 1224 zcmdm#_A_IJXgw|0qnhQKjwOe= z(<8ARnNnQ|2QU4qzxU_oxislW_VWojS69d!6?A0OxYyyewx}ff++j_wHOXEZb_GsY ztQ%pX?dNZ_PBWh;X0}^%q3DeRlcy|=d7klh&N7MUeQYOlp2(i+K7GvN*`Ld6Hl+Qj zpSYGmy`^U(%W;-sp7#w4ZRrdGFnO&{xiy|8> z?u*Imub-d)Uh?1Cl&12V8s-ONIu7J7{++}AG_S<9F!EgB#0e_ACrwm5J=IKnH5K_K z?RNb7nZ$6a?yr5v$4Jj(CNnRU6uH@^}dRO>6eMZuQ^jKf?s6&E+f!>YQxPvlo8>s&$|IKwGJP(&?5)T$`7-H)a~;3Wlg!-wSFY+~XQNfR zXo@EnQ|?orbZJ)kr|;fLvTWSu_Wj(VCPB_^N8g@(##?>%qtMp5>VmO4ni(_yc25b} zYLVeJ$6eZbD|hoV4QJ)O>+1P-InG@EaxzabzlNU8(R&&k)t@;Q$<+G%yM6m=Y52p{ ztNWOv_6aF=9=GFD@RF5EVcl=l*`u)jxcwTb`>z_F&2_%>Zcb8MT+_~Y;kL)p4=Y6{ zPq{o(*YHWUQO(YR1!5D=%Pbcs-+{%UWOgh^D{@RjqWz^lS$+xx4pxmS^+N z2-tdb&Q!x+?&kuhC9tHOYhF6@5Ua8h@8O-z|Qb!ye&>#^+3gg+V!=lzu5 zu(o=6MpM`XAD52&Llbz{&6&gUeB$JVZ?>EgoV`wC3(KVli7tiaU8$^EUsX62vwnQ7 znWP)r@a;paTWM)_{UfHu#&2h`^PYBl=JaFLqlhksSITTw6K~Ayvug;5U~&mgt-iH; zagolqTkbL81*OcrFC>eWc(d;L`OTXB!ihPIb-NAz7v|(25i~-(^Od<@3qE_KXpet@Vu=YbNLGPllEm>;_iSpd_yij6*>tbZyL&V+W{ez@8I2qmGbTG3*)TRt Zt~at~Tr+vMkt<`xWJY6cwrP4G697|04c-6% diff --git a/src/main/resources/excel/workerDailyAttendanceStatisticsV2/考勤月报-按单位-出勤人数与考勤报表.xlsx b/src/main/resources/excel/workerDailyAttendanceStatisticsV2/考勤月报-按单位-出勤人数与考勤报表.xlsx index 17ba258431869b9699829958e7b8c4370f94094f..b680b62a9707f1371f19ca8bb0243a714f92d494 100644 GIT binary patch delta 7276 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 delta 7110 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 G9+w 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�)Xk1_e^o6PAysJ9w1Tx!CZj70jqfr~z6=TkLHTswCjsj6ZKDDPU{3BHKpC z_xfk`4H$Zdl?d=-%YrWV>Eeo&b>eky;1fi5RM7FVwclch^O6L}QC>Nkr!5An zijSRMyBP{jv~zy;3I52ytzIB94{g~-vTR0H9>xh@616%jkzRA=jXRskNbMz1Pech;1~` zB#Z8sH|;mgF06t#+Ejt&LBTLmliAaa3Zs`^ABNIzIWUE}MWBye3xO}n@4iFEG2LM> ziV&kjw+DG80Jr0;goZ^qN3Za=d2_x>NneVIdC=i z;xrfaor-wd>0Zune@u60SE-SQpOg|oU^YX%eoe^hlpe3H{@Q;UHXS2t zdiv81{1k$n%xWQI?z@y41^78^E-uVLjF6OC1$Yva0ChL%#ijt!V^g}WQz!xtogH0) z)Rm~u2N_IMIScjvp{dc76!I=;TVbq|Yb z4F_uI^eu|R#J%pzYKdEq8!FxHZk5M%xyLQ+^wW-6U#*ib4 zg=+!|MFs!Wd*P! zM>3$T;vl-iYEUs-RBtuZps6F@Fow~t6G~qXqWQyZ+R<8GXz4RPUxQwI zt~702;AJt!>^~dtXTi&d=+!s>mIv2cx!TI+FkE&q)2>t1?3K|UuWD7U0>H`EF`GUA z!RS=eTGv`$V_{!<&tnAZ3Da>{nWJ-H0c(C>{``UgI%z|8ugs)95u-k{D)Z!7e{-31 zGyIU$j9UBGRaWP$y>8v{vFra)@&i}7A$0A5mXFKe?!3-T_uzXg;AI@r-!d!@lBF@D zvR!QGJx9Jr=-Vx?TyQWxJF-%IeP!h7o%Hg4j0P)42q!Y9D9J&mwcs5nx~;$m2Eqq8~08PuKoSC1>)vesG_w!6vsG% zp3}#gjqfTe2&X^imdNK5GNkn5X|`6d9ypckNheWwCD6Uh5bWLvYsVYVbZKK#v_G=? zA~{=Zl#_8&IXcbB@*PgNpGWpwEBcuPEG*xsy_4YJk&A3lNvSb2iiB1`l2Yj6mR74B zQ*y7CJZUI(#_*-^A#sX z#RY=_9lQpk2J;gHU~__3#lOTJc!c zB1+_?5c^KX!t)vysj-aZhp`PLC;6A>CLE2ouU9H<9H;P@$wCbD3gYPrv=J_bRt`V- zL?<@9OB<)t6ZiFWcCT{pmA^U;-s{0cVt5ZdwY-2kA~QWF7aA@>Y%ROtwkx*FV4Z6Y z3=oLepgr6sc$a4OQH;EeI8;jS(iG~_%StIBqC+ja#ck>i(l?g05#4)hLS+Z$W*Tq| zf5UONR&=4s&m`D{G?~_zR982&s5=>s=H;IccuAc;Vl*h$aLk4*#-$z_w_SXhkC0FQ zW_HIJ2V`!Y83SW(SgN|S<$Tg!pI|QT73yILsKB?5{B-%*-lX-I}AAa6xmiM(bWBWa@X>MvdVX8k;RjMmB_e z{}WX6T3Dm(wS!^3kEq@-D$h$aViiH_L_jE2y)7u-`Q$58i7a613E8IBkoU^D8=96| zVp}dp4S^*u$fr;}Nx7+P=d4Et+OGt(Ok}CSjYW>fEJ2a)v8x=UXpMlQvduZSo z^w>b5QK`=pQuRbFg9W86N%d`;2U|n(og9Oy2)g)@5y2UPN;x52#k+VE@Bt{oAM@rX zmm>x;=k7i54z|D4SEzT$cA!QN%0HQyZ{wT4t}Fh!xvoI-)yB1-U1X*gp$DzexYb z4g>oP;t2#9_-H}$ukQQR!M}5N56S9Rd)PlvLHIj${i*bE@_NAhQabfF=4Y_|FJ%v8 z$glRG?4kW*U&EjJ9`9^;5dNi)_Mfo->~nZ*qQ~U?Z*&&;P5)czUsU~L_+wuAH=G8X zY<|Q4W|{xjLqE``zuLn?dxI-R;7s+u0DoHPhUg!u?eRb#=fDR&zpO+_{14cFWyHt* zJgzYQ?gs@-?*3c7@o^82YaYLQXa?_&c~D5l VK@R3;uwsC>o4|qP2*@6A{|Ebf{r>;} literal 0 HcmV?d00001 diff --git a/src/main/resources/excel/考勤日报-出勤导出模版(上午下午).xlsx b/src/main/resources/excel/考勤日报-出勤导出模版(上午下午).xlsx deleted file mode 100644 index a1c392ea364a6935765df4201092323193600e17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11744 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 Kj^;!Cg8P3W426gQ