From 749612154aa4d8efb60e76ad469faf6589c234f7 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Thu, 27 Mar 2025 10:00:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=BD=E5=B7=A5=E4=BA=BA=E5=91=98=E9=BB=91?= =?UTF-8?q?=E5=90=8D=E5=8D=95=E6=A8=A1=E5=9D=97=E3=80=81=E6=96=BD=E5=B7=A5?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E8=80=83=E5=8B=A4=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BusAttendanceController.java | 108 +++++++++ .../BusConstructionBlacklistController.java | 95 ++++++++ .../dromara/project/domain/BusAttendance.java | 94 ++++++++ .../domain/BusConstructionBlacklist.java | 69 ++++++ .../domain/bo/BusConstructionBlacklistBo.java | 45 ++++ .../req/attendance/AttendanceCreateReq.java | 57 +++++ .../req/attendance/AttendanceQueryReq.java | 58 +++++ .../req/attendance/AttendanceUpdateReq.java | 72 ++++++ .../ConstructionBlacklistCreateReq.java | 28 +++ .../ConstructionBlacklistQueryReq.java | 43 ++++ .../req/workwage/WorkWageUpdateReq.java | 5 + .../project/domain/vo/BusAttendanceVo.java | 98 ++++++++ .../domain/vo/BusConstructionBlacklistVo.java | 76 ++++++ .../project/domain/vo/BusProjectVo.java | 3 +- .../project/mapper/BusAttendanceMapper.java | 15 ++ .../BusConstructionBlacklistMapper.java | 15 ++ .../IBusConstructionBlacklistService.java | 72 ++++++ .../project/service/IBusProjectService.java | 2 +- .../IBusUserProjectRelevancyService.java | 2 +- .../impl/BusAttendanceServiceImpl.java | 217 ++++++++++++++++++ .../BusConstructionBlacklistServiceImpl.java | 179 +++++++++++++++ .../impl/BusConstructionUserServiceImpl.java | 22 +- .../impl/BusContractorServiceImpl.java | 13 +- .../service/impl/BusProjectServiceImpl.java | 16 +- .../impl/BusProjectTeamMemberServiceImpl.java | 50 ++-- .../BusUserProjectRelevancyServiceImpl.java | 33 +-- .../mapper/project/BusAttendanceMapper.xml | 7 + .../BusConstructionBlacklistMapper.xml | 7 + RuoYi-Vue-Plus/script/sql/menuInitValue.sql | 20 ++ RuoYi-Vue-Plus/script/sql/xinnengyuan.sql | 17 +- 30 files changed, 1462 insertions(+), 76 deletions(-) create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusConstructionBlacklistController.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusAttendance.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionBlacklist.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/bo/BusConstructionBlacklistBo.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceCreateReq.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceQueryReq.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceUpdateReq.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionblacklist/ConstructionBlacklistCreateReq.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionblacklist/ConstructionBlacklistQueryReq.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusAttendanceVo.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusConstructionBlacklistVo.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/mapper/BusAttendanceMapper.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/mapper/BusConstructionBlacklistMapper.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusConstructionBlacklistService.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionBlacklistServiceImpl.java create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/resources/mapper/project/BusAttendanceMapper.xml create mode 100644 RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/resources/mapper/project/BusConstructionBlacklistMapper.xml diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java new file mode 100644 index 00000000..b2e0d04d --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceController.java @@ -0,0 +1,108 @@ +package org.dromara.project.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.project.domain.req.attendance.AttendanceCreateReq; +import org.dromara.project.domain.req.attendance.AttendanceQueryReq; +import org.dromara.project.domain.req.attendance.AttendanceUpdateReq; +import org.dromara.project.domain.vo.BusAttendanceVo; +import org.dromara.project.service.IBusAttendanceService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 考勤 + * + * @author lcj + * @date 2025-03-26 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/project/attendance") +public class BusAttendanceController extends BaseController { + + private final IBusAttendanceService busAttendanceService; + + /** + * 查询考勤列表 + */ + @SaCheckPermission("project:attendance:list") + @GetMapping("/list") + public TableDataInfo list(AttendanceQueryReq req, PageQuery pageQuery) { + return busAttendanceService.queryPageList(req, pageQuery); + } + + /** + * 导出考勤列表 + */ + @SaCheckPermission("project:attendance:export") + @Log(title = "考勤", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(AttendanceQueryReq req, HttpServletResponse response) { + List list = busAttendanceService.queryList(req); + ExcelUtil.exportExcel(list, "考勤", BusAttendanceVo.class, response); + } + + /** + * 获取考勤详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("project:attendance:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(busAttendanceService.queryById(id)); + } + + /** + * 新增考勤 + */ + @SaCheckPermission("project:attendance:add") + @Log(title = "考勤", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody AttendanceCreateReq req) { + return R.ok(busAttendanceService.insertByBo(req)); + } + + /** + * 修改考勤 + */ + @SaCheckPermission("project:attendance:edit") + @Log(title = "考勤", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody AttendanceUpdateReq req) { + return toAjax(busAttendanceService.updateByBo(req)); + } + + /** + * 删除考勤 + * + * @param ids 主键串 + */ + @SaCheckPermission("project:attendance:remove") + @Log(title = "考勤", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(busAttendanceService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusConstructionBlacklistController.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusConstructionBlacklistController.java new file mode 100644 index 00000000..23a674a4 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusConstructionBlacklistController.java @@ -0,0 +1,95 @@ +package org.dromara.project.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.project.domain.req.constructionblacklist.ConstructionBlacklistCreateReq; +import org.dromara.project.domain.req.constructionblacklist.ConstructionBlacklistQueryReq; +import org.dromara.project.domain.vo.BusConstructionBlacklistVo; +import org.dromara.project.service.IBusConstructionBlacklistService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 黑名单 + * + * @author lcj + * @date 2025-03-27 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/project/constructionBlacklist") +public class BusConstructionBlacklistController extends BaseController { + + private final IBusConstructionBlacklistService busConstructionBlacklistService; + + /** + * 查询黑名单列表 + */ + @SaCheckPermission("project:constructionBlacklist:list") + @GetMapping("/list") + public TableDataInfo list(ConstructionBlacklistQueryReq req, PageQuery pageQuery) { + return busConstructionBlacklistService.queryPageList(req, pageQuery); + } + + /** + * 导出黑名单列表 + */ + @SaCheckPermission("project:constructionBlacklist:export") + @Log(title = "黑名单", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(ConstructionBlacklistQueryReq req, HttpServletResponse response) { + List list = busConstructionBlacklistService.queryList(req); + ExcelUtil.exportExcel(list, "黑名单", BusConstructionBlacklistVo.class, response); + } + + /** + * 获取黑名单详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("project:constructionBlacklist:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(busConstructionBlacklistService.queryById(id)); + } + + /** + * 新增黑名单 + */ + @SaCheckPermission("project:constructionBlacklist:add") + @Log(title = "黑名单", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody ConstructionBlacklistCreateReq req) { + return R.ok(busConstructionBlacklistService.insertByBo(req)); + } + + /** + * 删除黑名单 + * + * @param ids 主键串 + */ + @SaCheckPermission("project:constructionBlacklist:remove") + @Log(title = "黑名单", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(busConstructionBlacklistService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusAttendance.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusAttendance.java new file mode 100644 index 00000000..becda69a --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusAttendance.java @@ -0,0 +1,94 @@ +package org.dromara.project.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.util.Date; + +/** + * 考勤对象 bus_attendance + * + * @author lcj + * @date 2025-03-26 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("bus_attendance") +public class BusAttendance extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 人员id + */ + private Long userId; + + /** + * 人员姓名 + */ + private String userName; + + /** + * 人脸照 + */ + private String facePic; + + /** + * 项目id + */ + private Long projectId; + + /** + * 打卡时间 + */ + private String clockTime; + + /** + * 1正常,2迟到,3早退,4缺勤,5补卡 + */ + private String clockStatus; + + /** + * 代打人员id + */ + private String pinchUserId; + + /** + * 多次打卡时间记录 + */ + private String clockRecord; + + /** + * 上下班(1上班,2下班) + */ + private String commuter; + + /** + * 备注 + */ + private String remark; + + /** + * 删除时间 + */ + private Date deletedAt; + + /** + * 是否删除(0正常 1删除) + */ + @TableLogic + private Long isDelete; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionBlacklist.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionBlacklist.java new file mode 100644 index 00000000..2671cc58 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionBlacklist.java @@ -0,0 +1,69 @@ +package org.dromara.project.domain; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 黑名单对象 bus_construction_blacklist + * + * @author lcj + * @date 2025-03-27 + */ +@Data +@TableName("bus_construction_blacklist") +public class BusConstructionBlacklist implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 用户id + */ + private Long userId; + + /** + * 名字 + */ + private String userName; + + /** + * 身份证号码 + */ + private String sfzNumber; + + /** + * 备注 + */ + private String remark; + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private Long createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/bo/BusConstructionBlacklistBo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/bo/BusConstructionBlacklistBo.java new file mode 100644 index 00000000..577b29df --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/bo/BusConstructionBlacklistBo.java @@ -0,0 +1,45 @@ +package org.dromara.project.domain.bo; + +import org.dromara.project.domain.BusConstructionBlacklist; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 黑名单业务对象 bus_construction_blacklist + * + * @author lcj + * @date 2025-03-27 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BusConstructionBlacklist.class, reverseConvertGenerate = false) +public class BusConstructionBlacklistBo extends BaseEntity { + + /** + * 用户id + */ + @NotNull(message = "用户id不能为空", groups = { AddGroup.class }) + private Long userId; + + /** + * 名字 + */ + private String userName; + + /** + * 身份证号码 + */ + private String sfzNumber; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceCreateReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceCreateReq.java new file mode 100644 index 00000000..dec58e04 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceCreateReq.java @@ -0,0 +1,57 @@ +package org.dromara.project.domain.req.attendance; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lcj + * @date 2025/3/26 9:46 + */ +@Data +public class AttendanceCreateReq implements Serializable { + + @Serial + private static final long serialVersionUID = 1906706006468828948L; + + /** + * 人员id + */ + private Long userId; + + /** + * 人脸照 + */ + private String facePic; + + /** + * 项目id + */ + private Long projectId; + + /** + * 1正常,2迟到,3早退,4缺勤,5补卡 + */ + private String clockStatus; + + /** + * 代打人员id + */ + private String pinchUserId; + + /** + * 多次打卡时间记录 + */ + private String clockRecord; + + /** + * 上下班(1上班,2下班) + */ + private String commuter; + + /** + * 备注 + */ + private String remark; +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceQueryReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceQueryReq.java new file mode 100644 index 00000000..f7765736 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceQueryReq.java @@ -0,0 +1,58 @@ +package org.dromara.project.domain.req.attendance; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lcj + * @date 2025/3/26 9:47 + */ +@Data +public class AttendanceQueryReq implements Serializable { + + @Serial + private static final long serialVersionUID = -7188085233824968862L; + + /** + * 主键id + */ + private Long id; + + /** + * 人员id + */ + private Long userId; + + /** + * 人员姓名 + */ + private String userName; + + /** + * 项目id + */ + private Long projectId; + + /** + * 1正常,2迟到,3早退,4缺勤,5补卡 + */ + private String clockStatus; + + /** + * 代打人员id + */ + private String pinchUserId; + + /** + * 上下班(1上班,2下班) + */ + private String commuter; + + /** + * 备注 + */ + private String remark; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceUpdateReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceUpdateReq.java new file mode 100644 index 00000000..63142e58 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/attendance/AttendanceUpdateReq.java @@ -0,0 +1,72 @@ +package org.dromara.project.domain.req.attendance; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lcj + * @date 2025/3/26 9:47 + */ +@Data +public class AttendanceUpdateReq implements Serializable { + + @Serial + private static final long serialVersionUID = 3159243618168476248L; + + /** + * 主键id + */ + private Long id; + + /** + * 人员id + */ + private Long userId; + + /** + * 人员姓名 + */ + private String userName; + + /** + * 人脸照 + */ + private String facePic; + + /** + * 项目id + */ + private Long projectId; + + /** + * 打卡时间 + */ + private String clockTime; + + /** + * 1正常,2迟到,3早退,4缺勤,5补卡 + */ + private String clockStatus; + + /** + * 代打人员id + */ + private String pinchUserId; + + /** + * 多次打卡时间记录 + */ + private String clockRecord; + + /** + * 上下班(1上班,2下班) + */ + private String commuter; + + /** + * 备注 + */ + private String remark; +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionblacklist/ConstructionBlacklistCreateReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionblacklist/ConstructionBlacklistCreateReq.java new file mode 100644 index 00000000..671af011 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionblacklist/ConstructionBlacklistCreateReq.java @@ -0,0 +1,28 @@ +package org.dromara.project.domain.req.constructionblacklist; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lcj + * @date 2025/3/27 9:30 + */ +@Data +public class ConstructionBlacklistCreateReq implements Serializable { + + @Serial + private static final long serialVersionUID = -1095123147028743165L; + + /** + * 项目id + */ + private Long projectId; + + /** + * 用户id + */ + private Long userId; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionblacklist/ConstructionBlacklistQueryReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionblacklist/ConstructionBlacklistQueryReq.java new file mode 100644 index 00000000..94b81c82 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/constructionblacklist/ConstructionBlacklistQueryReq.java @@ -0,0 +1,43 @@ +package org.dromara.project.domain.req.constructionblacklist; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lcj + * @date 2025/3/27 9:30 + */ +@Data +public class ConstructionBlacklistQueryReq implements Serializable { + + @Serial + private static final long serialVersionUID = 5638694783769399209L; + + /** + * 主键id + */ + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 用户id + */ + private Long userId; + + /** + * 名字 + */ + private String userName; + + /** + * 身份证号码 + */ + private String sfzNumber; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workwage/WorkWageUpdateReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workwage/WorkWageUpdateReq.java index d6025ded..ca7a32a5 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workwage/WorkWageUpdateReq.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/req/workwage/WorkWageUpdateReq.java @@ -20,6 +20,11 @@ public class WorkWageUpdateReq implements Serializable { */ private Long id; + /** + * 项目id + */ + private Long projectId; + /** * 工种 */ diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusAttendanceVo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusAttendanceVo.java new file mode 100644 index 00000000..531af2f3 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusAttendanceVo.java @@ -0,0 +1,98 @@ +package org.dromara.project.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.project.domain.BusAttendance; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 考勤视图对象 bus_attendance + * + * @author lcj + * @date 2025-03-26 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BusAttendance.class) +public class BusAttendanceVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 人员id + */ + @ExcelProperty(value = "人员id") + private Long userId; + + /** + * 人员姓名 + */ + @ExcelProperty(value = "人员姓名") + private String userName; + + /** + * 人脸照 + */ + @ExcelProperty(value = "人脸照") + private String facePic; + + /** + * 项目id + */ + @ExcelProperty(value = "项目id") + private Long projectId; + + /** + * 打卡时间 + */ + @ExcelProperty(value = "打卡时间") + private String clockTime; + + /** + * 1正常,2迟到,3早退,4缺勤,5补卡 + */ + @ExcelProperty(value = "1正常,2迟到,3早退,4缺勤,5补卡", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "clock_status_type") + private String clockStatus; + + /** + * 代打人员id + */ + @ExcelProperty(value = "代打人员id") + private String pinchUserId; + + /** + * 多次打卡时间记录 + */ + @ExcelProperty(value = "多次打卡时间记录") + private String clockRecord; + + /** + * 上下班(1上班,2下班) + */ + @ExcelProperty(value = "上下班", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "commuter_type") + private String commuter; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusConstructionBlacklistVo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusConstructionBlacklistVo.java new file mode 100644 index 00000000..5a8fdd74 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusConstructionBlacklistVo.java @@ -0,0 +1,76 @@ +package org.dromara.project.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.project.domain.BusConstructionBlacklist; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + +/** + * 黑名单视图对象 bus_construction_blacklist + * + * @author lcj + * @date 2025-03-27 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BusConstructionBlacklist.class) +public class BusConstructionBlacklistVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 项目id + */ + @ExcelProperty(value = "项目id") + private Long projectId; + + /** + * 用户id + */ + @ExcelProperty(value = "用户id") + private Long userId; + + /** + * 名字 + */ + @ExcelProperty(value = "名字") + private String userName; + + /** + * 身份证号码 + */ + @ExcelProperty(value = "身份证号码") + private String sfzNumber; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 创建者 + */ + @ExcelProperty(value = "创建者") + private Long createBy; + + /** + * 创建时间 + */ + @ExcelProperty(value = "创建时间") + private Date createTime; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusProjectVo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusProjectVo.java index c262aacd..9afd4744 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusProjectVo.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/BusProjectVo.java @@ -134,8 +134,7 @@ public class BusProjectVo implements Serializable { /** * 打卡范围(09:00,18:00) */ - @ExcelProperty(value = "打卡范围", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "0=9:00,18:00") + @ExcelProperty(value = "打卡范围") private String punchRange; /** diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/mapper/BusAttendanceMapper.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/mapper/BusAttendanceMapper.java new file mode 100644 index 00000000..7ce03029 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/mapper/BusAttendanceMapper.java @@ -0,0 +1,15 @@ +package org.dromara.project.mapper; + +import org.dromara.project.domain.BusAttendance; +import org.dromara.project.domain.vo.BusAttendanceVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 考勤Mapper接口 + * + * @author lcj + * @date 2025-03-26 + */ +public interface BusAttendanceMapper extends BaseMapperPlus { + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/mapper/BusConstructionBlacklistMapper.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/mapper/BusConstructionBlacklistMapper.java new file mode 100644 index 00000000..ba9d79b4 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/mapper/BusConstructionBlacklistMapper.java @@ -0,0 +1,15 @@ +package org.dromara.project.mapper; + +import org.dromara.project.domain.BusConstructionBlacklist; +import org.dromara.project.domain.vo.BusConstructionBlacklistVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 黑名单Mapper接口 + * + * @author lcj + * @date 2025-03-27 + */ +public interface BusConstructionBlacklistMapper extends BaseMapperPlus { + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusConstructionBlacklistService.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusConstructionBlacklistService.java new file mode 100644 index 00000000..e9ebdc8a --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusConstructionBlacklistService.java @@ -0,0 +1,72 @@ +package org.dromara.project.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.project.domain.BusConstructionBlacklist; +import org.dromara.project.domain.req.constructionblacklist.ConstructionBlacklistCreateReq; +import org.dromara.project.domain.req.constructionblacklist.ConstructionBlacklistQueryReq; +import org.dromara.project.domain.vo.BusConstructionBlacklistVo; + +import java.util.Collection; +import java.util.List; + +/** + * 黑名单Service接口 + * + * @author lcj + * @date 2025-03-27 + */ +public interface IBusConstructionBlacklistService extends IService { + + /** + * 查询黑名单 + * + * @param id 主键 + * @return 黑名单 + */ + BusConstructionBlacklistVo queryById(Long id); + + /** + * 分页查询黑名单列表 + * + * @param req 查询条件 + * @param pageQuery 分页参数 + * @return 黑名单分页列表 + */ + TableDataInfo queryPageList(ConstructionBlacklistQueryReq req, PageQuery pageQuery); + + /** + * 查询符合条件的黑名单列表 + * + * @param req 查询条件 + * @return 黑名单列表 + */ + List queryList(ConstructionBlacklistQueryReq req); + + /** + * 新增黑名单 + * + * @param req 黑名单 + * @return 是否新增成功 + */ + Long insertByBo(ConstructionBlacklistCreateReq req); + + /** + * 校验并批量删除黑名单信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 获取黑名单查询条件封装 + * + * @param req 查询条件 + * @return 查询条件封装 + */ + LambdaQueryWrapper buildQueryWrapper(ConstructionBlacklistQueryReq req); +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectService.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectService.java index f855b0a0..4d1fc5a2 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectService.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectService.java @@ -78,7 +78,7 @@ public interface IBusProjectService extends IService { * @param project 项目对象 * @return 项目视图对象 */ - BusProjectVo getProjectVo(BusProject project); + BusProjectVo getVo(BusProject project); /** * 获取项目查询条件封装 diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusUserProjectRelevancyService.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusUserProjectRelevancyService.java index e991dcfe..59f983f6 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusUserProjectRelevancyService.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusUserProjectRelevancyService.java @@ -53,7 +53,7 @@ public interface IBusUserProjectRelevancyService extends IService + implements IBusAttendanceService { + + /** + * 查询考勤 + * + * @param id 主键 + * @return 考勤 + */ + @Override + public BusAttendanceVo queryById(Long id) { + BusAttendance attendance = this.getById(id); + if (attendance == null) { + throw new ServiceException("考勤信息不存在", HttpStatus.NOT_FOUND); + } + return this.getVo(attendance); + } + + /** + * 分页查询考勤列表 + * + * @param req 查询条件 + * @param pageQuery 分页参数 + * @return 考勤分页列表 + */ + @Override + public TableDataInfo queryPageList(AttendanceQueryReq req, PageQuery pageQuery) { + Page result = this.page(pageQuery.build(), buildQueryWrapper(req)); + return TableDataInfo.build(this.getVoPage(result)); + } + + /** + * 查询符合条件的考勤列表 + * + * @param req 查询条件 + * @return 考勤列表 + */ + @Override + public List queryList(AttendanceQueryReq req) { + LambdaQueryWrapper lqw = buildQueryWrapper(req); + return this.list(lqw).stream().map(this::getVo).toList(); + } + + /** + * 新增考勤 + * + * @param req 考勤 + * @return 新增考勤id + */ + @Override + public Long insertByBo(AttendanceCreateReq req) { + // 将实体类和 DTO 进行转换 + BusAttendance attendance = new BusAttendance(); + BeanUtils.copyProperties(req, attendance); + // 数据校验 + validEntityBeforeSave(attendance, true); + // 操作数据库 + boolean save = this.save(attendance); + if (!save) { + throw new ServiceException("新增考勤失败,数据库异常", HttpStatus.ERROR); + } + return attendance.getId(); + } + + /** + * 修改考勤 + * + * @param req 考勤 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(AttendanceUpdateReq req) { + // 将实体类和 DTO 进行转换 + BusAttendance attendance = new BusAttendance(); + BeanUtils.copyProperties(req, attendance); + // 数据校验 + validEntityBeforeSave(attendance, false); + // 判断是否存在 + BusAttendance oldBusAttendance = this.getById(attendance.getId()); + if (oldBusAttendance == null) { + throw new ServiceException("修改考勤失败,数据不存在", HttpStatus.NOT_FOUND); + } + // 操作数据库 + return this.updateById(attendance); + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BusAttendance entity, Boolean create) { + // TODO 做一些数据校验,如唯一约束 + if (create) { + + } + } + + /** + * 校验并批量删除考勤信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + // TODO 做一些业务上的校验,判断是否需要校验 + } + return this.removeBatchByIds(ids); + } + + /** + * 获取考勤视图对象 + * + * @param attendance 考勤对象 + * @return 考勤视图对象 + */ + @Override + public BusAttendanceVo getVo(BusAttendance attendance) { + // 对象转封装类 + BusAttendanceVo attendanceVo = new BusAttendanceVo(); + if (attendance == null) { + return attendanceVo; + } + BeanUtils.copyProperties(attendance, attendanceVo); + return attendanceVo; + } + + /** + * 获取考勤查询条件封装 + * + * @param req 查询条件 + * @return 查询条件封装 + */ + @Override + public LambdaQueryWrapper buildQueryWrapper(AttendanceQueryReq req) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + if (req == null) { + return lqw; + } + Long id = req.getId(); + Long userId = req.getUserId(); + String userName = req.getUserName(); + Long projectId = req.getProjectId(); + String clockStatus = req.getClockStatus(); + String pinchUserId = req.getPinchUserId(); + String commuter = req.getCommuter(); + String remark = req.getRemark(); + // 模糊查询 + lqw.like(StringUtils.isNotBlank(userName), BusAttendance::getUserName, userName); + lqw.like(StringUtils.isNotBlank(remark), BusAttendance::getRemark, remark); + // 精确查询 + lqw.eq(ObjectUtils.isNotEmpty(id), BusAttendance::getId, id); + lqw.eq(ObjectUtils.isNotEmpty(userId), BusAttendance::getUserId, userId); + lqw.eq(ObjectUtils.isNotEmpty(projectId), BusAttendance::getProjectId, projectId); + lqw.eq(StringUtils.isNotBlank(clockStatus), BusAttendance::getClockStatus, clockStatus); + lqw.eq(StringUtils.isNotBlank(pinchUserId), BusAttendance::getPinchUserId, pinchUserId); + lqw.eq(StringUtils.isNotBlank(commuter), BusAttendance::getCommuter, commuter); + return lqw; + } + + /** + * 获取考勤分页对象视图 + * + * @param attendancePage 考勤分页对象 + * @return 考勤分页对象视图 + */ + @Override + public Page getVoPage(Page attendancePage) { + List attendanceList = attendancePage.getRecords(); + Page attendanceVoPage = new Page<>( + attendancePage.getCurrent(), + attendancePage.getSize(), + attendancePage.getTotal() + ); + if (CollUtil.isEmpty(attendanceList)) { + return attendanceVoPage; + } + List attendanceVoList = attendanceList.stream().map(this::getVo).toList(); + attendanceVoPage.setRecords(attendanceVoList); + return attendanceVoPage; + } +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionBlacklistServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionBlacklistServiceImpl.java new file mode 100644 index 00000000..26dd4c78 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionBlacklistServiceImpl.java @@ -0,0 +1,179 @@ +package org.dromara.project.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import org.dromara.common.core.constant.HttpStatus; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.ObjectUtils; +import org.dromara.common.core.utils.StringUtils; +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.project.domain.BusConstructionBlacklist; +import org.dromara.project.domain.BusConstructionUser; +import org.dromara.project.domain.req.constructionblacklist.ConstructionBlacklistCreateReq; +import org.dromara.project.domain.req.constructionblacklist.ConstructionBlacklistQueryReq; +import org.dromara.project.domain.vo.BusConstructionBlacklistVo; +import org.dromara.project.mapper.BusConstructionBlacklistMapper; +import org.dromara.project.service.IBusConstructionBlacklistService; +import org.dromara.project.service.IBusConstructionUserService; +import org.dromara.project.service.IBusProjectService; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +/** + * 黑名单Service业务层处理 + * + * @author lcj + * @date 2025-03-27 + */ +@Service +public class BusConstructionBlacklistServiceImpl extends ServiceImpl + implements IBusConstructionBlacklistService { + + @Resource + private IBusProjectService projectService; + + @Resource + private IBusConstructionUserService constructionUserService; + + /** + * 查询黑名单 + * + * @param id 主键 + * @return 黑名单 + */ + @Override + public BusConstructionBlacklistVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询黑名单列表 + * + * @param req 查询条件 + * @param pageQuery 分页参数 + * @return 黑名单分页列表 + */ + @Override + public TableDataInfo queryPageList(ConstructionBlacklistQueryReq req, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(req); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的黑名单列表 + * + * @param req 查询条件 + * @return 黑名单列表 + */ + @Override + public List queryList(ConstructionBlacklistQueryReq req) { + LambdaQueryWrapper lqw = buildQueryWrapper(req); + return baseMapper.selectVoList(lqw); + } + + /** + * 新增黑名单 + * + * @param req 黑名单 + * @return 是否新增成功 + */ + @Override + public Long insertByBo(ConstructionBlacklistCreateReq req) { + // 将实体类和 DTO 进行转换 + BusConstructionBlacklist constructionBlacklist = new BusConstructionBlacklist(); + BeanUtils.copyProperties(req, constructionBlacklist); + // 数据校验 + validEntityBeforeSave(constructionBlacklist); + // 填充默认值 + Long userId = req.getUserId(); + if (userId == null) { + throw new ServiceException("用户 id 不能为空", HttpStatus.BAD_REQUEST); + } + BusConstructionUser constructionUser = constructionUserService.getById(userId); + if (constructionUser == null) { + throw new ServiceException("对应用户不存在", HttpStatus.NOT_FOUND); + } + constructionBlacklist.setUserName(constructionUser.getUserName()); + constructionBlacklist.setSfzNumber(constructionUser.getSfzNumber()); + // 操作数据库 + boolean result = this.save(constructionBlacklist); + if (!result) { + throw new ServiceException("新增黑名单失败,数据库异常", HttpStatus.ERROR); + } + return constructionBlacklist.getId(); + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BusConstructionBlacklist entity) { + // TODO 做一些数据校验,如唯一约束 + Long projectId = entity.getProjectId(); + Long userId = entity.getUserId(); + if (projectId == null) { + throw new ServiceException("项目 id 不能为空", HttpStatus.BAD_REQUEST); + } + if (projectService.getById(projectId) == null) { + throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND); + } + // 判断是否已经存在该用户 + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(BusConstructionBlacklist.class) + .eq(BusConstructionBlacklist::getProjectId, projectId) + .eq(BusConstructionBlacklist::getUserId, userId); + if (this.count(lqw) > 0) { + throw new ServiceException("该用户已经存在", HttpStatus.BAD_REQUEST); + } + } + + /** + * 校验并批量删除黑名单信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + Long userId = LoginHelper.getUserId(); + List constructionBlacklistList = this.listByIds(ids); + if (isValid) { + // TODO 做一些业务上的校验,判断是否需要校验 + List projectId = constructionBlacklistList.stream().map(BusConstructionBlacklist::getProjectId).toList(); + projectService.validAuth(projectId, userId); + } + return this.removeBatchByIds(ids); + } + + /** + * 获取黑名单查询条件封装 + * + * @param req 查询条件 + * @return 查询条件封装 + */ + @Override + public LambdaQueryWrapper buildQueryWrapper(ConstructionBlacklistQueryReq req) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + Long id = req.getId(); + Long userId = req.getUserId(); + String userName = req.getUserName(); + String sfzNumber = req.getSfzNumber(); + // 模糊查询 + lqw.like(StringUtils.isNotBlank(userName), BusConstructionBlacklist::getUserName, userName); + lqw.like(StringUtils.isNotBlank(sfzNumber), BusConstructionBlacklist::getSfzNumber, sfzNumber); + // 精确查询 + lqw.eq(ObjectUtils.isNotEmpty(id), BusConstructionBlacklist::getId, id); + lqw.eq(ObjectUtils.isNotEmpty(userId), BusConstructionBlacklist::getUserId, userId); + return lqw; + } +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionUserServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionUserServiceImpl.java index 022c96c3..5c45c6bd 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionUserServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusConstructionUserServiceImpl.java @@ -117,7 +117,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl contractorList = this.listByIds(ids); // 做一些业务上的校验,判断是否需要校验 if (isValid) { - // 仅创建用户可以删除 - contractorList.forEach(contractor -> { - if (!contractor.getCreateBy().equals(userId)) { - throw new ServiceException("您无权删除该分包单位", HttpStatus.FORBIDDEN); - } - }); + // 仅当前项目下的用户可以删除 + List projectIdList = contractorList.stream().map(BusContractor::getProjectId).toList(); + projectService.validAuth(projectIdList, userId); // 判断当前分包公司下是否还包含施工人员 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in("contractor_id", ids); diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java index a84b1168..46497490 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectServiceImpl.java @@ -43,9 +43,6 @@ import java.util.stream.Collectors; public class BusProjectServiceImpl extends ServiceImpl implements IBusProjectService { - @Resource - private BusProjectMapper baseMapper; - @Lazy @Resource private IBusUserProjectRelevancyService userProjectRelevancyService; @@ -58,7 +55,11 @@ public class BusProjectServiceImpl extends ServiceImpl queryList(ProjectQueryReq req) { LambdaQueryWrapper lqw = this.buildQueryWrapper(req); - return baseMapper.selectVoList(lqw); + return this.list(lqw).stream().map(this::getVo).toList(); } /** @@ -200,7 +201,6 @@ public class BusProjectServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("user_id", userId); queryWrapper.in("project_id", ids); boolean removeRelevancyList = userProjectRelevancyService.remove(queryWrapper); if (!removeRelevancyList) { @@ -216,7 +216,7 @@ public class BusProjectServiceImpl extends ServiceImpl 封装对象列表 - List projectVoList = projectList.stream().map(this::getProjectVo).toList(); + List projectVoList = projectList.stream().map(this::getVo).toList(); projectVoPage.setRecords(projectVoList); return projectVoPage; } diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamMemberServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamMemberServiceImpl.java index 62d6be0b..43b23606 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamMemberServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamMemberServiceImpl.java @@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; @@ -111,7 +110,7 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl() .eq(BusProjectTeamMember::getMemberId, projectTeamMember.getMemberId())); @@ -144,7 +143,7 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl lqw = Wrappers.lambdaQuery(BusProjectTeamMember.class) - .eq(BusProjectTeamMember::getProjectId, projectId) - .eq(BusProjectTeamMember::getTeamId, teamId) - .eq(BusProjectTeamMember::getPostId, ProjectTeamMemberPostEnum.FOREMAN.getValue()); - if (this.count(lqw) > 0) { - throw new ServiceException("当前班组已存在班组长", HttpStatus.CONFLICT); - } } /** diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusUserProjectRelevancyServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusUserProjectRelevancyServiceImpl.java index 48543427..4b8bc0a3 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusUserProjectRelevancyServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusUserProjectRelevancyServiceImpl.java @@ -44,9 +44,6 @@ import java.util.Objects; public class BusUserProjectRelevancyServiceImpl extends ServiceImpl implements IBusUserProjectRelevancyService { - @Resource - private BusUserProjectRelevancyMapper baseMapper; - @Resource private IBusProjectService projectService; @@ -63,6 +60,9 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl queryList(UserProjectRelevancyQueryReq req) { - LambdaQueryWrapper queryWrapper = this.buildQueryWrapper(req); - return baseMapper.selectVoList(queryWrapper); + LambdaQueryWrapper lqw = this.buildQueryWrapper(req); + return this.list(lqw).stream().map(this::getVo).toList(); } /** * 新增系统用户与项目关联 * * @param req 系统用户与项目关联 - * @return 是否新增成功 + * @return 新增关联id */ @Override public Long insertByBo(UserProjectRelevancyCreateReq req) { @@ -105,7 +105,7 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl() .eq(BusUserProjectRelevancy::getUserId, userProjectRelevancy.getUserId()) @@ -133,7 +133,7 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl ids, Boolean isValid) { // 获取当前登录用户 Long userId = LoginHelper.getUserId(); @@ -190,7 +193,7 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl 0; + return this.removeBatchByIds(ids); } /** diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/resources/mapper/project/BusAttendanceMapper.xml b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/resources/mapper/project/BusAttendanceMapper.xml new file mode 100644 index 00000000..362fa227 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/resources/mapper/project/BusAttendanceMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/resources/mapper/project/BusConstructionBlacklistMapper.xml b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/resources/mapper/project/BusConstructionBlacklistMapper.xml new file mode 100644 index 00000000..ca098ecb --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/resources/mapper/project/BusConstructionBlacklistMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/RuoYi-Vue-Plus/script/sql/menuInitValue.sql b/RuoYi-Vue-Plus/script/sql/menuInitValue.sql index ed48e7ba..de6491dc 100644 --- a/RuoYi-Vue-Plus/script/sql/menuInitValue.sql +++ b/RuoYi-Vue-Plus/script/sql/menuInitValue.sql @@ -457,3 +457,23 @@ values(1904782387791822853, '工种薪水删除', 1904782387791822849, '4', '#' insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) values(1904782387791822854, '工种薪水导出', 1904782387791822849, '5', '#', '', 1, 0, 'F', '0', '0', 'project:workWage:export', '#', 103, 1, sysdate(), null, null, ''); + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1905067946597736450, '黑名单', '1897103538172985346', '1', 'constructionBlacklist', 'project/constructionBlacklist/index', 1, 0, 'C', '0', '0', 'project:constructionBlacklist:list', '#', 103, 1, sysdate(), null, null, '黑名单菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1905067946597736451, '黑名单查询', 1905067946597736450, '1', '#', '', 1, 0, 'F', '0', '0', 'project:constructionBlacklist:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1905067946597736452, '黑名单新增', 1905067946597736450, '2', '#', '', 1, 0, 'F', '0', '0', 'project:constructionBlacklist:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1905067946597736453, '黑名单修改', 1905067946597736450, '3', '#', '', 1, 0, 'F', '0', '0', 'project:constructionBlacklist:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1905067946597736454, '黑名单删除', 1905067946597736450, '4', '#', '', 1, 0, 'F', '0', '0', 'project:constructionBlacklist:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1905067946597736455, '黑名单导出', 1905067946597736450, '5', '#', '', 1, 0, 'F', '0', '0', 'project:constructionBlacklist:export', '#', 103, 1, sysdate(), null, null, ''); diff --git a/RuoYi-Vue-Plus/script/sql/xinnengyuan.sql b/RuoYi-Vue-Plus/script/sql/xinnengyuan.sql index 1cfd84df..d7537b69 100644 --- a/RuoYi-Vue-Plus/script/sql/xinnengyuan.sql +++ b/RuoYi-Vue-Plus/script/sql/xinnengyuan.sql @@ -159,8 +159,6 @@ DROP TABLE IF EXISTS `bus_construction_user`; CREATE TABLE `bus_construction_user` ( `id` bigint not null auto_increment, - `openid` varchar(64) null comment '微信id', - `nick_name` varchar(64) null comment '微信名称', `pace_photo` longtext null comment '人脸照', `user_name` varchar(32) null comment '人员姓名', `project_id` bigint null comment '项目id', @@ -194,7 +192,6 @@ CREATE TABLE `bus_construction_user` `is_delete` tinyint(4) default 0 not null comment '是否删除(0正常 1删除)', PRIMARY KEY (`id`) USING BTREE, INDEX `idx_subcontractor_id` (`contractor_id` ASC) USING BTREE comment '劳务公司id', - INDEX `idx_openid` (`openid` ASC) USING BTREE comment '微信id', INDEX `idx_phone` (`phone` ASC) USING BTREE comment '电话' ) ENGINE = InnoDB CHARACTER SET = utf8mb4 @@ -492,3 +489,17 @@ CREATE TABLE `bus_work_wage` INDEX `idx_project_id` (`project_id` ASC) USING BTREE comment '项目id', INDEX `idx_work_type` (`work_type` ASC) USING BTREE comment '工种' ) comment = '工种薪水' COLLATE = utf8mb4_unicode_ci; + +DROP TABLE IF EXISTS `bus_construction_blacklist`; +CREATE TABLE `bus_construction_blacklist` +( + `id` bigint not null auto_increment comment '主键id', + `user_id` bigint not null comment '用户id', + `user_name` varchar(50) not null comment '名字', + `sfz_number` varchar(50) not null comment '身份证号码', + `remark` varchar(512) null comment '备注', + `create_by` varchar(64) null comment '创建者', + `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_user_id` (`user_id` ASC) USING BTREE comment '用户id' +) comment = '黑名单' collate = utf8mb4_unicode_ci;