diff --git a/src/main/java/com/zhgd/xmgl/base/entity/vo/echarts/SeriesItem.java b/src/main/java/com/zhgd/xmgl/base/entity/vo/echarts/SeriesItem.java index ad20b563b..ad12cfdb9 100644 --- a/src/main/java/com/zhgd/xmgl/base/entity/vo/echarts/SeriesItem.java +++ b/src/main/java/com/zhgd/xmgl/base/entity/vo/echarts/SeriesItem.java @@ -11,4 +11,12 @@ public class SeriesItem { private String name; @ApiModelProperty("图例数据") private List data; + + public SeriesItem() { + } + + public SeriesItem(String name, List data) { + this.name = name; + this.data = data; + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/realnamestatistics/entity/vo/WorkerAttendanceVo.java b/src/main/java/com/zhgd/xmgl/modules/realnamestatistics/entity/vo/WorkerAttendanceVo.java index aa716d617..be18c881d 100644 --- a/src/main/java/com/zhgd/xmgl/modules/realnamestatistics/entity/vo/WorkerAttendanceVo.java +++ b/src/main/java/com/zhgd/xmgl/modules/realnamestatistics/entity/vo/WorkerAttendanceVo.java @@ -71,4 +71,17 @@ public class WorkerAttendanceVo { @ApiModelProperty(value = "区域名称") private String regionName; + + private String id; + private String teamName; + private String departmentTeamId; + private Integer workerClassify; + private Integer codeState; + private Integer isMock; + private String fieldAcquisitionUrl; + private String departmentTeamName; + private String mockTime; + private String enterpriseId; + private String enterpriseName; + } diff --git a/src/main/java/com/zhgd/xmgl/modules/safetyhat/service/impl/SafetyHatDataDailyStatisticsServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/safetyhat/service/impl/SafetyHatDataDailyStatisticsServiceImpl.java index 826fe7a9a..d5d27a439 100644 --- a/src/main/java/com/zhgd/xmgl/modules/safetyhat/service/impl/SafetyHatDataDailyStatisticsServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/safetyhat/service/impl/SafetyHatDataDailyStatisticsServiceImpl.java @@ -76,7 +76,7 @@ public class SafetyHatDataDailyStatisticsServiceImpl extends ServiceImpl o1)); //实时计算 ArrayList vos = new ArrayList<>(); - List fences = safetyHatFenceService.list(new LambdaQueryWrapper().eq(SafetyHatFence::getProjectSn, project.getProjectSn())); + List fences = safetyHatFenceService.list(new LambdaQueryWrapper().eq(SafetyHatFence::getProjectSn, projectSn)); Map> worker2Datas = safetyHatDataService.list(new LambdaQueryWrapper() .eq(SafetyHatData::getProjectSn, projectSn) .ge(SafetyHatData::getUploadTime, date) 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 e273677d9..2fd9eed8d 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 @@ -138,9 +138,10 @@ public class WorkerAttendanceController { @ApiImplicitParam(name = "devSn", value = "设备SN", dataType = "String", paramType = "body", required = false), @ApiImplicitParam(name = "groupId", value = "门禁设备分组id", paramType = "body", required = false, dataType = "String"), @ApiImplicitParam(name = "devSnList", value = "门禁设备sn列表", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "containEnterpriseId", value = "包含下级的单位的人员的单位id", paramType = "body", required = false, dataType = "String"), }) @PostMapping(value = "/list") - public Result> queryPageList(@RequestBody Map map) { + public Result> queryPageList(@RequestBody Map map) { return Result.success(workerAttendanceService.selectWorkerAttendancePage(map)); } 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 de516fa7a..246166ea1 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 @@ -456,18 +456,19 @@ public class WorkerDailyAttendanceStatisticsV2Controller { } } - @OperLog(operModul = "员工每日的考勤统计记录v2管理", operType = "", operDesc = "考勤总览") - @ApiOperation(value = "考勤总览", notes = "考勤总览", httpMethod = "POST") + @OperLog(operModul = "员工每日的考勤统计记录v2管理", operType = "", operDesc = "考勤总览(统计)") + @ApiOperation(value = "考勤总览(统计)", notes = "考勤总览(统计)", httpMethod = "POST") @ApiImplicitParams({ - @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = false, dataType = "String"), - @ApiImplicitParam(name = "enterpriseTypeId", value = "企业类型id", paramType = "body", required = false, dataType = "String"), - @ApiImplicitParam(name = "enterpriseId", value = "所属企业id", paramType = "body", required = false, dataType = "String"), - @ApiImplicitParam(name = "teamId", value = "班组ID", paramType = "body", required = false, dataType = "String"), - @ApiImplicitParam(name = "departmentId", value = "部门ID", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"), @ApiImplicitParam(name = "startMonth", value = "开始时间,格式2020-08(startMonth和endMonth或startDate和endDate至少传其中一组)", dataType = "String", paramType = "body", required = true), @ApiImplicitParam(name = "endMonth", value = "结束时间,格式2020-08", dataType = "String", paramType = "body", required = true), @ApiImplicitParam(name = "startDate", value = "开始时间,yyyy-MM-dd", paramType = "body", dataType = "String", required = true), @ApiImplicitParam(name = "endDate", value = "结束时间,yyyy-MM-dd", paramType = "body", dataType = "String", required = true), + @ApiImplicitParam(name = "personSn", value = "考勤人员唯一标识", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "enterpriseTypeId", value = "企业类型id", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "enterpriseId", value = "所属企业id", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "teamId", value = "班组ID", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "departmentId", value = "部门ID", paramType = "body", required = false, dataType = "String"), }) @PostMapping(value = "/countWorkerDailyAttendanceStatisticsV2") public Result countWorkerDailyAttendanceStatisticsV2(@RequestBody Map param) { @@ -530,7 +531,7 @@ public class WorkerDailyAttendanceStatisticsV2Controller { .eq(WorkerAttendance::getProjectSn, projectSn) .ge(WorkerAttendance::getCreateTime, attendanceDate) .le(WorkerAttendance::getCreateTime, DateUtil.formatDateTime(DateUtil.endOfDay(DateUtil.parseDate(attendanceDate))))) - .stream().collect(Collectors.groupingBy(WorkerAttendance::getPersonSn)); + .stream().filter(w -> Objects.nonNull(w.getPersonSn())).collect(Collectors.groupingBy(WorkerAttendance::getPersonSn)); List vos = new ArrayList<>(); for (WorkerInfo workerInfo : workerInfoList.getRecords()) { WorkerDailyAttendanceStatisticsV2Vo voDb = personSnMap.get(workerInfo.getPersonSn()); @@ -711,4 +712,23 @@ public class WorkerDailyAttendanceStatisticsV2Controller { public Result> getWorkerDailyAttendancePageForWorkerByDate(@RequestBody HashMap param) { return Result.success(workerDailyAttendanceStatisticsV2Service.getWorkerDailyAttendancePageForWorkerByDate(param)); } + + @ApiOperation(value = "统计每日的工时/工日", notes = "统计每日的工时/工日", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目sn", 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"), + @ApiImplicitParam(name = "workerName", value = "人员姓名", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "enterpriseTypeId", value = "企业类型id", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "enterpriseId", value = "所属企业id", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "teamId", value = "班组ID", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "departmentId", value = "部门ID", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "inserviceType", value = "在职状态 1在职 2离职", paramType = "body", required = false, dataType = "Integer"), + @ApiImplicitParam(name = "containEnterpriseId", value = "包含下级的单位的人员的单位id", paramType = "body", required = false, dataType = "String"), + }) + @PostMapping(value = "/countWorkerDailyAttendanceByDate") + public Result> countWorkerDailyAttendanceByDate(@RequestBody HashMap param) { + return Result.success(workerDailyAttendanceStatisticsV2Service.countWorkerDailyAttendanceByDate(param)); + } + } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/CountWorkerDailyAttendanceByDateVo.java b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/CountWorkerDailyAttendanceByDateVo.java new file mode 100644 index 000000000..260a13712 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/CountWorkerDailyAttendanceByDateVo.java @@ -0,0 +1,22 @@ +package com.zhgd.xmgl.modules.worker.entity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CountWorkerDailyAttendanceByDateVo { + /** + * 日期 + */ + private String date; + /** + * 总工时 + */ + @ApiModelProperty(value = "总工时") + private java.math.BigDecimal hourValTotal; + /** + * 总工日 + */ + @ApiModelProperty(value = "总工日") + private java.math.BigDecimal dayValTotal; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/CountWorkerDailyAttendanceStatisticsV2Vo.java b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/CountWorkerDailyAttendanceStatisticsV2Vo.java index 25f9a30d9..625ad88d7 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/CountWorkerDailyAttendanceStatisticsV2Vo.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/CountWorkerDailyAttendanceStatisticsV2Vo.java @@ -13,4 +13,9 @@ public class CountWorkerDailyAttendanceStatisticsV2Vo { private Integer totalInServiceNum; @ApiModelProperty("平均出勤率") private BigDecimal attendanceRateAvg; + /** + * 总工时 + */ + @ApiModelProperty(value = "总工时") + private java.math.BigDecimal hourValTotal; } 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 bf3f4a139..304026fcc 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 @@ -63,4 +63,14 @@ public class WorkerDailyAttendanceStatisticsV2Vo extends WorkerDailyAttendanceSt */ @ApiModelProperty(value = "出场打卡(末次)") private String endOutTime; + /** + * 上午打卡(首次) + */ + @ApiModelProperty(value = "上午打卡(首次)") + private String firstTimeAm; + /** + * 下午打卡(未次) + */ + @ApiModelProperty(value = "下午打卡(未次)") + private String endTimePm; } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/WorkerAttendanceMapper.java b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/WorkerAttendanceMapper.java index e30b0f0ca..5bc4d59c9 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/WorkerAttendanceMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/WorkerAttendanceMapper.java @@ -55,7 +55,7 @@ public interface WorkerAttendanceMapper extends BaseMapper { * @param map * @return */ - Page selectWorkerAttendancePage(Page page, @Param("param") Map map); + Page selectWorkerAttendancePage(Page page, @Param("param") Map map); /** * 列表查询人员考勤信息 diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/WorkerDailyAttendanceStatisticsV2Mapper.java b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/WorkerDailyAttendanceStatisticsV2Mapper.java index 2b5a9a9fb..70bee5431 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/WorkerDailyAttendanceStatisticsV2Mapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/WorkerDailyAttendanceStatisticsV2Mapper.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhgd.xmgl.modules.worker.entity.WorkerDailyAttendanceStatisticsV2; import com.zhgd.xmgl.modules.worker.entity.bo.CountWorkerDailyAttendanceStatisticsV2ByDateBo; +import com.zhgd.xmgl.modules.worker.entity.vo.CountWorkerDailyAttendanceByDateVo; import com.zhgd.xmgl.modules.worker.entity.vo.CountWorkerDailyAttendanceStatisticsV2Vo; import com.zhgd.xmgl.modules.worker.entity.vo.WorkerDailyAttendanceStatisticsV2Vo; import org.apache.ibatis.annotations.Mapper; @@ -53,9 +54,22 @@ public interface WorkerDailyAttendanceStatisticsV2Mapper extends BaseMapper param); + /** + * 统计每月/日出勤/在职人数统计 + * + * @param param + * @return + */ List countWorkerDailyAttendanceStatisticsV2ByDate(Map param); + + /** + * 统计每日的工时/工日 + * + * @param param + * @return + */ + List countWorkerDailyAttendanceByDate(HashMap param); + } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerAttendanceMapper.xml b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerAttendanceMapper.xml index ad2cf134f..aa9f60460 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerAttendanceMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerAttendanceMapper.xml @@ -40,7 +40,8 @@ ]]> ORDER BY create_time DESC - SELECT a.*, IF(a.image_url IS NOT NULL, a.image_url, b.id_card_big_photo_url) image_url, code_state, @@ -60,6 +61,11 @@ LEFT JOIN department_info d ON b.department_id = d.id LEFT JOIN enterprise_info ei on ei.id=b.enterprise_id WHERE a.project_sn = #{param.projectSn} + + and (b.enterprise_id = #{param.containEnterpriseId} OR b.enterprise_id IN ( SELECT t.enterprise_id FROM + project_enterprise t WHERE find_in_set((select id from project_enterprise where enterprise_id = + #{param.containEnterpriseId} and project_sn = #{param.projectSn}), ancestors))) + and a.is_mock = 1 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 734c7c991..c86de76b7 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 @@ -54,6 +54,7 @@ select count(*) as total_in_service_num ,ifnull(sum(t.is_attendance),0) as total_attendance_num + ,ifnull(sum(t.hour_val),0) as hour_val_total from worker_daily_attendance_statistics_v2 t JOIN worker_info a on t.person_sn=a.person_sn JOIN team_info b ON a.team_id = b.id and a.person_type = 1 @@ -62,6 +63,9 @@ JOIN enterprise_info en ON en.id = a.enterprise_id INNER JOIN project_enterprise pe ON a.id = pe.enterprise_id and pe.project_sn=t.project_sn where t.project_sn=#{projectSn} + + and a.person_sn = #{personSn} + and pe.enterprise_type_id = #{enterpriseTypeId} @@ -139,4 +143,47 @@ group by x_name )t + + diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/IWorkerAttendanceService.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/IWorkerAttendanceService.java index 4c53c4ff9..ecdd43389 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/IWorkerAttendanceService.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/IWorkerAttendanceService.java @@ -60,7 +60,7 @@ public interface IWorkerAttendanceService extends IService { * @param map * @return */ - IPage selectWorkerAttendancePage(Map map); + IPage selectWorkerAttendancePage(Map map); /** * 列表查询人员考勤信息 diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/IWorkerDailyAttendanceStatisticsV2Service.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/IWorkerDailyAttendanceStatisticsV2Service.java index 3363ef09f..68fe502b8 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/IWorkerDailyAttendanceStatisticsV2Service.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/IWorkerDailyAttendanceStatisticsV2Service.java @@ -8,9 +8,7 @@ import com.zhgd.xmgl.modules.worker.entity.WorkerAttendanceRuleV2; import com.zhgd.xmgl.modules.worker.entity.WorkerDailyAttendanceStatisticsV2; import com.zhgd.xmgl.modules.worker.entity.bo.CalAttendanceBo; import com.zhgd.xmgl.modules.worker.entity.dto.WorkerDailyAttendanceStatisticsV2Dto; -import com.zhgd.xmgl.modules.worker.entity.vo.CountWorkerDailyAttendanceStatisticsV2Vo; -import com.zhgd.xmgl.modules.worker.entity.vo.WorkerDailyAttendanceStatisticsV2Vo; -import com.zhgd.xmgl.modules.worker.entity.vo.WorkerDailyAttendancesByDateVo; +import com.zhgd.xmgl.modules.worker.entity.vo.*; import java.util.HashMap; import java.util.List; @@ -97,4 +95,7 @@ public interface IWorkerDailyAttendanceStatisticsV2Service extends IService param); IPage getWorkerDailyAttendancePageForWorkerByDate(HashMap param); + + List countWorkerDailyAttendanceByDate(HashMap param); + } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerAttendanceServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerAttendanceServiceImpl.java index dc10bb9c3..5551cf80b 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerAttendanceServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerAttendanceServiceImpl.java @@ -254,7 +254,7 @@ public class WorkerAttendanceServiceImpl extends ServiceImpl selectWorkerAttendancePage(Map map) { + public IPage selectWorkerAttendancePage(Map map) { String groupId = MapUtils.getString(map, "groupId"); if (StrUtil.isNotBlank(groupId)) { List devSnList = ufaceDevService.getDevSnListByGroupId(groupId).stream().map(UfaceDev::getDevSn).collect(Collectors.toList()); @@ -265,8 +265,8 @@ public class WorkerAttendanceServiceImpl extends ServiceImpl page = new Page<>(pageNo, pageSize); - Page pageList = workerAttendanceMapper.selectWorkerAttendancePage(page, map); + Page page = new Page<>(pageNo, pageSize); + Page pageList = workerAttendanceMapper.selectWorkerAttendancePage(page, map); return pageList; } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerDailyAttendanceStatisticsV2ServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerDailyAttendanceStatisticsV2ServiceImpl.java index ba81d05e2..adf9ff640 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerDailyAttendanceStatisticsV2ServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerDailyAttendanceStatisticsV2ServiceImpl.java @@ -22,6 +22,7 @@ import com.zhgd.xmgl.modules.worker.entity.bo.CalAttendanceBo; import com.zhgd.xmgl.modules.worker.entity.bo.CountWorkerDailyAttendanceStatisticsV2ByDateBo; import com.zhgd.xmgl.modules.worker.entity.bo.Hour2dayJsonBo; import com.zhgd.xmgl.modules.worker.entity.dto.WorkerDailyAttendanceStatisticsV2Dto; +import com.zhgd.xmgl.modules.worker.entity.vo.CountWorkerDailyAttendanceByDateVo; import com.zhgd.xmgl.modules.worker.entity.vo.CountWorkerDailyAttendanceStatisticsV2Vo; import com.zhgd.xmgl.modules.worker.entity.vo.WorkerDailyAttendanceStatisticsV2Vo; import com.zhgd.xmgl.modules.worker.mapper.WorkerDailyAttendanceStatisticsV2Mapper; @@ -501,12 +502,16 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl m.get(DateUtil.formatDate(vo.getAttendanceDate()))) - .map(m -> m.stream().filter(w -> Objects.equals(w.getPassType(), 1)).min(Comparator.comparing(WorkerAttendance::getCreateTime)).map(WorkerAttendance::getCreateTime).orElse(null)).orElse(null); - String endOutTime = Optional.ofNullable(personSn2DateMap.get(vo.getPersonSn())).map(m -> m.get(DateUtil.formatDate(vo.getAttendanceDate()))) - .map(m -> m.stream().filter(w -> Objects.equals(w.getPassType(), 2)).max(Comparator.comparing(WorkerAttendance::getCreateTime)).map(WorkerAttendance::getCreateTime).orElse(null)).orElse(null); + String date = DateUtil.formatDate(vo.getAttendanceDate()); + Optional> workerAttendancesOpt = Optional.ofNullable(personSn2DateMap.get(vo.getPersonSn())).map(m -> m.get(date)); + String firstInTime = workerAttendancesOpt.flatMap(m -> m.stream().filter(w -> Objects.equals(w.getPassType(), 1)).min(Comparator.comparing(WorkerAttendance::getCreateTime)).map(WorkerAttendance::getCreateTime)).orElse(null); + String endOutTime = workerAttendancesOpt.flatMap(m -> m.stream().filter(w -> Objects.equals(w.getPassType(), 2)).max(Comparator.comparing(WorkerAttendance::getCreateTime)).map(WorkerAttendance::getCreateTime)).orElse(null); vo.setFirstInTime(firstInTime); vo.setEndOutTime(endOutTime); + String firstTimeAm = workerAttendancesOpt.flatMap(m -> m.stream().filter(w -> DateUtil.compare(DateUtil.parseDateTime(w.getCreateTime()), DateUtil.parseDateTime(date + " 12:00:00")) < 0).min(Comparator.comparing(WorkerAttendance::getCreateTime)).map(WorkerAttendance::getCreateTime)).orElse(null); + vo.setFirstTimeAm(firstTimeAm); + String endTimePm = workerAttendancesOpt.flatMap(m -> m.stream().filter(w -> DateUtil.compare(DateUtil.parseDateTime(w.getCreateTime()), DateUtil.parseDateTime(date + " 12:00:00")) >= 0).max(Comparator.comparing(WorkerAttendance::getCreateTime)).map(WorkerAttendance::getCreateTime)).orElse(null); + vo.setEndTimePm(endTimePm); } } return pageList; @@ -528,4 +533,21 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl countWorkerDailyAttendanceByDate(HashMap param) { + List dateTimeStrList = DateUtil.rangeToList(DateUtil.parseDate(MapUtils.getString(param, "startDate")), DateUtil.parseDate(MapUtils.getString(param, "endDate")), DateField.DAY_OF_YEAR) + .stream().map(dateTime -> DateUtil.format(dateTime, "yyyy-MM-dd")).collect(Collectors.toList()); + List all = baseMapper.countWorkerDailyAttendanceByDate(param); + Map allMap = all.stream().collect(Collectors.toMap(CountWorkerDailyAttendanceByDateVo::getDate, Function.identity())); + List list = dateTimeStrList.stream().map(date -> { + CountWorkerDailyAttendanceByDateVo vo = new CountWorkerDailyAttendanceByDateVo(); + vo.setDate(date); + vo.setHourValTotal(Optional.ofNullable(allMap.get(date)).map(CountWorkerDailyAttendanceByDateVo::getHourValTotal).orElse(null)); + vo.setDayValTotal(new BigDecimal("0")); + return vo; + }).collect(Collectors.toList()); + return list; + } + }