diff --git a/src/main/java/com/zhgd/xmgl/modules/ocr/entity/OcrModulePlace.java b/src/main/java/com/zhgd/xmgl/modules/ocr/entity/OcrModulePlace.java index 9b5839768..029455bc6 100644 --- a/src/main/java/com/zhgd/xmgl/modules/ocr/entity/OcrModulePlace.java +++ b/src/main/java/com/zhgd/xmgl/modules/ocr/entity/OcrModulePlace.java @@ -1,17 +1,15 @@ package com.zhgd.xmgl.modules.ocr.entity; -import java.io.Serializable; -import java.util.Date; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; /** * @Description: ocr识别模块位置 @@ -65,4 +63,9 @@ public class OcrModulePlace implements Serializable { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "更新时间") private java.util.Date updateTime; + /** + * 配置json + */ + @ApiModelProperty(value = "配置json") + private java.lang.String configJson; } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/controller/EnterpriseInfoController.java b/src/main/java/com/zhgd/xmgl/modules/worker/controller/EnterpriseInfoController.java index fef742e79..77421f3b6 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/controller/EnterpriseInfoController.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/controller/EnterpriseInfoController.java @@ -1,30 +1,42 @@ package com.zhgd.xmgl.modules.worker.controller; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhgd.annotation.OperLog; import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.jeecg.common.mybatis.EntityMap; +import com.zhgd.xmgl.modules.worker.entity.DepartmentInfo; import com.zhgd.xmgl.modules.worker.entity.EnterpriseInfo; import com.zhgd.xmgl.modules.worker.entity.SjEnterpriseInfo; +import com.zhgd.xmgl.modules.worker.entity.TeamInfo; +import com.zhgd.xmgl.modules.worker.entity.vo.EnterpriseDepartmentTeamTreeVo; import com.zhgd.xmgl.modules.worker.entity.vo.StatsEnterpriseWeekVo; +import com.zhgd.xmgl.modules.worker.service.IDepartmentInfoService; import com.zhgd.xmgl.modules.worker.service.IEnterpriseInfoService; +import com.zhgd.xmgl.modules.worker.service.ITeamInfoService; +import com.zhgd.xmgl.util.ListUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.MapUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import springfox.documentation.annotations.ApiIgnore; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** @@ -41,6 +53,12 @@ import java.util.Map; public class EnterpriseInfoController { @Autowired private IEnterpriseInfoService enterpriseInfoService; + @Lazy + @Autowired + private IDepartmentInfoService departmentInfoService; + @Lazy + @Autowired + private ITeamInfoService teamInfoService; /** * 列表查询 @@ -177,7 +195,6 @@ public class EnterpriseInfoController { return enterpriseInfoService.deleteSj(enterpriseInfo); } - /** * 通过id查询 * @@ -195,7 +212,6 @@ public class EnterpriseInfoController { return Result.success(enterpriseInfoService.getEnterpriseInfoById(map)); } - @OperLog(operModul = "劳务公司管理", operType = "查询", operDesc = "通过社会统一信用代码查询劳务公司") @ApiOperation(value = "通过社会统一信用代码查询劳务公司", notes = "通过社会统一信用代码查询劳务公司", httpMethod = "POST") @ApiImplicitParams({ @@ -248,4 +264,62 @@ public class EnterpriseInfoController { public Result statsEnterpriseWeek(@ApiIgnore @RequestBody Map param) { return Result.success(enterpriseInfoService.statsEnterpriseWeek(param)); } + + @ApiOperation(value = "查询单位部门班组tree列表", notes = "查询单位部门班组tree列表", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "enterpriseTypeId", value = "企业类型", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "name", value = "名称", paramType = "body", required = false, dataType = "String"), + }) + @PostMapping(value = "/getEnterpriseDepartmentTeamTree") + public Result> getEnterpriseDepartmentTeamTree(@ApiIgnore @RequestBody Map param) { + String projectSn = MapUtils.getString(param, "projectSn"); + String name = MapUtils.getString(param, "name"); + List all = new ArrayList<>(); + List departmentInfos = departmentInfoService.list(new LambdaQueryWrapper() + .eq(DepartmentInfo::getProjectSn, projectSn)); + List teamInfoList = teamInfoService.list(new LambdaQueryWrapper() + .eq(TeamInfo::getProjectSn, projectSn)); + Map enterpriseId2UniqueIdMap = new HashMap<>(); + List enterprises = enterpriseInfoService.getEnterpriseInfos(param).stream().map(e -> { + enterpriseId2UniqueIdMap.put(e.getId(), e.getId() + ""); + EnterpriseDepartmentTeamTreeVo vo = new EnterpriseDepartmentTeamTreeVo(); + vo.setUniqueId(e.getId() + ""); + vo.setParentId(e.getParentEnterpriseId() + ""); + vo.setName(e.getEnterpriseName()); + vo.setOriginalId(e.getId() + ""); + vo.setTypeName(e.getCompanyTypeName()); + vo.setCategory(1); + return vo; + }).collect(Collectors.toList()); + List departments = departmentInfos.stream().filter(d -> Objects.nonNull(enterpriseId2UniqueIdMap.get(d.getEnterpriseId()))).map(d -> { + EnterpriseDepartmentTeamTreeVo vo = new EnterpriseDepartmentTeamTreeVo(); + vo.setUniqueId(IdUtil.randomUUID()); + vo.setParentId(enterpriseId2UniqueIdMap.get(d.getEnterpriseId())); + vo.setName(d.getDepartmentName()); + vo.setOriginalId(d.getId() + ""); + vo.setTypeName("部门"); + vo.setCategory(2); + return vo; + }).collect(Collectors.toList()); + List teams = teamInfoList.stream().filter(t -> Objects.nonNull(enterpriseId2UniqueIdMap.get(t.getEnterpriseId()))).map(t -> { + EnterpriseDepartmentTeamTreeVo vo = new EnterpriseDepartmentTeamTreeVo(); + vo.setUniqueId(IdUtil.randomUUID()); + vo.setParentId(enterpriseId2UniqueIdMap.get(t.getEnterpriseId())); + vo.setName(t.getTeamName()); + vo.setOriginalId(t.getId() + ""); + vo.setTypeName("班组"); + vo.setCategory(3); + return vo; + }).collect(Collectors.toList()); + all.addAll(enterprises); + all.addAll(departments); + all.addAll(teams); + if (StrUtil.isNotBlank(name)) { + all = all.stream().filter(vo -> vo.getName().contains(name)).collect(Collectors.toList()); + } + List vos = BeanUtil.copyToList(ListUtils.listToTree(JSONArray.parseArray(JSON.toJSONString(all)), "uniqueId", "parentId", "children"), EnterpriseDepartmentTeamTreeVo.class); + return Result.success(vos); + } + } 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 9ca79eea0..38fdd1319 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 @@ -2,11 +2,13 @@ package com.zhgd.xmgl.modules.worker.controller; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; 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.NumberUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -23,10 +25,7 @@ import com.zhgd.xmgl.modules.worker.entity.WorkerAttendance; import com.zhgd.xmgl.modules.worker.entity.WorkerDailyAttendanceStatisticsV2; import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; 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.StatisticsListVo; -import com.zhgd.xmgl.modules.worker.entity.vo.WorkerDailyAttendanceStatisticsV2Vo; +import com.zhgd.xmgl.modules.worker.entity.vo.*; 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; @@ -484,5 +483,147 @@ public class WorkerDailyAttendanceStatisticsV2Controller { return Result.success(workerDailyAttendanceStatisticsV2Service.countWorkerDailyAttendanceStatisticsV2ByDate(param)); } + @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"), + }) + @PostMapping(value = "/getWorkerDailyAttendancesByDate") + public Result> getWorkerDailyAttendancesByDate(@RequestBody HashMap param) { + String projectSn = MapUtils.getString(param, "projectSn"); + String attendanceDate = MapUtils.getString(param, "attendanceDate"); + param.put("addTime_end", attendanceDate); + IPage workerInfoList = workerInfoService.selectWorkerInfoList(param); + Map personSnMap = workerDailyAttendanceStatisticsV2Service.queryList(param).stream() + .collect(Collectors.toMap(WorkerDailyAttendanceStatisticsV2::getPersonSn, Function.identity())); + Map> personSn2AttendancesMap = workerAttendanceService.list(new LambdaQueryWrapper() + .eq(WorkerAttendance::getProjectSn, projectSn) + .ge(WorkerAttendance::getCreateTime, attendanceDate) + .le(WorkerAttendance::getCreateTime, DateUtil.formatDateTime(DateUtil.endOfDay(DateUtil.parseDate(attendanceDate))))) + .stream().collect(Collectors.groupingBy(WorkerAttendance::getPersonSn)); + List vos = new ArrayList<>(); + for (WorkerInfo workerInfo : workerInfoList.getRecords()) { + WorkerDailyAttendanceStatisticsV2Vo voDb = personSnMap.get(workerInfo.getPersonSn()); + WorkerDailyAttendancesByDateVo vo = new WorkerDailyAttendancesByDateVo(); + if (voDb != null) { + BeanUtil.copyProperties(vo, voDb); + } else { + vo.setPersonType(workerInfo.getPersonType()); + vo.setEnterpriseName(workerInfo.getEnterpriseName()); + vo.setWorkerName(workerInfo.getWorkerName()); + vo.setDeptName(workerInfo.getDepartmentName()); + vo.setProjectSn(workerInfo.getProjectSn()); + vo.setPersonSn(workerInfo.getPersonSn()); + vo.setAttendanceDate(DateUtil.parseDate(attendanceDate)); + vo.setHourVal(new BigDecimal("0")); + vo.setDayVal(new BigDecimal("0")); + vo.setIsAttendance(0); + vo.setOvertimeHourVal(new BigDecimal("0")); + vo.setOvertimeDayVal(new BigDecimal("0")); + vo.setInserviceType(workerInfo.getInserviceType()); + } + List attendances = personSn2AttendancesMap.get(workerInfo.getPersonSn()); + if (Objects.equals(vo.getIsAttendance(), 1) && CollUtil.isNotEmpty(attendances)) { + String firstInTime = attendances.stream().filter(w -> Objects.equals(w.getPassType(), 1)).min(Comparator.comparing(WorkerAttendance::getCreateTime)).map(WorkerAttendance::getCreateTime).orElse(null); + String endOutTime = attendances.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 = attendances.stream().filter(w -> DateUtil.compare(DateUtil.parseDateTime(w.getCreateTime()), DateUtil.parseDateTime(attendanceDate + " 12:00:00")) < 0).min(Comparator.comparing(WorkerAttendance::getCreateTime)).map(WorkerAttendance::getCreateTime).orElse(null); + 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); + } + vos.add(vo); + } + IPage p = new Page<>(); + p.setTotal(workerInfoList.getTotal()); + p.setRecords(vos); + p.setCurrent(workerInfoList.getCurrent()); + p.setSize(workerInfoList.getSize()); + return Result.success(p); + } + + @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"), + }) + @PostMapping(value = "/countWorkerDailyAttendancesStaticsByDate") + public Result countWorkerDailyAttendancesStaticsByDate(@RequestBody HashMap param) { + String projectSn = MapUtils.getString(param, "projectSn"); + String attendanceDate = MapUtils.getString(param, "attendanceDate"); + param.put("addTime_end", attendanceDate); + List vos = workerDailyAttendanceStatisticsV2Service.queryList(param); + CountWorkerDailyAttendancesStaticsByDateVo vo = new CountWorkerDailyAttendancesStaticsByDateVo(); + vo.setInServiceCount((int) vos.stream().filter(v -> Objects.equals(v.getInserviceType(), 1)).count()); + vo.setAttendanceCount((int) vos.stream().filter(v -> Objects.equals(v.getIsAttendance(), 1)).count()); + vo.setAbsentCount((int) vos.stream().filter(v -> Objects.equals(v.getIsAttendance(), 0)).count()); + vo.setAttendanceRate(Objects.nonNull(vo.getInServiceCount()) ? NumberUtil.mul(NumberUtil.div(vo.getAttendanceCount(), vo.getInServiceCount(), 4), new BigDecimal("100")) : null); + param.put("addTime_end", null); + param.put("exitDate_begin", attendanceDate); + param.put("exitDate_end", attendanceDate); + IPage workerInfoList = workerInfoService.selectWorkerInfoList(param); + vo.setLeftCount((int) workerInfoList.getTotal()); + return Result.success(vo); + } + + @ApiOperation(value = "导出考勤日报excel记录", notes = "导出考勤日报excel记录", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "downloadType", value = "1上下午打卡2进出场打卡", 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); +// } +// } + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/entity/WorkerDailyAttendanceStatisticsV2.java b/src/main/java/com/zhgd/xmgl/modules/worker/entity/WorkerDailyAttendanceStatisticsV2.java index 6e5db00ce..50829c678 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/entity/WorkerDailyAttendanceStatisticsV2.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/entity/WorkerDailyAttendanceStatisticsV2.java @@ -72,4 +72,9 @@ public class WorkerDailyAttendanceStatisticsV2 implements Serializable { */ @ApiModelProperty(value = "加班工日") private java.math.BigDecimal overtimeDayVal; + /** + * 在职状态 1在职 2离职 + */ + @ApiModelProperty(value = "在职状态 1在职 2离职") + private java.lang.Integer inserviceType; } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/CountWorkerDailyAttendancesStaticsByDateVo.java b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/CountWorkerDailyAttendancesStaticsByDateVo.java new file mode 100644 index 000000000..64d2fa428 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/CountWorkerDailyAttendancesStaticsByDateVo.java @@ -0,0 +1,35 @@ +package com.zhgd.xmgl.modules.worker.entity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class CountWorkerDailyAttendancesStaticsByDateVo { + /** + * 当日在职 + */ + @ApiModelProperty("当日在职") + private Integer inServiceCount; + /** + * 当日出勤 + */ + @ApiModelProperty("当日出勤") + private Integer attendanceCount; + /** + * 当日缺勤 + */ + @ApiModelProperty("当日缺勤") + private Integer absentCount; + /** + * 出勤率 + */ + @ApiModelProperty("出勤率") + private BigDecimal attendanceRate; + /** + * 当日退场 + */ + @ApiModelProperty("当日退场") + private Integer leftCount; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/EnterpriseDepartmentTeamTreeVo.java b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/EnterpriseDepartmentTeamTreeVo.java new file mode 100644 index 000000000..a43c3949c --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/EnterpriseDepartmentTeamTreeVo.java @@ -0,0 +1,45 @@ +package com.zhgd.xmgl.modules.worker.entity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EnterpriseDepartmentTeamTreeVo { + /** + * 唯一id + */ + @ApiModelProperty("唯一id") + private String uniqueId; + /** + * parentId + */ + @ApiModelProperty("parentId") + private String parentId; + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + /** + * 原始id + */ + @ApiModelProperty("原始id") + private String originalId; + /** + * 类型名称 + */ + @ApiModelProperty("类型名称") + private String typeName; + /** + * 1单位2部门3班组 + */ + @ApiModelProperty("1单位2部门3班组") + private Integer category; + /** + * children + */ + @ApiModelProperty("children") + private List children; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/EnterpriseInfoVo.java b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/EnterpriseInfoVo.java index d45242545..e7e50d759 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/EnterpriseInfoVo.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/EnterpriseInfoVo.java @@ -1,7 +1,12 @@ package com.zhgd.xmgl.modules.worker.entity.vo; +import com.zhgd.xmgl.modules.worker.entity.EnterpriseInfo; import lombok.Data; +import java.util.List; + @Data -public class EnterpriseInfoVo { +public class EnterpriseInfoVo extends EnterpriseInfo { + private List children; + private String enterpriseId; } 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 new file mode 100644 index 000000000..330bc6c92 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/worker/entity/vo/WorkerDailyAttendancesByDateVo.java @@ -0,0 +1,28 @@ +package com.zhgd.xmgl.modules.worker.entity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class WorkerDailyAttendancesByDateVo extends WorkerDailyAttendanceStatisticsV2Vo { + /** + * 进场打卡(首次) + */ + @ApiModelProperty(value = "进场打卡(首次)") + private String firstInTime; + /** + * 出场打卡(末次) + */ + @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/xml/WorkerDailyAttendanceStatisticsV2Mapper.xml b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerDailyAttendanceStatisticsV2Mapper.xml index 73a2f3d47..4451e867d 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 @@ -11,7 +11,7 @@ ,en.enterprise_name ,if(a.person_type=1,b.team_name,c.department_name) as dept_name from worker_daily_attendance_statistics_v2 t - LEFT JOIN worker_info a on t.person_sn=a.person_sn + 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 LEFT JOIN department_info c ON a.department_id = c.id and a.person_type = 2 LEFT JOIN worker_type wt ON b.worker_type_id = wt.id and a.person_type = 1 diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerInfoMapper.xml b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerInfoMapper.xml index 970bbb88f..4e9fbccc0 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerInfoMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerInfoMapper.xml @@ -257,6 +257,12 @@ and FIND_IN_SET(a.id, #{param.workerInfos}) + + and a.add_time >= #{param.addTime_begin} + + + and a.add_time <= CONCAT(DATE_FORMAT(#{param.addTime_end}, '%Y-%m-%d'), ' 23:59:59') + order by a.exit_date desc diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/IEnterpriseInfoService.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/IEnterpriseInfoService.java index a7e12dc39..401881585 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/IEnterpriseInfoService.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/IEnterpriseInfoService.java @@ -9,6 +9,7 @@ import com.zhgd.jeecg.common.mybatis.EntityMap; import com.zhgd.xmgl.base.CompanyVo; import com.zhgd.xmgl.modules.worker.entity.EnterpriseInfo; import com.zhgd.xmgl.modules.worker.entity.SjEnterpriseInfo; +import com.zhgd.xmgl.modules.worker.entity.vo.EnterpriseInfoVo; import com.zhgd.xmgl.modules.worker.entity.vo.StatsEnterpriseWeekVo; import java.util.List; @@ -23,11 +24,14 @@ import java.util.Map; public interface IEnterpriseInfoService extends IService { /** * 列表查询劳务公司信息 + * * @param map * @return */ List getEnterpriseInfoList(Map map); + List getEnterpriseInfos(Map map); + /** * 添加劳务公司信息 * @param enterpriseInfo 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 f774696f6..3a629bac7 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 @@ -76,12 +76,13 @@ public interface IWorkerDailyAttendanceStatisticsV2Service extends IService attendances, List allAttendances); + void calAndSaveStatistics(String projectSn, String personSn, Integer inserviceType, DateTime date, WorkerAttendanceRuleV2 ruleV2, List attendances, List allAttendances); /** * 重新统计考勤 diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/EnterpriseInfoServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/EnterpriseInfoServiceImpl.java index 1b4e562cb..1049828f9 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/EnterpriseInfoServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/EnterpriseInfoServiceImpl.java @@ -42,6 +42,7 @@ import com.zhgd.xmgl.modules.quality.enums.QualityInspectionRecordStatusEnum; import com.zhgd.xmgl.modules.quality.service.IQualityInspectionRecordService; import com.zhgd.xmgl.modules.quality.service.IQualityRegionService; import com.zhgd.xmgl.modules.worker.entity.*; +import com.zhgd.xmgl.modules.worker.entity.vo.EnterpriseInfoVo; import com.zhgd.xmgl.modules.worker.entity.vo.StatsEnterpriseWeekVo; import com.zhgd.xmgl.modules.worker.mapper.DepartmentInfoMapper; import com.zhgd.xmgl.modules.worker.mapper.EnterpriseInfoMapper; @@ -190,6 +191,12 @@ public class EnterpriseInfoServiceImpl extends ServiceImpl getEnterpriseInfos(Map map) { + List enterpriseInfoList = getEnterpriseInfoList(map); + return BeanUtil.copyToList(enterpriseInfoList, EnterpriseInfoVo.class); + } + @Override public List getSupplierEnterprises(Map map) { 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 d1103c009..eba7efe5a 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 @@ -188,7 +188,7 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl attendances, List allAttendances) { + public void calAndSaveStatistics(String projectSn, String personSn, Integer inserviceType, DateTime date, WorkerAttendanceRuleV2 ruleV2, List attendances, List allAttendances) { attendances = attendances.stream().filter(o -> Objects.equals(o.getPersonSn(), personSn) && (DateUtil.isSameDay(DateUtil.offsetDay(date, -1), o.getDate()) || DateUtil.isSameDay(date, o.getDate()) @@ -209,6 +209,7 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl workerInfos = workerInfoService.list(new LambdaQueryWrapper() .eq(WorkerInfo::getProjectSn, projectSn) - .eq(WorkerInfo::getInserviceType, 1) ); Map groupToRuleMap = workerAttendanceRuleV2Service.list(new LambdaQueryWrapper().eq(WorkerAttendanceRuleV2::getProjectSn, projectSn)) .stream().collect(Collectors.toMap(WorkerAttendanceRuleV2::getGroupV2Id, Function.identity(), (o1, o2) -> o1)); @@ -450,7 +450,7 @@ public class WorkerDailyAttendanceStatisticsV2ServiceImpl extends ServiceImpl