修改bug

This commit is contained in:
guoshengxiong 2025-08-13 11:43:40 +08:00
parent 0cf0c64722
commit 4d1938005f
6 changed files with 106 additions and 1 deletions

View File

@ -16,12 +16,14 @@ import com.zhgd.file.FileUtil;
import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.xmgl.async.AsyncAttendance; import com.zhgd.xmgl.async.AsyncAttendance;
import com.zhgd.xmgl.base.entity.vo.echarts.ChartDataVo;
import com.zhgd.xmgl.modules.project.entity.Project; import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.service.IProjectService; import com.zhgd.xmgl.modules.project.service.IProjectService;
import com.zhgd.xmgl.modules.worker.entity.WorkerAttendance; import com.zhgd.xmgl.modules.worker.entity.WorkerAttendance;
import com.zhgd.xmgl.modules.worker.entity.WorkerDailyAttendanceStatisticsV2; import com.zhgd.xmgl.modules.worker.entity.WorkerDailyAttendanceStatisticsV2;
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
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.ExceptionHourStatisticsListVo; import com.zhgd.xmgl.modules.worker.entity.vo.ExceptionHourStatisticsListVo;
import com.zhgd.xmgl.modules.worker.entity.vo.StatisticsListVo; import com.zhgd.xmgl.modules.worker.entity.vo.StatisticsListVo;
import com.zhgd.xmgl.modules.worker.entity.vo.WorkerDailyAttendanceStatisticsV2Vo; import com.zhgd.xmgl.modules.worker.entity.vo.WorkerDailyAttendanceStatisticsV2Vo;

View File

@ -0,0 +1,23 @@
package com.zhgd.xmgl.modules.worker.entity.bo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class CountWorkerDailyAttendanceStatisticsV2ByDateBo {
private String xName;
/**
* 出勤总人数
*/
private Integer totalAttendanceNum;
/**
* 在职总人数
*/
private Integer totalInServiceNum;
/**
* 平均出勤率
*/
private BigDecimal attendanceRateAvg;
}

View File

@ -0,0 +1,16 @@
package com.zhgd.xmgl.modules.worker.entity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class CountWorkerDailyAttendanceStatisticsV2Vo {
@ApiModelProperty("出勤总人数")
private Integer totalAttendanceNum;
@ApiModelProperty("在职总人数")
private Integer totalInServiceNum;
@ApiModelProperty("平均出勤率")
private BigDecimal attendanceRateAvg;
}

View File

@ -6,12 +6,15 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants; 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.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;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @Description: 员工每日的考勤统计记录v2 * @Description: 员工每日的考勤统计记录v2
@ -51,4 +54,8 @@ public interface WorkerDailyAttendanceStatisticsV2Mapper extends BaseMapper<Work
WorkerDailyAttendanceStatisticsV2Vo queryById(String id); WorkerDailyAttendanceStatisticsV2Vo queryById(String id);
String getMaxTaskAttendanceDate(); String getMaxTaskAttendanceDate();
CountWorkerDailyAttendanceStatisticsV2Vo countWorkerDailyAttendanceStatisticsV2(Map<String, Object> param);
List<CountWorkerDailyAttendanceStatisticsV2ByDateBo> countWorkerDailyAttendanceStatisticsV2ByDate(Map<String, Object> param);
} }

View File

@ -3,10 +3,12 @@ package com.zhgd.xmgl.modules.worker.service;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.zhgd.xmgl.base.entity.vo.echarts.ChartDataVo;
import com.zhgd.xmgl.modules.worker.entity.WorkerAttendanceRuleV2; 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.WorkerDailyAttendanceStatisticsV2Vo; import com.zhgd.xmgl.modules.worker.entity.vo.WorkerDailyAttendanceStatisticsV2Vo;
import java.util.HashMap; import java.util.HashMap;
@ -87,4 +89,8 @@ public interface IWorkerDailyAttendanceStatisticsV2Service extends IService<Work
* @param map * @param map
*/ */
void recalculateAttendanceV2(Map<String, Object> map); void recalculateAttendanceV2(Map<String, Object> map);
CountWorkerDailyAttendanceStatisticsV2Vo countWorkerDailyAttendanceStatisticsV2(Map<String, Object> param);
ChartDataVo countWorkerDailyAttendanceStatisticsV2ByDate(Map<String, Object> param);
} }

View File

@ -12,13 +12,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.jeecg.common.system.query.QueryGenerator; import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.xmgl.base.entity.vo.echarts.ChartDataVo;
import com.zhgd.xmgl.base.entity.vo.echarts.SeriesItem;
import com.zhgd.xmgl.modules.worker.entity.WorkerAttendance; import com.zhgd.xmgl.modules.worker.entity.WorkerAttendance;
import com.zhgd.xmgl.modules.worker.entity.WorkerAttendanceRuleV2; 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.WorkerInfo; import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
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.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.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;
import com.zhgd.xmgl.modules.worker.service.IWorkerAttendanceRuleV2Service; import com.zhgd.xmgl.modules.worker.service.IWorkerAttendanceRuleV2Service;
@ -423,7 +427,9 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl<Wo
DateRange range = DateUtil.range(startTime, endTime, DateField.DAY_OF_YEAR); DateRange range = DateUtil.range(startTime, endTime, DateField.DAY_OF_YEAR);
String projectSn = MapUtils.getString(map, "projectSn"); String projectSn = MapUtils.getString(map, "projectSn");
List<WorkerInfo> workerInfos = workerInfoService.list(new LambdaQueryWrapper<WorkerInfo>() List<WorkerInfo> workerInfos = workerInfoService.list(new LambdaQueryWrapper<WorkerInfo>()
.eq(WorkerInfo::getProjectSn, projectSn)); .eq(WorkerInfo::getProjectSn, projectSn)
.eq(WorkerInfo::getInserviceType, 1)
);
Map<Long, WorkerAttendanceRuleV2> groupToRuleMap = workerAttendanceRuleV2Service.list(new LambdaQueryWrapper<WorkerAttendanceRuleV2>().eq(WorkerAttendanceRuleV2::getProjectSn, projectSn)) Map<Long, WorkerAttendanceRuleV2> groupToRuleMap = workerAttendanceRuleV2Service.list(new LambdaQueryWrapper<WorkerAttendanceRuleV2>().eq(WorkerAttendanceRuleV2::getProjectSn, projectSn))
.stream().collect(Collectors.toMap(WorkerAttendanceRuleV2::getGroupV2Id, Function.identity(), (o1, o2) -> o1)); .stream().collect(Collectors.toMap(WorkerAttendanceRuleV2::getGroupV2Id, Function.identity(), (o1, o2) -> o1));
List<WorkerAttendance> attendanceDbs = workerAttendanceService.list(new LambdaQueryWrapper<WorkerAttendance>() List<WorkerAttendance> attendanceDbs = workerAttendanceService.list(new LambdaQueryWrapper<WorkerAttendance>()
@ -448,4 +454,49 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl<Wo
} }
} }
} }
@Override
public CountWorkerDailyAttendanceStatisticsV2Vo countWorkerDailyAttendanceStatisticsV2(Map<String, Object> param) {
return baseMapper.countWorkerDailyAttendanceStatisticsV2(param);
}
@Override
public ChartDataVo countWorkerDailyAttendanceStatisticsV2ByDate(Map<String, Object> param) {
String projectSn = MapUtils.getString(param, "projectSn");
List<String> dateTimeStrList;
if (StrUtil.isNotBlank(MapUtils.getString(param, "startMonth"))) {
dateTimeStrList = DateUtil.rangeToList(DateUtil.parseDate(MapUtils.getString(param, "startMonth") + "-01"), DateUtil.parseDate(MapUtils.getString(param, "endMonth") + "-01"), DateField.MONTH)
.stream().map(dateTime -> DateUtil.format(dateTime, "yyyy-MM")).collect(Collectors.toList());
} else {
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());
}
ChartDataVo chartDataVo = new ChartDataVo();
chartDataVo.setX(dateTimeStrList);
List<CountWorkerDailyAttendanceStatisticsV2ByDateBo> all = baseMapper.countWorkerDailyAttendanceStatisticsV2ByDate(param);
Map<String, CountWorkerDailyAttendanceStatisticsV2ByDateBo> allMap = all.stream().collect(Collectors.toMap(CountWorkerDailyAttendanceStatisticsV2ByDateBo::getXName, Function.identity()));
List<SeriesItem> seriesItems = new ArrayList<>();
seriesItems.add(getSeriesItemForCountDate("出勤总人数", dateTimeStrList, allMap, CountWorkerDailyAttendanceStatisticsV2ByDateBo::getTotalAttendanceNum));
seriesItems.add(getSeriesItemForCountDate("在职总人数", dateTimeStrList, allMap, CountWorkerDailyAttendanceStatisticsV2ByDateBo::getTotalInServiceNum));
seriesItems.add(getSeriesItemForCountDate("平均出勤率", dateTimeStrList, allMap, CountWorkerDailyAttendanceStatisticsV2ByDateBo::getAttendanceRateAvg));
chartDataVo.setSeries(seriesItems);
return chartDataVo;
}
/**
* 获取每月/日出勤/在职人数的图例数据
*
* @param yName
* @param dateTimeStrList
* @param allMap
* @param getAttendanceVal
* @return
*/
private SeriesItem getSeriesItemForCountDate(String yName, List<String> dateTimeStrList, Map<String, CountWorkerDailyAttendanceStatisticsV2ByDateBo> allMap, Function<CountWorkerDailyAttendanceStatisticsV2ByDateBo, Number> getAttendanceVal) {
SeriesItem item = new SeriesItem();
item.setName(yName);
List<Number> data = dateTimeStrList.stream().map(d -> Optional.ofNullable(allMap.get(d)).map(getAttendanceVal).orElse(null)).collect(Collectors.toList());
item.setData(data);
return item;
}
} }