From 742e67af235351753e80528cd6a264c4a27dc7cb Mon Sep 17 00:00:00 2001 From: zt Date: Thu, 4 Sep 2025 17:45:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E5=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SubConstructionUserQueryReq.java | 6 ++ .../SubConstructionUserVo.java | 4 + .../controller/GpsEquipmentController.java | 39 ++++++++- .../org/dromara/gps/domain/GpsEquipment.java | 5 ++ .../dromara/gps/domain/GpsEquipmentSon.java | 1 + .../gps/domain/bo/GpsEquipmentSonBo.java | 2 + .../gps/domain/vo/ConstructionUser.java | 18 +++++ .../service/impl/GpsEquipmentServiceImpl.java | 75 +++++++++++++++++ .../dromara/job/attendance/AttendanceJob.java | 2 + .../app/BusAttendanceAppController.java | 25 +++++- .../app/BusProjectAppController.java | 15 ++++ .../app/BusReissueCardAppController.java | 35 ++++++++ .../dromara/project/domain/BusAttendance.java | 6 +- .../dto/attendance/AttendanceCountDto.java | 36 +++++++++ .../reissuecard/BusReissueCardUpdateReq.java | 81 +++++++++++++++++++ .../project/domain/vo/BusAttendanceVo.java | 7 ++ .../vo/attendance/AttendanceCountVo.java | 23 ++++++ .../vo/attendance/AttendanceUserVo.java | 33 ++++++++ .../service/IBusAttendanceService.java | 16 ++++ .../service/IBusReissueCardService.java | 13 +++ .../impl/BusAttendanceServiceImpl.java | 57 +++++++++++++ .../impl/BusReissueCardServiceImpl.java | 31 ++++++- 22 files changed, 526 insertions(+), 4 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/ConstructionUser.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/AttendanceCountDto.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/reissuecard/BusReissueCardUpdateReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/AttendanceCountVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/AttendanceUserVo.java diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserQueryReq.java index 75dba85b..0354fb33 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserQueryReq.java @@ -91,4 +91,10 @@ public class SubConstructionUserQueryReq implements Serializable { */ private LocalDate entryDate; + + /** + * 创建人 + */ + private String userId; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/constructionuser/SubConstructionUserVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/constructionuser/SubConstructionUserVo.java index 605766f3..75f75a65 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/constructionuser/SubConstructionUserVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/constructionuser/SubConstructionUserVo.java @@ -278,4 +278,8 @@ public class SubConstructionUserVo implements Serializable { @ExcelProperty(value = "创建时间") private Date createTime; + /** + * 用户Id + */ + private Long sysUserId; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/GpsEquipmentController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/GpsEquipmentController.java index 20625ffe..65cbc15a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/GpsEquipmentController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/controller/GpsEquipmentController.java @@ -2,12 +2,22 @@ package org.dromara.gps.controller; import java.util.List; +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; import lombok.extern.slf4j.Slf4j; +import org.dromara.contractor.domain.SubConstructionUser; +import org.dromara.contractor.domain.dto.constructionuser.SubConstructionUserQueryReq; +import org.dromara.contractor.domain.exportvo.BusConstructionUserExportVo; +import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserVo; +import org.dromara.contractor.service.ISubConstructionUserService; +import org.dromara.gps.domain.vo.ConstructionUser; import org.dromara.gps.domain.vo.GpsUserVo; +import org.dromara.project.service.IBusProjectService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -39,6 +49,12 @@ public class GpsEquipmentController extends BaseController { private final IGpsEquipmentService gpsEquipmentService; + private final ISubConstructionUserService constructionUserService; + + + private final IBusProjectService projectService; + + /** * 接收设备数据 * @param jsonData @@ -64,7 +80,7 @@ public class GpsEquipmentController extends BaseController { /** * 查询GPS设备用户列表 */ - @SaCheckPermission("gps:equipment:list") + @SaCheckPermission("gps:equipment:getUserList") @GetMapping("/getUserList") public R> getUserList(GpsEquipmentBo bo) { return R.ok(gpsEquipmentService.getUserList(bo)); @@ -115,6 +131,12 @@ public class GpsEquipmentController extends BaseController { return toAjax(gpsEquipmentService.updateByBo(bo)); } + /** + * 项目列表 + */ + + + /** * GPS人机关联绑定 */ @@ -125,6 +147,21 @@ public class GpsEquipmentController extends BaseController { public R bindManmachine(@RequestBody GpsEquipmentBo bo) { return toAjax(gpsEquipmentService.bindManmachine(bo)); } + + + /** + * 查询施工人员列表 + */ + @SaCheckPermission("gps:equipment:bindManmachine") + @GetMapping("/userList") + public R> list(SubConstructionUserQueryReq req) { + List list = constructionUserService.list(Wrappers.lambdaQuery() + .eq(SubConstructionUser::getProjectId, req.getProjectId()) + ); + return R.ok(BeanUtil.copyToList(list,ConstructionUser.class )); + } + + /** * GPS人机关联解绑 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/GpsEquipment.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/GpsEquipment.java index b1261af4..f26d8081 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/GpsEquipment.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/GpsEquipment.java @@ -78,5 +78,10 @@ public class GpsEquipment extends BaseEntity { */ private String remark; + /** + * 存活状态 0-离线 1-在线 + */ + private String alive; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/GpsEquipmentSon.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/GpsEquipmentSon.java index 9484af58..588c8ee5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/GpsEquipmentSon.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/GpsEquipmentSon.java @@ -114,4 +114,5 @@ public class GpsEquipmentSon extends BaseEntity { private String remark; + private Long projectId; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java index 0bb133b2..00fc29e0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java @@ -114,4 +114,6 @@ public class GpsEquipmentSonBo extends BaseEntity { private String remark; + private Long projectId; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/ConstructionUser.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/ConstructionUser.java new file mode 100644 index 00000000..b575c216 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/vo/ConstructionUser.java @@ -0,0 +1,18 @@ +package org.dromara.gps.domain.vo; + + +import lombok.Data; + +@Data +public class ConstructionUser { + + /** + * 人员姓名 + */ + private String userName; + + /** + * 系统用户id + */ + private Long sysUserId; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java index 9d8d37e7..8fa82fb3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java @@ -1,10 +1,13 @@ package org.dromara.gps.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.R; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -13,6 +16,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import org.dromara.common.redis.utils.RedisUtils; import org.dromara.gps.domain.GpsEquipmentSon; import org.dromara.gps.domain.GpsManmachine; import org.dromara.gps.domain.bo.GpsEquipmentSonBo; @@ -21,6 +25,7 @@ import org.dromara.gps.mapper.GpsManmachineMapper; import org.dromara.gps.service.IGpsEquipmentSonService; import org.dromara.gps.service.IGpsManmachineService; import org.plutext.jaxb.svg11.G; +import org.redisson.api.ObjectListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.dromara.gps.domain.bo.GpsEquipmentBo; @@ -30,6 +35,7 @@ import org.dromara.gps.mapper.GpsEquipmentMapper; import org.dromara.gps.service.IGpsEquipmentService; import java.math.BigDecimal; +import java.time.Duration; import java.util.*; /** @@ -40,6 +46,7 @@ import java.util.*; */ @RequiredArgsConstructor @Service +@Slf4j public class GpsEquipmentServiceImpl extends ServiceImpl implements IGpsEquipmentService { private final GpsEquipmentMapper baseMapper; @@ -164,6 +171,9 @@ public class GpsEquipmentServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(GpsEquipment::getClientId, clientId) + .set(GpsEquipment::getAlive, "0"); // 0表示离线 + + this.update(null, updateWrapper); + + log.info("Device {} status updated to offline", clientId); + + } catch (Exception e) { + log.error("Failed to handle device offline for client: {}", clientId, e); } } + + + @Override public Boolean bindManmachine(GpsEquipmentBo bo) { baseMapper.update(new LambdaUpdateWrapper() .set(GpsEquipment::getUserId,bo.getUserId()) .eq(GpsEquipment::getId,bo.getId())); + //只能绑定一个设备 + List gpsManmachines = gpsManmachineMapper.selectList(Wrappers.lambdaQuery() + .eq(GpsManmachine::getUserId, bo.getUserId())); + if(CollectionUtil.isNotEmpty(gpsManmachines)){ + throw new ServiceException("选中用户已绑定设备"); + } + GpsManmachine gpsManmachine = new GpsManmachine(); gpsManmachine.setClientId(bo.getClientId()); gpsManmachine.setUserId(bo.getUserId()); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/attendance/AttendanceJob.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/attendance/AttendanceJob.java index 1238550a..80152702 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/attendance/AttendanceJob.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/attendance/AttendanceJob.java @@ -145,6 +145,7 @@ public class AttendanceJob { busAttendance.setClockDate(date); busAttendance.setClockType(BusAttendanceCommuterEnum.CLOCKIN.getValue()); + busAttendance.setRuleTime(rule.getClockInTime()); if(leaveService.isLeave(date, relevancy.getUserId())){ busAttendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVE.getValue()); }else { @@ -257,6 +258,7 @@ public class AttendanceJob { busAttendance.setClockDate(date); busAttendance.setClockType(BusAttendanceCommuterEnum.CLOCKOUT.getValue()); + busAttendance.setRuleTime(rule.getClockOutTime()); if(leaveService.isLeave(date, relevancy.getUserId())){ busAttendance.setClockStatus(BusAttendanceClockStatusEnum.LEAVE.getValue()); }else { diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusAttendanceAppController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusAttendanceAppController.java index aee48233..29a3e46e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusAttendanceAppController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusAttendanceAppController.java @@ -4,21 +4,28 @@ import cn.hutool.core.collection.CollectionUtil; import jakarta.annotation.Resource; import jakarta.validation.constraints.NotNull; import org.dromara.common.core.domain.R; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.web.core.BaseController; import org.dromara.contractor.service.ISubConstructionUserService; import org.dromara.project.domain.BusProjectPunchrange; +import org.dromara.project.domain.dto.attendance.AttendanceCountDto; import org.dromara.project.domain.dto.attendance.BusAttendancePunchCardByFaceReq; import org.dromara.project.domain.vo.BusAttendanceRuleVo; import org.dromara.project.domain.vo.BusAttendanceVo; import org.dromara.project.domain.vo.BusMonthAttendanceVo; +import org.dromara.project.domain.vo.attendance.AttendanceCountVo; +import org.dromara.project.domain.vo.attendance.AttendanceUserVo; import org.dromara.project.service.IBusAttendanceRuleService; import org.dromara.project.service.IBusAttendanceService; import org.dromara.project.service.IBusProjectPunchrangeService; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.time.LocalDate; import java.util.List; /** @@ -94,9 +101,9 @@ public class BusAttendanceAppController extends BaseController { @GetMapping("/getTodayAttendance/{projectId}") public R> getTodayAttendance(@NotNull @PathVariable("projectId") Long projectId){ return R.ok(attendanceService.getTodayAttendance(projectId)); - } + /** * 获取用户指定月份打卡记录 */ @@ -115,6 +122,22 @@ public class BusAttendanceAppController extends BaseController { } + /** + * 统计指定日期的打卡人员 + */ + @GetMapping("/count") + public R getAttendanceCount(AttendanceCountDto dto){ + return R.ok(attendanceService.getAttendanceCount(dto)); + } + + /** + * 指定日期的打卡人员列表 + */ + @GetMapping("/getAttendanceCount") + public TableDataInfo getAttendanceUser(AttendanceCountDto dto,PageQuery pageQuery){ + return attendanceService.getAttendanceUser(dto,pageQuery); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectAppController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectAppController.java index 70cf7816..d5754a6f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectAppController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectAppController.java @@ -3,8 +3,11 @@ package org.dromara.project.controller.app; import jakarta.annotation.Resource; import jakarta.validation.constraints.NotNull; import org.dromara.common.core.domain.R; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.project.domain.vo.project.BusProjectContractorTeamListVo; +import org.dromara.project.domain.vo.userprojectrelevancy.BusLoginUserProjectRelevancyVo; import org.dromara.project.service.IBusProjectService; +import org.dromara.project.service.IBusUserProjectRelevancyService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -27,6 +30,9 @@ public class BusProjectAppController { @Resource private IBusProjectService projectService; + @Resource + private IBusUserProjectRelevancyService userProjectRelevancyService; + /** * 查询项目以及项目下的分包公司、班组列表 */ @@ -43,4 +49,13 @@ public class BusProjectAppController { @PathVariable Long id) { return R.ok(projectService.queryContractorTeamListById(id)); } + + /** + * 查询登录用户与项目关联列表 + */ + @GetMapping("/login/list") + public R> listByLoginUser() { + Long userId = LoginHelper.getUserId(); + return R.ok(userProjectRelevancyService.queryListByUserId(userId)); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusReissueCardAppController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusReissueCardAppController.java index aaaae79e..5579ecc4 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusReissueCardAppController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusReissueCardAppController.java @@ -1,10 +1,12 @@ package org.dromara.project.controller.app; +import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import jakarta.annotation.Resource; +import jakarta.validation.constraints.NotNull; import org.dromara.common.core.domain.R; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -20,6 +22,7 @@ import org.dromara.project.domain.BusProjectTeamMember; import org.dromara.project.domain.dto.reissuecard.BusReissueCardAddReq; import org.dromara.project.domain.dto.reissuecard.BusReissueCardManagerReviewReq; import org.dromara.project.domain.dto.reissuecard.BusReissueCardQueryReq; +import org.dromara.project.domain.dto.reissuecard.BusReissueCardUpdateReq; import org.dromara.project.domain.enums.BusProjectTeamMemberPostEnum; import org.dromara.project.domain.vo.projectteam.BusForemanVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamForemanVo; @@ -67,6 +70,38 @@ public class BusReissueCardAppController extends BaseController { return reissueCardService.listByLoginUser(req, pageQuery); } + /** + * 查询当前登录用户补卡审批列表 + */ + @GetMapping("/list/auditUser") + public TableDataInfo listByAuditUser(BusReissueCardQueryReq req, PageQuery pageQuery) { +// SubConstructionUser constructionUser = constructionUserService.getBySysUserId(LoginHelper.getUserId()); + req.setGangerId(LoginHelper.getUserId()); + return reissueCardService.listByAuditUser(req, pageQuery); + } + /** + * 获取施工人员补卡申请详细信息 + * + * @param id 主键 + */ + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(reissueCardService.queryById(id)); + } + + /** + * 修改补卡申请 + */ + @Log(title = "施工人员补卡申请", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("") + public R managerReview(@RequestBody BusReissueCardUpdateReq req) { + return toAjax(reissueCardService.updateCard(req)); + } + + + /** * 提交补卡 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusAttendance.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusAttendance.java index cd9ae787..1de58f14 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusAttendance.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusAttendance.java @@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; @@ -92,5 +93,8 @@ public class BusAttendance extends BaseEntity { */ private String lat; - + /** + * 规定时间 + */ + private LocalTime ruleTime; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/AttendanceCountDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/AttendanceCountDto.java new file mode 100644 index 00000000..b2be9eac --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/AttendanceCountDto.java @@ -0,0 +1,36 @@ +package org.dromara.project.domain.dto.attendance; + +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +@Data +public class AttendanceCountDto { + + /** + * 项目id + */ + private Long projectId; + + /** + * 查询日期 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate date; + + /** + * 考勤状态 1-出勤 2-缺勤 + */ + private String clockStatus; + + /** + * 工种 + */ + private String typeOfWork; + + /** + * 班组 + */ + private Long teamId; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/reissuecard/BusReissueCardUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/reissuecard/BusReissueCardUpdateReq.java new file mode 100644 index 00000000..1b3e04b3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/reissuecard/BusReissueCardUpdateReq.java @@ -0,0 +1,81 @@ +package org.dromara.project.domain.dto.reissuecard; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @author lilemy + * @date 2025/4/8 9:58 + */ +@Data +public class BusReissueCardUpdateReq implements Serializable { + + @Serial + private static final long serialVersionUID = -3708280254564807491L; + + /** + * 主键id + */ + private Long id; + + /** + * 申请人id + */ + private Long userId; + + /** + * 申请人名字 + */ + private String userName; + + /** + * 班组长 + */ + private Long gangerId; + + /** + * 班组长名字 + */ + private String gangerName; + + /** + * 班组长意见(1未读 2同意 3拒绝) + */ + private String gangerOpinion; + + /** + * 管理员意见(1未读 2同意 3拒绝) + */ + private String managerOpinion; + + /** + * 项目id + */ + private Long projectId; + + /** + * 班组id + */ + private Long teamId; + + /** + * 补卡类型(1上班 2下班) + */ + private String reissueCardType; + + /** + * 考勤表主键id + */ + private Long attendanceId; + + /** + * 日期 + */ + private LocalDate date; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusAttendanceVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusAttendanceVo.java index bbd15c8a..4b566e65 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusAttendanceVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusAttendanceVo.java @@ -2,6 +2,7 @@ package org.dromara.project.domain.vo; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import org.dromara.project.domain.BusAttendance; @@ -113,4 +114,10 @@ public class BusAttendanceVo implements Serializable { @ExcelProperty(value = "纬度") private Integer week; + + /** + * 规定时间 + */ + private LocalTime ruleTime; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/AttendanceCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/AttendanceCountVo.java new file mode 100644 index 00000000..5fdb0278 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/AttendanceCountVo.java @@ -0,0 +1,23 @@ +package org.dromara.project.domain.vo.attendance; + +import lombok.Data; +import org.dromara.project.domain.dto.attendance.AttendanceCountDto; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; +import java.util.List; + +@Data +public class AttendanceCountVo { + + /** + * 总人数 + */ + private Integer totalCount; + + /** + * 出勤人数 + */ + private Integer workCount; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/AttendanceUserVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/AttendanceUserVo.java new file mode 100644 index 00000000..6ce68c94 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/AttendanceUserVo.java @@ -0,0 +1,33 @@ +package org.dromara.project.domain.vo.attendance; + +import lombok.Data; + +@Data +public class AttendanceUserVo { + + /** + * 用户昵称 + */ + private String nickName; + + /** + * 用户头像 + */ + private Long avatar; + + /** + * 工种(字典type_of_work) + */ + private String typeOfWork; + + /** + * 班组名称 + */ + private String teamName; + + /** + * 考勤状态 1-出勤 2-缺勤 + */ + private String clockStatus; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java index 9358408c..4f53f163 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java @@ -1,6 +1,7 @@ package org.dromara.project.service; import jakarta.validation.constraints.NotNull; +import org.dromara.project.domain.dto.attendance.AttendanceCountDto; import org.dromara.project.domain.dto.attendance.BusAttendancePunchCardByFaceReq; import org.dromara.project.domain.vo.BusAttendanceVo; import org.dromara.project.domain.bo.BusAttendanceBo; @@ -10,9 +11,14 @@ import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.project.domain.vo.BusMonthAttendanceVo; +import org.dromara.project.domain.vo.attendance.AttendanceCountVo; +import org.dromara.project.domain.vo.attendance.AttendanceUserVo; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; +import java.time.LocalDate; import java.util.Collection; import java.util.List; @@ -121,4 +127,14 @@ public interface IBusAttendanceService extends IService{ * 获取用户指定月份的打卡记录 */ List getAbnormalAttendance(@NotNull @PathVariable("projectId") Long projectId); + + /** + * 统计指定日期的打卡人员 + */ + AttendanceCountVo getAttendanceCount(AttendanceCountDto dto); + + /** + * 指定日期的打卡人员列表 + */ + TableDataInfo getAttendanceUser(AttendanceCountDto dto, PageQuery pageQuery); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusReissueCardService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusReissueCardService.java index e5f8b339..c1da8159 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusReissueCardService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusReissueCardService.java @@ -9,6 +9,7 @@ import org.dromara.project.domain.BusReissueCard; import org.dromara.project.domain.dto.reissuecard.BusReissueCardAddReq; import org.dromara.project.domain.dto.reissuecard.BusReissueCardManagerReviewReq; import org.dromara.project.domain.dto.reissuecard.BusReissueCardQueryReq; +import org.dromara.project.domain.dto.reissuecard.BusReissueCardUpdateReq; import org.dromara.project.domain.vo.reissuecard.BusReissueCardVo; import org.springframework.web.bind.annotation.RequestBody; @@ -95,8 +96,20 @@ public interface IBusReissueCardService extends IService { */ TableDataInfo listByLoginUser(BusReissueCardQueryReq req, PageQuery pageQuery); + /** + * 审批列表 + */ + TableDataInfo listByAuditUser(BusReissueCardQueryReq req, PageQuery pageQuery); + + /** * 新增施工人员补卡申请 */ Long add(BusReissueCardAddReq req); + + + /** + * 修改施工人员补卡申请 + */ + Boolean updateCard(BusReissueCardUpdateReq req); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java index ae90ae4e..5b971b64 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -23,12 +24,15 @@ import org.dromara.contractor.domain.SubConstructionUser; import org.dromara.contractor.service.ISubConstructionUserService; import org.dromara.project.domain.*; import org.dromara.project.domain.bo.BusAttendanceBo; +import org.dromara.project.domain.dto.attendance.AttendanceCountDto; import org.dromara.project.domain.dto.attendance.BusAttendancePunchCardByFaceReq; import org.dromara.project.domain.enums.BusAttendanceClockStatusEnum; import org.dromara.project.domain.enums.BusAttendanceCommuterEnum; import org.dromara.project.domain.vo.BusAttendanceRuleVo; import org.dromara.project.domain.vo.BusAttendanceVo; import org.dromara.project.domain.vo.BusMonthAttendanceVo; +import org.dromara.project.domain.vo.attendance.AttendanceCountVo; +import org.dromara.project.domain.vo.attendance.AttendanceUserVo; import org.dromara.project.mapper.BusAttendanceMapper; import org.dromara.project.service.*; import org.dromara.system.domain.vo.SysOssVo; @@ -36,6 +40,7 @@ import org.dromara.system.service.ISysOssService; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import java.time.Duration; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -254,18 +259,23 @@ public class BusAttendanceServiceImpl extends ServiceImpl getPunchRangeByProjectIdAndUserId(Long projectId, Long userId) { @@ -528,4 +551,38 @@ public class BusAttendanceServiceImpl extends ServiceImpl attendanceList = baseMapper.selectList(Wrappers.lambdaQuery() + .eq(BusAttendance::getProjectId, dto.getProjectId()) + .in(BusAttendance::getClockStatus,Arrays.asList("1","2","3","5","7")) + .eq(BusAttendance::getClockDate, dto.getDate()) + ); + List attendanceUserIds = attendanceList.stream().map(BusAttendance::getUserId).toList(); + + //总人数 + long count = constructionUserService.count(Wrappers.lambdaQuery() + .eq(SubConstructionUser::getProjectId, dto.getProjectId())); + attendanceCountVo.setTotalCount((int)count); + //出勤人数 + HashSet longs = new HashSet<>(attendanceUserIds); + int size = longs.size(); + attendanceCountVo.setWorkCount(size); + return attendanceCountVo; + } + + @Override + public TableDataInfo getAttendanceUser(AttendanceCountDto dto, PageQuery pageQuery) { + +// constructionUserService.queryPageList(dto.getProjectId()); + + + + return null; + + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusReissueCardServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusReissueCardServiceImpl.java index 92e9921f..f7646b42 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusReissueCardServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusReissueCardServiceImpl.java @@ -3,6 +3,7 @@ package org.dromara.project.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -22,6 +23,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.project.domain.*; import org.dromara.project.domain.dto.reissuecard.BusReissueCardAddReq; +import org.dromara.project.domain.dto.reissuecard.BusReissueCardUpdateReq; import org.dromara.project.domain.enums.BusAttendanceClockStatusEnum; import org.dromara.project.domain.enums.BusAttendanceCommuterEnum; import org.dromara.project.domain.enums.BusOpinionStatusEnum; @@ -291,7 +293,7 @@ public class BusReissueCardServiceImpl extends ServiceImpl lqw = new LambdaQueryWrapper<>(); lqw.eq(ObjectUtils.isNotEmpty(req.getUserId()), BusReissueCard::getUserId, req.getUserId()); - + lqw.orderByDesc(BusReissueCard::getCreateTime); List relevancyList = userProjectRelevancyService.list( Wrappers.lambdaQuery(BusUserProjectRelevancy.class) .eq(BusUserProjectRelevancy::getProjectId, req.getProjectId()) @@ -313,6 +315,15 @@ public class BusReissueCardServiceImpl extends ServiceImpl listByAuditUser(BusReissueCardQueryReq req, PageQuery pageQuery) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.orderByDesc(BusReissueCard::getCreateTime); + lqw.eq(ObjectUtils.isNotEmpty(req.getGangerId()), BusReissueCard::getGangerId, req.getGangerId()); + lqw.like(StrUtil.isNotBlank(req.getUserName()), BusReissueCard::getUserName, req.getUserName()); + Page result = this.page(pageQuery.build(), lqw); + return TableDataInfo.build(this.getVoPage(result)); + } @Override public Long add(BusReissueCardAddReq req) { @@ -324,10 +335,28 @@ public class BusReissueCardServiceImpl extends ServiceImpl