diff --git a/src/main/java/com/zhgd/xmgl/modules/project/controller/ProjectEnterpriseController.java b/src/main/java/com/zhgd/xmgl/modules/project/controller/ProjectEnterpriseController.java index 87ceb2ac2..7767ca96b 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/controller/ProjectEnterpriseController.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/controller/ProjectEnterpriseController.java @@ -60,6 +60,7 @@ public class ProjectEnterpriseController { @ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "body", required = true, dataType = "Integer"), @ApiImplicitParam(name = "cbsProjectType", value = "项目类型(字典)", paramType = "body", required = true, dataType = "Integer"), @ApiImplicitParam(name = "isCountMainEnterprise", value = "1是总包", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "enterpriseIds", value = "单位idList", paramType = "body", required = false, dataType = "String"), }) @PostMapping(value = "/list") public Result> queryPageList(@RequestBody Map map) { diff --git a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectEnterpriseServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectEnterpriseServiceImpl.java index e27b3fe77..13aede1e7 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectEnterpriseServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectEnterpriseServiceImpl.java @@ -21,6 +21,7 @@ import com.zhgd.xmgl.modules.worker.mapper.UserEnterpriseMapper; import com.zhgd.xmgl.modules.xz.entity.XzProjectOrg; import com.zhgd.xmgl.security.entity.UserInfo; import com.zhgd.xmgl.security.util.SecurityUtils; +import com.zhgd.xmgl.util.MapUtil; import com.zhgd.xmgl.util.MessageUtil; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; @@ -67,6 +68,11 @@ public class ProjectEnterpriseServiceImpl extends ServiceImpl enterpriseIds = Stream.of(StringUtils.split(userEnterprise.getEnterpriseId(), ",")).collect(Collectors.toList()); + List queryEnterpriseIds = MapUtil.getList(map, "enterpriseIds", String.class); + if (CollUtil.isNotEmpty(queryEnterpriseIds)) { + enterpriseIds = enterpriseIds.stream().filter(queryEnterpriseIds::contains).collect(Collectors.toList()); + } + enterpriseIds.add("0"); map.put("enterpriseIds", enterpriseIds); } List list = projectEnterpriseMapper.selectProjectEnterprisePage(page, map); diff --git a/src/main/java/com/zhgd/xmgl/modules/quality/entity/QualityRegion.java b/src/main/java/com/zhgd/xmgl/modules/quality/entity/QualityRegion.java index 7993ec5f4..5aa9677cc 100644 --- a/src/main/java/com/zhgd/xmgl/modules/quality/entity/QualityRegion.java +++ b/src/main/java/com/zhgd/xmgl/modules/quality/entity/QualityRegion.java @@ -122,11 +122,15 @@ public class QualityRegion implements Serializable { private List children; @TableField(exist = false) + @ApiModelProperty(value = "最外面的设置的责任单位") private List enterpriseInfos; @TableField(exist = false) + @ApiModelProperty(value = "最外面的设置的责任人") private List systemUsers; + @TableField(exist = false) + @ApiModelProperty(value = "最外面的设置的AI设备") private List aiAnalyseHardWareRecords; @TableField(exist = false) diff --git a/src/main/java/com/zhgd/xmgl/modules/quality/service/impl/QualityRegionServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/quality/service/impl/QualityRegionServiceImpl.java index e1bdd27b9..83dbe163d 100644 --- a/src/main/java/com/zhgd/xmgl/modules/quality/service/impl/QualityRegionServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/quality/service/impl/QualityRegionServiceImpl.java @@ -454,11 +454,10 @@ public class QualityRegionServiceImpl extends ServiceImpl list = this.treeList(paramMap); - List vos = BeanUtil.copyToList(ListUtils.listToTree(JSONArray.parseArray(JSON.toJSONString(list)), "id", "parentRegion", "children"), QualityRegionVo.class); IPage p = new Page<>(); int i = cn.hutool.core.util.PageUtil.getStart(pageNo - 1, pageSize); - p.setTotal(vos.size()); - p.setRecords(CollUtil.sub(vos, i, i + pageSize)); + p.setTotal(list.size()); + p.setRecords(CollUtil.sub(list, i, i + pageSize)); p.setCurrent(pageNo); p.setSize(pageSize); return p; diff --git a/src/main/java/com/zhgd/xmgl/modules/risk/controller/RiskListSourceController.java b/src/main/java/com/zhgd/xmgl/modules/risk/controller/RiskListSourceController.java index da680ca76..582998e55 100644 --- a/src/main/java/com/zhgd/xmgl/modules/risk/controller/RiskListSourceController.java +++ b/src/main/java/com/zhgd/xmgl/modules/risk/controller/RiskListSourceController.java @@ -43,6 +43,7 @@ import org.apache.poi.util.IOUtils; import org.simpleframework.xml.core.Validate; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @@ -92,6 +93,8 @@ public class RiskListSourceController { @Lazy @Autowired private IRiskListSourceResponsibilityRegionService riskListSourceResponsibilityRegionService; + @Value("${riskListSourceRegionQrCode:}") + private String riskListSourceRegionQrCode; /** * 分页列表查询 @@ -270,7 +273,6 @@ public class RiskListSourceController { @ApiImplicitParams({ @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = false, dataType = "Integer"), @ApiImplicitParam(name = "regionIds", value = "区域ids(多个,分割)", paramType = "body", required = false, dataType = "Integer"), - @ApiImplicitParam(name = "httpPrefix", value = "http的前缀", paramType = "body", required = false, dataType = "String"), }) @PostMapping(value = "/downloadRegionQrCode") public void downloadRegionQrCode(HttpServletResponse response, @RequestBody HashMap param) { @@ -307,7 +309,6 @@ public class RiskListSourceController { * @param dir */ private void generateRegionQrCode(HashMap param, String dir) { - String httpPrefix = MapUtils.getString(param, "httpPrefix"); String projectSn = MapUtils.getString(param, "projectSn"); List regionIds = StrUtil.split(MapUtils.getString(param, "regionIds"), ","); List regionV2Vos = qualityRegionService.queryList(new MapBuilder() @@ -384,7 +385,7 @@ public class RiskListSourceController { QrConfig config = new QrConfig(qrSize, qrSize); config.setMargin(1); // 设置边距 BufferedImage qrImage = QrCodeUtil.generate( - httpPrefix + regionV2Vo.getId(), + riskListSourceRegionQrCode + regionV2Vo.getId(), config ); 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 38fdd1319..f067f0d7d 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 @@ -8,6 +8,7 @@ import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.stream.StreamUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -30,8 +31,10 @@ import com.zhgd.xmgl.modules.worker.service.IWorkerAttendanceService; import com.zhgd.xmgl.modules.worker.service.IWorkerDailyAttendanceStatisticsV2Service; import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl; 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.PathUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -50,6 +53,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import java.util.stream.Collectors; @@ -274,6 +278,11 @@ public class WorkerDailyAttendanceStatisticsV2Controller { vo.setEnterpriseName(statisticsV2Vo.getEnterpriseName()); vo.setWorkerName(statisticsV2Vo.getWorkerName()); vo.setDeptName(statisticsV2Vo.getDeptName()); + vo.setWorkerTypeName(statisticsV2Vo.getWorkerTypeName()); + vo.setPhoneNumber(statisticsV2Vo.getPhoneNumber()); + vo.setIdCard(statisticsV2Vo.getIdCard()); + vo.setSex(statisticsV2Vo.getSex()); + vo.setEnterDate(statisticsV2Vo.getEnterDate()); vo.setTotalHour(statisticsV2Vo.getHourVal()); vo.setDate(statisticsV2Vo.getAttendanceDate()); vo.setInTimeList(Optional.ofNullable(inOutMap.get(statisticsV2Vo.getPersonSn())).map(m -> m.get(1)) @@ -483,13 +492,24 @@ public class WorkerDailyAttendanceStatisticsV2Controller { return Result.success(workerDailyAttendanceStatisticsV2Service.countWorkerDailyAttendanceStatisticsV2ByDate(param)); } - @ApiOperation(value = "查询考勤日报列表", notes = "查询考勤日报列表", httpMethod = "POST") + @ApiOperation(value = "分页查询考勤日报列表", notes = "分页查询考勤日报列表", httpMethod = "POST") @ApiImplicitParams({ @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"), @ApiImplicitParam(name = "attendanceDate", value = "考勤日期yyyy-MM-dd", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "body", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "body", required = true, dataType = "Integer"), }) - @PostMapping(value = "/getWorkerDailyAttendancesByDate") - public Result> getWorkerDailyAttendancesByDate(@RequestBody HashMap param) { + @PostMapping(value = "/getWorkerDailyAttendancePageByDate") + public Result> getWorkerDailyAttendancePageByDate(@RequestBody HashMap param) { + IPage p = doGetWorkerDailyAttendancePageByDateVoIPage(param); + return Result.success(p); + } + + /** + * @param param + * @return + */ + private IPage doGetWorkerDailyAttendancePageByDateVoIPage(HashMap param) { String projectSn = MapUtils.getString(param, "projectSn"); String attendanceDate = MapUtils.getString(param, "attendanceDate"); param.put("addTime_end", attendanceDate); @@ -506,7 +526,7 @@ public class WorkerDailyAttendanceStatisticsV2Controller { WorkerDailyAttendanceStatisticsV2Vo voDb = personSnMap.get(workerInfo.getPersonSn()); WorkerDailyAttendancesByDateVo vo = new WorkerDailyAttendancesByDateVo(); if (voDb != null) { - BeanUtil.copyProperties(vo, voDb); + BeanUtil.copyProperties(voDb, vo); } else { vo.setPersonType(workerInfo.getPersonType()); vo.setEnterpriseName(workerInfo.getEnterpriseName()); @@ -521,6 +541,11 @@ public class WorkerDailyAttendanceStatisticsV2Controller { vo.setOvertimeHourVal(new BigDecimal("0")); vo.setOvertimeDayVal(new BigDecimal("0")); vo.setInserviceType(workerInfo.getInserviceType()); + vo.setWorkerTypeName(workerInfo.getTypeName()); + vo.setPhoneNumber(workerInfo.getPhoneNumber()); + vo.setIdCard(workerInfo.getIdCard()); + vo.setSex(workerInfo.getSex()); + vo.setEnterDate(workerInfo.getEnterDate()); } List attendances = personSn2AttendancesMap.get(workerInfo.getPersonSn()); if (Objects.equals(vo.getIsAttendance(), 1) && CollUtil.isNotEmpty(attendances)) { @@ -532,6 +557,7 @@ public class WorkerDailyAttendanceStatisticsV2Controller { vo.setFirstTimeAm(firstTimeAm); String endTimePm = attendances.stream().filter(w -> DateUtil.compare(DateUtil.parseDateTime(w.getCreateTime()), DateUtil.parseDateTime(attendanceDate + " 12:00:00")) >= 0).max(Comparator.comparing(WorkerAttendance::getCreateTime)).map(WorkerAttendance::getCreateTime).orElse(null); vo.setEndTimePm(endTimePm); + vo.setAttendanceList(attendances); } vos.add(vo); } @@ -540,7 +566,7 @@ public class WorkerDailyAttendanceStatisticsV2Controller { p.setRecords(vos); p.setCurrent(workerInfoList.getCurrent()); p.setSize(workerInfoList.getSize()); - return Result.success(p); + return p; } @ApiOperation(value = "统计考勤日报", notes = "统计考勤日报", httpMethod = "POST") @@ -571,59 +597,88 @@ public class WorkerDailyAttendanceStatisticsV2Controller { @ApiImplicitParams({ @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"), @ApiImplicitParam(name = "downloadType", value = "1上下午打卡2进出场打卡", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "startDate", value = "开始日期(yyyy-MM-dd)", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "endDate", value = "结束日期(yyyy-MM-dd)", paramType = "body", required = true, dataType = "String"), }) @PostMapping(value = "/exportWorkerDailyAttendancesStaticsByDateXls") - public void exportXls(HttpServletResponse response, @RequestBody HashMap param) { -// String templateUrl = null; -// try { -// String sn = MapUtils.getString(param, "sn"); -//// String libraryId = MapUtils.getString(param, "libraryId"); -// List detailIdList = JSON.parseArray(JSON.toJSONString(param.get("detailIdList")), String.class); -// // Step.1 组装查询条件 -// param.put("pageNo", 1); -// param.put("pageSize", -1); -// List> listMap = new ArrayList<>(); -// Map firstSheetMap = new HashMap<>(); -// List details = riskListDetailService.list(new LambdaQueryWrapper() -//// .eq(RiskListDetail::getLibraryId, libraryId) -// .in(RiskListDetail::getId, detailIdList) -// ); -// Map factorTypeMap = dictionaryItemService.getDictList("risk_factor_type", null).stream().collect(Collectors.toMap(DictionaryItem::getData, Function.identity(), (o1, o2) -> o1)); -// Map accidentTypeMap = riskListPotentialAccidentTypeService.list(new LambdaQueryWrapper() -// .eq(RiskListPotentialAccidentType::getSn, sn)).stream().collect(Collectors.toMap(RiskListPotentialAccidentType::getId, Function.identity(), (o1, o2) -> o1)); -// for (RiskListDetail detail : details) { -// Map map = new HashMap<>(); -// map.put("riskDescription", detail.getRiskDescription()); -// map.put("accidentType", Optional.ofNullable(accidentTypeMap.get(detail.getAccidentTypeId())).map(RiskListPotentialAccidentType::getType).orElse("")); -// map.put("riskFactorType", Optional.ofNullable(factorTypeMap.get(detail.getRiskFactorType())).map(DictionaryItem::getName).orElse("")); -// List levels = Arrays.asList("重大风险", "较大风险", "一般风险", "低风险"); -// map.put("riskLevel", Optional.ofNullable(detail.getRiskLevel()).map(m -> levels.get(m - 1)).orElse("")); -// map.put("engineeringMeasure", detail.getEngineeringMeasure()); -// map.put("managementMeasure", detail.getManagementMeasure()); -// map.put("personalProtection", detail.getPersonalProtection()); -// map.put("emergencyMeasure", detail.getEmergencyMeasure()); -// map.put("educationalMeasure", detail.getEducationalMeasure()); -// listMap.add(map); -// } -// //将项目清单集合添加到map中 -// firstSheetMap.put("listMap", listMap); -// Map> root = new HashMap<>(4); -// root.put(0, firstSheetMap); -// putOtherSheets(sn, root); -// templateUrl = Fileutils.getExportTemplateFile("excel/风险清单详情导出模板.xlsx").getAbsolutePath(); -//// templateUrl = new File("C:\\Users\\Administrator\\IdeaProjects\\wisdomisite-with-flowjar\\tmp\\风险清单详情导出模板.xlsx").getAbsolutePath(); -// TemplateExportParams params = new TemplateExportParams(templateUrl, root.keySet().toArray(new Integer[]{})); -// Workbook workbook = ExcelExportUtil.exportExcel(root, params); -// //设置下拉 -// ExcelUtils.downLoadExcel("风险清单详情导出模板.xlsx", response, workbook); -// } catch (IOException e) { -// log.error("", e); -// throw new OpenAlertException("系统错误"); -// } finally { -// if (templateUrl != null) { -// FileUtil.deleteFile(templateUrl); -// } -// } + public void exportWorkerDailyAttendancesStaticsByDateXls(HttpServletResponse response, @RequestBody HashMap param) { + String templateUrl = null; + try { + String projectSn = MapUtils.getString(param, "projectSn"); + String startDate = MapUtils.getString(param, "startDate"); + String endDate = MapUtils.getString(param, "endDate"); + Integer downloadType = MapUtils.getInteger(param, "downloadType"); + // Step.1 组装查询条件 + param.put("pageNo", 1); + param.put("pageSize", -1); + List dateTimes = DateUtil.rangeToList(DateUtil.parseDate(startDate), DateUtil.parseDate(endDate), DateField.DAY_OF_YEAR); + Map> root = new HashMap<>(); + int j = 0; + String tempSheetName; + if (Objects.equals(downloadType, 1)) { + tempSheetName = "考勤日报-出勤导出模版(上午下午).xlsx"; + } else { + tempSheetName = "考勤日报-出勤导出模版(进场出场).xlsx"; + } + for (DateTime dateTime : dateTimes) { + param.put("attendanceDate", DateUtil.formatDate(dateTime)); + List records = doGetWorkerDailyAttendancePageByDateVoIPage(param).getRecords(); + Map sheetMap = new HashMap<>(); + List> listMap = new ArrayList<>(); + for (WorkerDailyAttendancesByDateVo vo : records) { + Map map = new HashMap<>(); + map.put("firstInTimeYes", StrUtil.isNotBlank(vo.getFirstInTime()) ? "√" : "×"); + map.put("firstInTime", vo.getFirstInTime()); + map.put("endOutTimeYes", StrUtil.isNotBlank(vo.getEndOutTime()) ? "√" : "×"); + map.put("endOutTime", vo.getEndOutTime()); + map.put("firstTimeAmYes", StrUtil.isNotBlank(vo.getFirstTimeAm()) ? "√" : "×"); + map.put("firstTimeAm", vo.getFirstTimeAm()); + map.put("endTimePmYes", StrUtil.isNotBlank(vo.getEndTimePm()) ? "√" : "×"); + map.put("endTimePm", vo.getEndTimePm()); + map.put("personType", vo.getPersonType()); + map.put("enterpriseName", vo.getEnterpriseName()); + map.put("workerName", vo.getWorkerName()); + map.put("deptName", vo.getDeptName()); + map.put("projectSn", vo.getProjectSn()); + map.put("personSn", vo.getPersonSn()); + map.put("attendanceDate", vo.getAttendanceDate()); + map.put("hourVal", vo.getHourVal()); + map.put("dayVal", vo.getDayVal()); + map.put("isAttendance", vo.getIsAttendance()); + map.put("overtimeHourVal", vo.getOvertimeHourVal()); + map.put("overtimeDayVal", vo.getOvertimeDayVal()); + map.put("inserviceType", vo.getInserviceType()); + AtomicInteger i = new AtomicInteger(1); + map.put("attendanceList", Objects.nonNull(vo.getAttendanceList()) ? vo.getAttendanceList().stream().map(a -> { + return i.getAndIncrement() + ".(" + (Objects.equals(a.getPassType(), 1) ? "进场" : "出场") + a.getCreateTime() + ")"; + }).collect(Collectors.joining("\n")) : ""); + map.put("workerTypeName", vo.getWorkerTypeName()); + map.put("phoneNumber", vo.getPhoneNumber()); + map.put("idCard", vo.getIdCard()); + map.put("sex", Objects.equals(vo.getSex(), 1) ? "男" : "女"); + map.put("enterDate", vo.getEnterDate()); + listMap.add(map); + } + sheetMap.put("date", DateUtil.formatDate(dateTime)); + sheetMap.put("listMap", listMap); + root.put(j++, sheetMap); + } + templateUrl = Fileutils.getExportTemplateFile("excel/" + tempSheetName).getAbsolutePath(); + String outputTemplateFilePath = PathUtil.getBasePath() + "/temp/" + IdUtil.randomUUID() + ".xlsx"; + EasyPoiUtil.cloneSheetMultipleTimes(templateUrl, outputTemplateFilePath, "1", dateTimes.size() - 1); + TemplateExportParams params = new TemplateExportParams(outputTemplateFilePath, true); + params.setSheetName(dateTimes.stream().map(DateUtil::formatDate).collect(Collectors.toList()).toArray(new String[]{})); + Workbook workbook = ExcelExportUtil.exportExcel(root, params); + //设置下拉 + ExcelUtils.downLoadExcel(tempSheetName, response, workbook); + } catch (IOException e) { + log.error("", e); + throw new OpenAlertException("系统错误"); + } finally { + if (templateUrl != null) { + FileUtil.deleteFile(templateUrl); + } + } } } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/ExceptionHourStatisticsListVo.java b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/ExceptionHourStatisticsListVo.java index 54ac8edc0..233cd3392 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/ExceptionHourStatisticsListVo.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/ExceptionHourStatisticsListVo.java @@ -31,6 +31,31 @@ public class ExceptionHourStatisticsListVo { */ @ApiModelProperty(value = "班组/部门") private String deptName; + /** + * 工种名称 + */ + @ApiModelProperty(value = "工种名称") + private String workerTypeName; + /** + * 手机号 + */ + @ApiModelProperty(value = "手机号") + private java.lang.String phoneNumber; + /** + * 身份证号 + */ + @ApiModelProperty(value = "身份证号") + private java.lang.String idCard; + /** + * 性别 + */ + @ApiModelProperty(value = "性别,1男,2女") + private java.lang.Integer sex; + /** + * 进场日期 + */ + @ApiModelProperty(value = "进场日期") + private java.lang.String enterDate; /** * 合计工时(h) */ diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/WorkerDailyAttendanceStatisticsV2Vo.java b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/WorkerDailyAttendanceStatisticsV2Vo.java index cfcb9e26e..2d42ba8a2 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/WorkerDailyAttendanceStatisticsV2Vo.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/WorkerDailyAttendanceStatisticsV2Vo.java @@ -28,5 +28,30 @@ public class WorkerDailyAttendanceStatisticsV2Vo extends WorkerDailyAttendanceSt */ @ApiModelProperty(value = "班组/部门") private String deptName; + /** + * 工种名称 + */ + @ApiModelProperty(value = "工种名称") + private String workerTypeName; + /** + * 手机号 + */ + @ApiModelProperty(value = "手机号") + private java.lang.String phoneNumber; + /** + * 身份证号 + */ + @ApiModelProperty(value = "身份证号") + private java.lang.String idCard; + /** + * 性别 + */ + @ApiModelProperty(value = "性别,1男,2女") + private java.lang.Integer sex; + /** + * 进场日期 + */ + @ApiModelProperty(value = "进场日期") + private java.lang.String enterDate; } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/WorkerDailyAttendancesByDateVo.java b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/WorkerDailyAttendancesByDateVo.java index 330bc6c92..8b1b7d7e3 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/WorkerDailyAttendancesByDateVo.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/WorkerDailyAttendancesByDateVo.java @@ -1,8 +1,11 @@ package com.zhgd.xmgl.modules.worker.entity.vo; +import com.zhgd.xmgl.modules.worker.entity.WorkerAttendance; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + @Data public class WorkerDailyAttendancesByDateVo extends WorkerDailyAttendanceStatisticsV2Vo { /** @@ -25,4 +28,10 @@ public class WorkerDailyAttendancesByDateVo extends WorkerDailyAttendanceStatist */ @ApiModelProperty(value = "下午打卡(未次)") private String endTimePm; + /** + * 考勤记录明细 + */ + @ApiModelProperty(value = "考勤记录明细") + private List attendanceList; + } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerDailyAttendanceStatisticsV2Mapper.xml b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerDailyAttendanceStatisticsV2Mapper.xml index 4451e867d..734c7c991 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerDailyAttendanceStatisticsV2Mapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerDailyAttendanceStatisticsV2Mapper.xml @@ -10,6 +10,11 @@ ,c.department_name ,en.enterprise_name ,if(a.person_type=1,b.team_name,c.department_name) as dept_name + ,wt.type_name as worker_type_name + ,a.phone_number + ,a.id_card + ,a.sex + ,a.enter_date from worker_daily_attendance_statistics_v2 t JOIN worker_info a on t.person_sn=a.person_sn LEFT JOIN team_info b ON a.team_id = b.id and a.person_type = 1 diff --git a/src/main/java/com/zhgd/xmgl/util/EasyPoiUtil.java b/src/main/java/com/zhgd/xmgl/util/EasyPoiUtil.java index a77592f0a..588a07e52 100644 --- a/src/main/java/com/zhgd/xmgl/util/EasyPoiUtil.java +++ b/src/main/java/com/zhgd/xmgl/util/EasyPoiUtil.java @@ -7,8 +7,10 @@ import cn.hutool.core.util.StrUtil; import com.documents4j.api.DocumentType; import com.documents4j.api.IConverter; import com.documents4j.job.LocalConverter; +import com.zhgd.jeecg.common.execption.OpenAlertException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xwpf.usermodel.XWPFDocument; import javax.servlet.http.HttpServletResponse; @@ -21,6 +23,55 @@ import java.util.Map; @Slf4j public class EasyPoiUtil { + public static void main(String[] args) { + File file = new File("C:\\Users\\Administrator\\Desktop\\t\\测试1.xlsx"); +// FileInputStream fis; + try { +// fis = new FileInputStream(file); +// XSSFWorkbook wb = new XSSFWorkbook(fis); +// XSSFSheet sheet = wb.getSheet("test1"); +// String name = sheet.getSheetName(); +// String test2 = "test2"; +// XSSFSheet sheet2 = wb.cloneSheet(0, test2); +// wb.setSheetOrder(test2, 1); + String outputFile = "C:\\Users\\Administrator\\Desktop\\t\\测试2.xlsx"; + FileOutputStream fos = new FileOutputStream(outputFile); +// wb.write(fos); +// fis.close(); +// fos.close(); +// wb.close(); + + cloneSheetMultipleTimes(file.getAbsolutePath(), outputFile, "test1", 5); + } catch (IOException e) { + e.printStackTrace(); + } +// System.out.println("结束"); + } + + /** + * 克隆Excel的一个Sheet多份并导出新文件 + * + * @param sourceFilePath 源Excel文件路径 + * @param outputFilePath 输出Excel文件路径 + * @param sheetName + * @param copyCount 要复制的份数 (不包括原始Sheet) + * @throws IOException 如果文件操作失败 + */ + public static void cloneSheetMultipleTimes(String sourceFilePath, String outputFilePath, String sheetName, int copyCount) throws IOException { + try (FileInputStream fis = new FileInputStream(sourceFilePath); + XSSFWorkbook wb = new XSSFWorkbook(fis); + FileOutputStream fos = new FileOutputStream(outputFilePath);) { + int sheetIndex = wb.getSheetIndex(sheetName); + if (sheetIndex == -1) { + throw new OpenAlertException("sheetName错误"); + } + for (int i = 0; i < copyCount; i++) { + wb.cloneSheet(sheetIndex, sheetName + "-" + (i + 1)); + wb.setSheetOrder(sheetName + "-" + (i + 1), sheetIndex + i + 1); + } + wb.write(fos); + } + } /** * 导出word diff --git a/src/main/java/com/zhgd/xmgl/util/MapUtil.java b/src/main/java/com/zhgd/xmgl/util/MapUtil.java index 5e283e59d..a97508e65 100644 --- a/src/main/java/com/zhgd/xmgl/util/MapUtil.java +++ b/src/main/java/com/zhgd/xmgl/util/MapUtil.java @@ -1,8 +1,11 @@ package com.zhgd.xmgl.util; +import com.gexin.fastjson.JSON; +import com.gexin.fastjson.TypeReference; import jodd.util.StringUtil; import org.apache.commons.collections.MapUtils; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -18,19 +21,23 @@ public class MapUtil { * @return 包含指定类型元素的List,如果key不存在或类型不匹配返回空List */ public static List getList(Map map, String key, Class clazz) { - // 1. 检查参数 if (map == null || key == null || clazz == null) { - return null; + return Collections.emptyList(); } - // 2. 获取Map中的值 Object value = map.get(key); if (value == null) { - return null; + return Collections.emptyList(); } - return com.gexin.fastjson.JSON.parseObject(com.gexin.fastjson.JSON.toJSONString(value), new com.gexin.fastjson.TypeReference>() { - }); + // 特殊处理 String 类型 + if (clazz == String.class) { + return (List) JSON.parseArray(JSON.toJSONString(value), String.class); + } + + return JSON.parseObject(JSON.toJSONString(value), + new TypeReference>() { + }); } public static void putIfNotBlank(Map map, String key, Object value) { diff --git a/src/main/resources/application-gsx-other-env-show.properties b/src/main/resources/application-gsx-other-env-show.properties index 65008523b..09817fb81 100644 --- a/src/main/resources/application-gsx-other-env-show.properties +++ b/src/main/resources/application-gsx-other-env-show.properties @@ -105,3 +105,5 @@ udp.port=51236 #上传的图片的url前缀 upload.image.url.prefix=http://192.168.34.221:9111/image/ supplierResubmitApplicationUrl=http://192.168.34.175:88/#/workspace/contractorApply +#管控清单危险源的区域二维码的前缀 +riskListSourceRegionQrCode=http://localhost:8088/app/#/pages/projectEnd/safeSame/riskGradingControlList/riskGradingControlList?id= diff --git a/src/main/resources/excel/考勤日报-出勤导出模版(上午下午).xlsx b/src/main/resources/excel/考勤日报-出勤导出模版(上午下午).xlsx new file mode 100644 index 000000000..0b3365556 Binary files /dev/null and b/src/main/resources/excel/考勤日报-出勤导出模版(上午下午).xlsx differ diff --git a/src/main/resources/excel/考勤日报-出勤导出模版(进场出场).xlsx b/src/main/resources/excel/考勤日报-出勤导出模版(进场出场).xlsx new file mode 100644 index 000000000..dca067ec2 Binary files /dev/null and b/src/main/resources/excel/考勤日报-出勤导出模版(进场出场).xlsx differ