bug修改

This commit is contained in:
guoshengxiong 2025-08-20 15:28:47 +08:00
parent 7a4acb5a45
commit 31d2d1bdf2
16 changed files with 194 additions and 25 deletions

View File

@ -11,4 +11,12 @@ public class SeriesItem {
private String name; private String name;
@ApiModelProperty("图例数据") @ApiModelProperty("图例数据")
private List<Number> data; private List<Number> data;
public SeriesItem() {
}
public SeriesItem(String name, List<Number> data) {
this.name = name;
this.data = data;
}
} }

View File

@ -71,4 +71,17 @@ public class WorkerAttendanceVo {
@ApiModelProperty(value = "区域名称") @ApiModelProperty(value = "区域名称")
private String regionName; 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;
} }

View File

@ -76,7 +76,7 @@ public class SafetyHatDataDailyStatisticsServiceImpl extends ServiceImpl<SafetyH
.eq(SafetyHatDev::getProjectSn, projectSn)).stream().collect(Collectors.toMap(SafetyHatDev::getDevSn, SafetyHatDev::getWorkerInfoId, (o1, o2) -> o1)); .eq(SafetyHatDev::getProjectSn, projectSn)).stream().collect(Collectors.toMap(SafetyHatDev::getDevSn, SafetyHatDev::getWorkerInfoId, (o1, o2) -> o1));
//实时计算 //实时计算
ArrayList<SafetyHatDataDailyStatisticsVo> vos = new ArrayList<>(); ArrayList<SafetyHatDataDailyStatisticsVo> vos = new ArrayList<>();
List<SafetyHatFence> fences = safetyHatFenceService.list(new LambdaQueryWrapper<SafetyHatFence>().eq(SafetyHatFence::getProjectSn, project.getProjectSn())); List<SafetyHatFence> fences = safetyHatFenceService.list(new LambdaQueryWrapper<SafetyHatFence>().eq(SafetyHatFence::getProjectSn, projectSn));
Map<Long, List<SafetyHatData>> worker2Datas = safetyHatDataService.list(new LambdaQueryWrapper<SafetyHatData>() Map<Long, List<SafetyHatData>> worker2Datas = safetyHatDataService.list(new LambdaQueryWrapper<SafetyHatData>()
.eq(SafetyHatData::getProjectSn, projectSn) .eq(SafetyHatData::getProjectSn, projectSn)
.ge(SafetyHatData::getUploadTime, date) .ge(SafetyHatData::getUploadTime, date)

View File

@ -138,9 +138,10 @@ public class WorkerAttendanceController {
@ApiImplicitParam(name = "devSn", value = "设备SN", dataType = "String", paramType = "body", required = false), @ApiImplicitParam(name = "devSn", value = "设备SN", dataType = "String", paramType = "body", required = false),
@ApiImplicitParam(name = "groupId", value = "门禁设备分组id", paramType = "body", required = false, dataType = "String"), @ApiImplicitParam(name = "groupId", value = "门禁设备分组id", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "devSnList", value = "门禁设备sn列表", 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") @PostMapping(value = "/list")
public Result<IPage<EntityMap>> queryPageList(@RequestBody Map<String, Object> map) { public Result<IPage<WorkerAttendanceVo>> queryPageList(@RequestBody Map<String, Object> map) {
return Result.success(workerAttendanceService.selectWorkerAttendancePage(map)); return Result.success(workerAttendanceService.selectWorkerAttendancePage(map));
} }

View File

@ -456,18 +456,19 @@ public class WorkerDailyAttendanceStatisticsV2Controller {
} }
} }
@OperLog(operModul = "员工每日的考勤统计记录v2管理", operType = "", operDesc = "考勤总览") @OperLog(operModul = "员工每日的考勤统计记录v2管理", operType = "", operDesc = "考勤总览(统计)")
@ApiOperation(value = "考勤总览", notes = "考勤总览", httpMethod = "POST") @ApiOperation(value = "考勤总览(统计)", notes = "考勤总览(统计)", httpMethod = "POST")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = false, dataType = "String"), @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, 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 = "startMonth", value = "开始时间,格式2020-08startMonth和endMonth或startDate和endDate至少传其中一组", dataType = "String", paramType = "body", required = true), @ApiImplicitParam(name = "startMonth", value = "开始时间,格式2020-08startMonth和endMonth或startDate和endDate至少传其中一组", dataType = "String", paramType = "body", required = true),
@ApiImplicitParam(name = "endMonth", value = "结束时间,格式2020-08", 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 = "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 = "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") @PostMapping(value = "/countWorkerDailyAttendanceStatisticsV2")
public Result<CountWorkerDailyAttendanceStatisticsV2Vo> countWorkerDailyAttendanceStatisticsV2(@RequestBody Map<String, Object> param) { public Result<CountWorkerDailyAttendanceStatisticsV2Vo> countWorkerDailyAttendanceStatisticsV2(@RequestBody Map<String, Object> param) {
@ -530,7 +531,7 @@ public class WorkerDailyAttendanceStatisticsV2Controller {
.eq(WorkerAttendance::getProjectSn, projectSn) .eq(WorkerAttendance::getProjectSn, projectSn)
.ge(WorkerAttendance::getCreateTime, attendanceDate) .ge(WorkerAttendance::getCreateTime, attendanceDate)
.le(WorkerAttendance::getCreateTime, DateUtil.formatDateTime(DateUtil.endOfDay(DateUtil.parseDate(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<WorkerDailyAttendancesByDateVo> vos = new ArrayList<>(); List<WorkerDailyAttendancesByDateVo> vos = new ArrayList<>();
for (WorkerInfo workerInfo : workerInfoList.getRecords()) { for (WorkerInfo workerInfo : workerInfoList.getRecords()) {
WorkerDailyAttendanceStatisticsV2Vo voDb = personSnMap.get(workerInfo.getPersonSn()); WorkerDailyAttendanceStatisticsV2Vo voDb = personSnMap.get(workerInfo.getPersonSn());
@ -711,4 +712,23 @@ public class WorkerDailyAttendanceStatisticsV2Controller {
public Result<IPage<WorkerDailyAttendanceStatisticsV2Vo>> getWorkerDailyAttendancePageForWorkerByDate(@RequestBody HashMap<String, Object> param) { public Result<IPage<WorkerDailyAttendanceStatisticsV2Vo>> getWorkerDailyAttendancePageForWorkerByDate(@RequestBody HashMap<String, Object> param) {
return Result.success(workerDailyAttendanceStatisticsV2Service.getWorkerDailyAttendancePageForWorkerByDate(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<List<CountWorkerDailyAttendanceByDateVo>> countWorkerDailyAttendanceByDate(@RequestBody HashMap<String, Object> param) {
return Result.success(workerDailyAttendanceStatisticsV2Service.countWorkerDailyAttendanceByDate(param));
}
} }

View File

@ -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;
}

View File

@ -13,4 +13,9 @@ public class CountWorkerDailyAttendanceStatisticsV2Vo {
private Integer totalInServiceNum; private Integer totalInServiceNum;
@ApiModelProperty("平均出勤率") @ApiModelProperty("平均出勤率")
private BigDecimal attendanceRateAvg; private BigDecimal attendanceRateAvg;
/**
* 总工时
*/
@ApiModelProperty(value = "总工时")
private java.math.BigDecimal hourValTotal;
} }

View File

@ -63,4 +63,14 @@ public class WorkerDailyAttendanceStatisticsV2Vo extends WorkerDailyAttendanceSt
*/ */
@ApiModelProperty(value = "出场打卡(末次)") @ApiModelProperty(value = "出场打卡(末次)")
private String endOutTime; private String endOutTime;
/**
* 上午打卡(首次)
*/
@ApiModelProperty(value = "上午打卡(首次)")
private String firstTimeAm;
/**
* 下午打卡(未次)
*/
@ApiModelProperty(value = "下午打卡(未次)")
private String endTimePm;
} }

View File

@ -55,7 +55,7 @@ public interface WorkerAttendanceMapper extends BaseMapper<WorkerAttendance> {
* @param map * @param map
* @return * @return
*/ */
Page<EntityMap> selectWorkerAttendancePage(Page<EntityMap> page, @Param("param") Map<String, Object> map); Page<WorkerAttendanceVo> selectWorkerAttendancePage(Page<WorkerAttendanceVo> page, @Param("param") Map<String, Object> map);
/** /**
* 列表查询人员考勤信息 * 列表查询人员考勤信息

View File

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhgd.xmgl.modules.worker.entity.WorkerDailyAttendanceStatisticsV2; import com.zhgd.xmgl.modules.worker.entity.WorkerDailyAttendanceStatisticsV2;
import com.zhgd.xmgl.modules.worker.entity.bo.CountWorkerDailyAttendanceStatisticsV2ByDateBo; 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.CountWorkerDailyAttendanceStatisticsV2Vo;
import com.zhgd.xmgl.modules.worker.entity.vo.WorkerDailyAttendanceStatisticsV2Vo; import com.zhgd.xmgl.modules.worker.entity.vo.WorkerDailyAttendanceStatisticsV2Vo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -53,9 +54,22 @@ public interface WorkerDailyAttendanceStatisticsV2Mapper extends BaseMapper<Work
*/ */
WorkerDailyAttendanceStatisticsV2Vo queryById(String id); WorkerDailyAttendanceStatisticsV2Vo queryById(String id);
String getMaxTaskAttendanceDate();
CountWorkerDailyAttendanceStatisticsV2Vo countWorkerDailyAttendanceStatisticsV2(Map<String, Object> param); CountWorkerDailyAttendanceStatisticsV2Vo countWorkerDailyAttendanceStatisticsV2(Map<String, Object> param);
/**
* 统计每月/日出勤/在职人数统计
*
* @param param
* @return
*/
List<CountWorkerDailyAttendanceStatisticsV2ByDateBo> countWorkerDailyAttendanceStatisticsV2ByDate(Map<String, Object> param); List<CountWorkerDailyAttendanceStatisticsV2ByDateBo> countWorkerDailyAttendanceStatisticsV2ByDate(Map<String, Object> param);
/**
* 统计每日的工时/工日
*
* @param param
* @return
*/
List<CountWorkerDailyAttendanceByDateVo> countWorkerDailyAttendanceByDate(HashMap<String, Object> param);
} }

View File

@ -40,7 +40,8 @@
]]> ]]>
ORDER BY create_time DESC ORDER BY create_time DESC
</select> </select>
<select id="selectWorkerAttendancePage" resultType="com.zhgd.jeecg.common.mybatis.EntityMap"> <select id="selectWorkerAttendancePage"
resultType="com.zhgd.xmgl.modules.realnamestatistics.entity.vo.WorkerAttendanceVo">
SELECT a.*, SELECT a.*,
IF(a.image_url IS NOT NULL, a.image_url, b.id_card_big_photo_url) image_url, IF(a.image_url IS NOT NULL, a.image_url, b.id_card_big_photo_url) image_url,
code_state, code_state,
@ -60,6 +61,11 @@
LEFT JOIN department_info d ON b.department_id = d.id LEFT JOIN department_info d ON b.department_id = d.id
LEFT JOIN enterprise_info ei on ei.id=b.enterprise_id LEFT JOIN enterprise_info ei on ei.id=b.enterprise_id
WHERE a.project_sn = #{param.projectSn} WHERE a.project_sn = #{param.projectSn}
<if test="param.containEnterpriseId != null and param.containEnterpriseId != '' and param.projectSn != null and 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)))
</if>
<if test="param.isMock == '1'.toString()"> <if test="param.isMock == '1'.toString()">
and a.is_mock = 1 and a.is_mock = 1
</if> </if>

View File

@ -54,6 +54,7 @@
select select
count(*) as total_in_service_num count(*) as total_in_service_num
,ifnull(sum(t.is_attendance),0) as total_attendance_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 from worker_daily_attendance_statistics_v2 t
JOIN worker_info a on t.person_sn=a.person_sn 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 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 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 INNER JOIN project_enterprise pe ON a.id = pe.enterprise_id and pe.project_sn=t.project_sn
where t.project_sn=#{projectSn} where t.project_sn=#{projectSn}
<if test="personSn != null and personSn != ''">
and a.person_sn = #{personSn}
</if>
<if test="enterpriseTypeId != null and enterpriseTypeId != ''"> <if test="enterpriseTypeId != null and enterpriseTypeId != ''">
and pe.enterprise_type_id = #{enterpriseTypeId} and pe.enterprise_type_id = #{enterpriseTypeId}
</if> </if>
@ -139,4 +143,47 @@
group by x_name group by x_name
)t )t
</select> </select>
<select id="countWorkerDailyAttendanceByDate"
resultType="com.zhgd.xmgl.modules.worker.entity.vo.CountWorkerDailyAttendanceByDateVo">
select
date_format(t.attendance_date, '%Y-%m-%d') as date
,ifnull(sum(t.hour_val),0) as hour_val_total
,ifnull(sum(t.day_val),0) as day_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
JOIN department_info c ON a.department_id = c.id and a.person_type = 2
JOIN worker_type wt ON b.worker_type_id = wt.id and a.person_type = 1
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}
<if test="enterpriseTypeId != null and enterpriseTypeId != ''">
and pe.enterprise_type_id = #{enterpriseTypeId}
</if>
<if test="enterpriseId != null and enterpriseId != ''">
and b.enterprise_id = #{enterpriseId}
</if>
<if test="teamId != null and teamId != ''">
and a.team_id=#{teamId}
</if>
<if test="departmentId != null and departmentId != ''">
and a.department_id=#{departmentId}
</if>
<if test="startDate != null and startDate != ''">
and t.attendance_date >= #{startDate}
</if>
<if test="endDate != null and endDate != ''">
and t.attendance_date <![CDATA[<=]]> concat(#{endDate},' 23:59:59')
</if>
<if test="workerName != null and workerName != ''">
and a.worker_name like CONCAT(CONCAT('%', #{workerName}), '%')
</if>
<if test="containEnterpriseId != null and containEnterpriseId != '' and projectSn != null and projectSn != ''">
and (a.enterprise_id = #{containEnterpriseId} OR a.enterprise_id IN ( SELECT t.enterprise_id FROM
project_enterprise t WHERE find_in_set((select id from project_enterprise where enterprise_id =
#{containEnterpriseId} and project_sn = #{projectSn}), ancestors)))
</if>
group by date
</select>
</mapper> </mapper>

View File

@ -60,7 +60,7 @@ public interface IWorkerAttendanceService extends IService<WorkerAttendance> {
* @param map * @param map
* @return * @return
*/ */
IPage<EntityMap> selectWorkerAttendancePage(Map<String, Object> map); IPage<WorkerAttendanceVo> selectWorkerAttendancePage(Map<String, Object> map);
/** /**
* 列表查询人员考勤信息 * 列表查询人员考勤信息

View File

@ -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.WorkerDailyAttendanceStatisticsV2;
import com.zhgd.xmgl.modules.worker.entity.bo.CalAttendanceBo; 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.dto.WorkerDailyAttendanceStatisticsV2Dto;
import com.zhgd.xmgl.modules.worker.entity.vo.CountWorkerDailyAttendanceStatisticsV2Vo; import com.zhgd.xmgl.modules.worker.entity.vo.*;
import com.zhgd.xmgl.modules.worker.entity.vo.WorkerDailyAttendanceStatisticsV2Vo;
import com.zhgd.xmgl.modules.worker.entity.vo.WorkerDailyAttendancesByDateVo;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -97,4 +95,7 @@ public interface IWorkerDailyAttendanceStatisticsV2Service extends IService<Work
ChartDataVo countWorkerDailyAttendanceStatisticsV2ByDate(Map<String, Object> param); ChartDataVo countWorkerDailyAttendanceStatisticsV2ByDate(Map<String, Object> param);
IPage<WorkerDailyAttendanceStatisticsV2Vo> getWorkerDailyAttendancePageForWorkerByDate(HashMap<String, Object> param); IPage<WorkerDailyAttendanceStatisticsV2Vo> getWorkerDailyAttendancePageForWorkerByDate(HashMap<String, Object> param);
List<CountWorkerDailyAttendanceByDateVo> countWorkerDailyAttendanceByDate(HashMap<String, Object> param);
} }

View File

@ -254,7 +254,7 @@ public class WorkerAttendanceServiceImpl extends ServiceImpl<WorkerAttendanceMap
} }
@Override @Override
public IPage<EntityMap> selectWorkerAttendancePage(Map<String, Object> map) { public IPage<WorkerAttendanceVo> selectWorkerAttendancePage(Map<String, Object> map) {
String groupId = MapUtils.getString(map, "groupId"); String groupId = MapUtils.getString(map, "groupId");
if (StrUtil.isNotBlank(groupId)) { if (StrUtil.isNotBlank(groupId)) {
List<String> devSnList = ufaceDevService.getDevSnListByGroupId(groupId).stream().map(UfaceDev::getDevSn).collect(Collectors.toList()); List<String> devSnList = ufaceDevService.getDevSnListByGroupId(groupId).stream().map(UfaceDev::getDevSn).collect(Collectors.toList());
@ -265,8 +265,8 @@ public class WorkerAttendanceServiceImpl extends ServiceImpl<WorkerAttendanceMap
} }
int pageNo = Integer.parseInt(map.getOrDefault("pageNo", 1).toString()); int pageNo = Integer.parseInt(map.getOrDefault("pageNo", 1).toString());
int pageSize = Integer.parseInt(map.getOrDefault("pageSize", 10).toString()); int pageSize = Integer.parseInt(map.getOrDefault("pageSize", 10).toString());
Page<EntityMap> page = new Page<>(pageNo, pageSize); Page<WorkerAttendanceVo> page = new Page<>(pageNo, pageSize);
Page<EntityMap> pageList = workerAttendanceMapper.selectWorkerAttendancePage(page, map); Page<WorkerAttendanceVo> pageList = workerAttendanceMapper.selectWorkerAttendancePage(page, map);
return pageList; return pageList;
} }

View File

@ -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.CountWorkerDailyAttendanceStatisticsV2ByDateBo;
import com.zhgd.xmgl.modules.worker.entity.bo.Hour2dayJsonBo; 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.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.CountWorkerDailyAttendanceStatisticsV2Vo;
import com.zhgd.xmgl.modules.worker.entity.vo.WorkerDailyAttendanceStatisticsV2Vo; import com.zhgd.xmgl.modules.worker.entity.vo.WorkerDailyAttendanceStatisticsV2Vo;
import com.zhgd.xmgl.modules.worker.mapper.WorkerDailyAttendanceStatisticsV2Mapper; import com.zhgd.xmgl.modules.worker.mapper.WorkerDailyAttendanceStatisticsV2Mapper;
@ -501,12 +502,16 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl<Wo
) )
)); ));
for (WorkerDailyAttendanceStatisticsV2Vo vo : pageList.getRecords()) { for (WorkerDailyAttendanceStatisticsV2Vo vo : pageList.getRecords()) {
String firstInTime = Optional.ofNullable(personSn2DateMap.get(vo.getPersonSn())).map(m -> m.get(DateUtil.formatDate(vo.getAttendanceDate()))) String date = 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); Optional<List<WorkerAttendance>> workerAttendancesOpt = Optional.ofNullable(personSn2DateMap.get(vo.getPersonSn())).map(m -> m.get(date));
String endOutTime = Optional.ofNullable(personSn2DateMap.get(vo.getPersonSn())).map(m -> m.get(DateUtil.formatDate(vo.getAttendanceDate()))) String firstInTime = workerAttendancesOpt.flatMap(m -> m.stream().filter(w -> Objects.equals(w.getPassType(), 1)).min(Comparator.comparing(WorkerAttendance::getCreateTime)).map(WorkerAttendance::getCreateTime)).orElse(null);
.map(m -> m.stream().filter(w -> Objects.equals(w.getPassType(), 2)).max(Comparator.comparing(WorkerAttendance::getCreateTime)).map(WorkerAttendance::getCreateTime).orElse(null)).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.setFirstInTime(firstInTime);
vo.setEndOutTime(endOutTime); 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; return pageList;
@ -528,4 +533,21 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl<Wo
item.setData(data); item.setData(data);
return item; return item;
} }
@Override
public List<CountWorkerDailyAttendanceByDateVo> countWorkerDailyAttendanceByDate(HashMap<String, Object> param) {
List<String> 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<CountWorkerDailyAttendanceByDateVo> all = baseMapper.countWorkerDailyAttendanceByDate(param);
Map<String, CountWorkerDailyAttendanceByDateVo> allMap = all.stream().collect(Collectors.toMap(CountWorkerDailyAttendanceByDateVo::getDate, Function.identity()));
List<CountWorkerDailyAttendanceByDateVo> 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;
}
} }