From ba69f900aa4b9843fa9e8edf721f784472415cd0 Mon Sep 17 00:00:00 2001 From: buhuazhen <hua100783@gmail.com> Date: 星期四, 04 九月 2025 10:56:24 +0800 Subject: [PATCH] 人力资源-人员排班 --- src/main/java/com/ruoyi/staff/mapper/StaffSchedulingMapper.java | 23 ++ src/main/java/com/ruoyi/staff/service/StaffSchedulingService.java | 20 ++ src/main/java/com/ruoyi/staff/pojo/StaffScheduling.java | 106 +++++++++++++ src/main/java/com/ruoyi/staff/controller/StaffSchedulingController.java | 49 ++++++ src/main/java/com/ruoyi/staff/vo/SearchSchedulingVo.java | 27 +++ src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java | 61 +++++++ src/main/java/com/ruoyi/staff/dto/SaveStaffSchedulingDto.java | 49 ++++++ src/main/java/com/ruoyi/staff/dto/StaffSchedulingDto.java | 74 +++++++++ src/main/java/com/ruoyi/dto/PageDto.java | 18 ++ 9 files changed, 427 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/ruoyi/dto/PageDto.java b/src/main/java/com/ruoyi/dto/PageDto.java new file mode 100644 index 0000000..7c6f399 --- /dev/null +++ b/src/main/java/com/ruoyi/dto/PageDto.java @@ -0,0 +1,18 @@ +package com.ruoyi.dto; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +/** + * @author buhuazhen + * @date 2025/9/3 + * @email 3038525872@qq.com + */ +@Getter +@Setter +public class PageDto implements Serializable { + private Integer current = 1; + private Integer size = 100; +} diff --git a/src/main/java/com/ruoyi/staff/controller/StaffSchedulingController.java b/src/main/java/com/ruoyi/staff/controller/StaffSchedulingController.java new file mode 100644 index 0000000..e7c4c40 --- /dev/null +++ b/src/main/java/com/ruoyi/staff/controller/StaffSchedulingController.java @@ -0,0 +1,49 @@ +package com.ruoyi.staff.controller; + +import com.ruoyi.framework.web.domain.AjaxResult; +import com.ruoyi.staff.dto.SaveStaffSchedulingDto; +import com.ruoyi.staff.service.StaffSchedulingService; +import com.ruoyi.staff.vo.SearchSchedulingVo; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 鎺掔彮 + * @author buhuazhen + * @date 2025/9/3 + * @email 3038525872@qq.com + */ +@RestController +@RequestMapping("/staff/staffScheduling") +@RequiredArgsConstructor +public class StaffSchedulingController { + + private final StaffSchedulingService staffSchedulingService; + + @PostMapping("/listPage") + public AjaxResult listPage(@RequestBody SearchSchedulingVo vo){ + return AjaxResult.success(staffSchedulingService.listPage(vo)); + } + + @PostMapping("/save") + public AjaxResult save(@RequestBody @Validated SaveStaffSchedulingDto saveStaffSchedulingDto){ + staffSchedulingService.saveStaffScheduling(saveStaffSchedulingDto); + return AjaxResult.success(); + } + + @DeleteMapping("/delByIds") + public AjaxResult delByIds(@RequestBody List<Integer> ids){ + staffSchedulingService.removeByIds(ids); + return AjaxResult.success(); + } + + @DeleteMapping("/del/{id}") + public AjaxResult del(@PathVariable("id") Integer id){ + staffSchedulingService.removeById(id); + return AjaxResult.success(); + } + +} diff --git a/src/main/java/com/ruoyi/staff/dto/SaveStaffSchedulingDto.java b/src/main/java/com/ruoyi/staff/dto/SaveStaffSchedulingDto.java new file mode 100644 index 0000000..25a41b3 --- /dev/null +++ b/src/main/java/com/ruoyi/staff/dto/SaveStaffSchedulingDto.java @@ -0,0 +1,49 @@ +package com.ruoyi.staff.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * @author buhuazhen + * @date 2025/9/3 + * @email 3038525872@qq.com + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SaveStaffSchedulingDto implements Serializable { + private Integer id; + + @NotNull(message = "蹇呴』瑕侀�夋嫨鍛樺伐") + private Integer staffId; + + @NotNull(message = "閮ㄩ棬id涓嶈兘涓虹┖!") + private Integer department; + + @NotNull(message = "鐝id涓嶈兘涓虹┖!") + private Integer shiftType; + + @NotNull(message = "宸ヤ綔鏃ヤ笉鑳戒负绌�!") + private Date workDate; + + @NotNull(message = "涓婄彮鏃堕棿涓嶈兘涓虹┖!") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime workStartTime; + + @NotNull(message = "涓嬬彮鏃堕棿涓嶈兘涓虹┖!") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime workEndTime; + + @NotNull(message = "宸ユ椂涓嶈兘涓虹┖!") + private Integer status; + + private String remark; + +} diff --git a/src/main/java/com/ruoyi/staff/dto/StaffSchedulingDto.java b/src/main/java/com/ruoyi/staff/dto/StaffSchedulingDto.java new file mode 100644 index 0000000..6643a38 --- /dev/null +++ b/src/main/java/com/ruoyi/staff/dto/StaffSchedulingDto.java @@ -0,0 +1,74 @@ +package com.ruoyi.staff.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * @author buhuazhen + * @date 2025/9/4 + * @email 3038525872@qq.com + */ +@Data +public class StaffSchedulingDto implements Serializable { + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 鍛樺伐ID + */ + private Integer staffId; + + private String staffName; + + private String staffNo; + + /** + * 閮ㄩ棬 + */ + private String department; + + /** + * 鎺掔彮绫诲瀷 + */ + private String shiftType; + + /** + * 宸ヤ綔鏃ユ湡 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date workDate; + + /** + * 寮�濮嬪伐浣滄椂闂� + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime workStartTime; + + /** + * 缁撴潫宸ヤ綔鏃堕棿 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime workEndTime; + + /** + * 宸ヤ綔鏃堕暱 + */ + private BigDecimal workHours; + + /** + * 鐘舵�� + */ + private String status; + + /** + * 澶囨敞 + */ + private String remark; +} diff --git a/src/main/java/com/ruoyi/staff/mapper/StaffSchedulingMapper.java b/src/main/java/com/ruoyi/staff/mapper/StaffSchedulingMapper.java new file mode 100644 index 0000000..45fecac --- /dev/null +++ b/src/main/java/com/ruoyi/staff/mapper/StaffSchedulingMapper.java @@ -0,0 +1,23 @@ +package com.ruoyi.staff.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.ruoyi.staff.dto.StaffSchedulingDto; +import com.ruoyi.staff.pojo.StaffScheduling; +import com.ruoyi.staff.vo.SearchSchedulingVo; +import org.apache.ibatis.annotations.Param; + +/** +* @author buhuazhen +* @description 閽堝琛ㄣ�恠taff_scheduling銆戠殑鏁版嵁搴撴搷浣淢apper +* @createDate 2025-09-03 14:50:34 +* @Entity generator.domain.StaffScheduling +*/ +public interface StaffSchedulingMapper extends BaseMapper<StaffScheduling> { + + IPage<StaffSchedulingDto> listPage(IPage page, @Param("vo") SearchSchedulingVo vo); +} + + + + diff --git a/src/main/java/com/ruoyi/staff/pojo/StaffScheduling.java b/src/main/java/com/ruoyi/staff/pojo/StaffScheduling.java new file mode 100644 index 0000000..89be920 --- /dev/null +++ b/src/main/java/com/ruoyi/staff/pojo/StaffScheduling.java @@ -0,0 +1,106 @@ +package com.ruoyi.staff.pojo; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * + * @TableName staff_scheduling + */ +@TableName(value ="staff_scheduling") +@Data +public class StaffScheduling { + /** + * + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 鍛樺伐ID + */ + @TableField(value = "staff_id") + private Integer staffId; + + /** + * 閮ㄩ棬 + */ + @TableField(value = "department") + private Integer department; + + /** + * 鎺掔彮绫诲瀷 + */ + @TableField(value = "shift_type") + private Integer shiftType; + + /** + * 宸ヤ綔鏃ユ湡 + */ + @TableField(value = "work_date") + private Date workDate; + + /** + * 寮�濮嬪伐浣滄椂闂� + */ + @TableField(value = "work_start_time") + private LocalDateTime workStartTime; + + /** + * 缁撴潫宸ヤ綔鏃堕棿 + */ + @TableField(value = "work_end_time") + private LocalDateTime workEndTime; + + /** + * 宸ヤ綔鏃堕暱 + */ + @TableField(value = "work_hours") + private BigDecimal workHours; + + /** + * 鐘舵�� + */ + @TableField(value = "status") + private Integer status; + + /** + * 澶囨敞 + */ + @TableField(value = "remark") + private String remark; + + /** + * 鍒涘缓鏃堕棿 + */ + @TableField(value = "create_time",fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 鍒涘缓鐢ㄦ埛 + */ + @TableField(value = "create_user",fill = FieldFill.INSERT) + private Long createUser; + + /** + * 淇敼鏃堕棿 + */ + @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + /** + * 淇敼鐢ㄦ埛 + */ + @TableField(value = "update_user",fill = FieldFill.INSERT_UPDATE) + private Long updateUser; + + /** + * 绉熸埛ID + */ + @TableField(value = "tenant_id",fill = FieldFill.INSERT) + private Long tenantId; +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/staff/service/StaffSchedulingService.java b/src/main/java/com/ruoyi/staff/service/StaffSchedulingService.java new file mode 100644 index 0000000..b12faa1 --- /dev/null +++ b/src/main/java/com/ruoyi/staff/service/StaffSchedulingService.java @@ -0,0 +1,20 @@ +package com.ruoyi.staff.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.staff.dto.SaveStaffSchedulingDto; +import com.ruoyi.staff.dto.StaffSchedulingDto; +import com.ruoyi.staff.pojo.StaffScheduling; +import com.ruoyi.staff.vo.SearchSchedulingVo; + +/** +* @author buhuazhen +* @description 閽堝琛ㄣ�恠taff_scheduling銆戠殑鏁版嵁搴撴搷浣淪ervice +* @createDate 2025-09-03 14:50:34 +*/ +public interface StaffSchedulingService extends IService<StaffScheduling> { + + void saveStaffScheduling(SaveStaffSchedulingDto saveStaffSchedulingDto); + + IPage<StaffSchedulingDto> listPage(SearchSchedulingVo vo); +} diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java new file mode 100644 index 0000000..b42d1fc --- /dev/null +++ b/src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java @@ -0,0 +1,61 @@ +package com.ruoyi.staff.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.staff.dto.SaveStaffSchedulingDto; +import com.ruoyi.staff.dto.StaffSchedulingDto; +import com.ruoyi.staff.mapper.StaffSchedulingMapper; +import com.ruoyi.staff.pojo.StaffScheduling; +import com.ruoyi.staff.service.StaffSchedulingService; +import com.ruoyi.staff.vo.SearchSchedulingVo; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.Duration; + +/** + * @author buhuazhen + * @description 閽堝琛ㄣ�恠taff_scheduling銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇 + * @createDate 2025-09-03 14:50:34 + */ +@Service +@RequiredArgsConstructor +public class StaffSchedulingServiceImpl extends ServiceImpl<StaffSchedulingMapper, StaffScheduling> + implements StaffSchedulingService { + + private final StaffSchedulingMapper staffSchedulingMapper; + + @Lazy + @Resource + private StaffSchedulingService staffSchedulingService; + + @Override + public void saveStaffScheduling(SaveStaffSchedulingDto saveStaffSchedulingDto) { + StaffScheduling staffScheduling = new StaffScheduling(); + BeanUtils.copyProperties(saveStaffSchedulingDto, staffScheduling); + // 寮�濮嬭绠楁椂闂� + Duration duration = Duration.between(staffScheduling.getWorkStartTime(), staffScheduling.getWorkEndTime()); + long hours = duration.toHours(); + // 0.5 + double minutes = (duration.toMinutes() % 60) / 60.0; + // minutes = minutes < 0.5 ? 0 : 0.5; 鍏徃涓�鑸互0.5涓烘爣鍑嗚绠� + staffScheduling.setWorkHours(BigDecimal.valueOf(hours + minutes)); + staffSchedulingService.saveOrUpdate(staffScheduling); + } + + @Override + public IPage<StaffSchedulingDto> listPage(SearchSchedulingVo vo) { + Page<StaffScheduling> page = new Page<>(vo.getCurrent(), vo.getSize()); + + return staffSchedulingMapper.listPage(page, vo); + } +} + + + + diff --git a/src/main/java/com/ruoyi/staff/vo/SearchSchedulingVo.java b/src/main/java/com/ruoyi/staff/vo/SearchSchedulingVo.java new file mode 100644 index 0000000..c546208 --- /dev/null +++ b/src/main/java/com/ruoyi/staff/vo/SearchSchedulingVo.java @@ -0,0 +1,27 @@ +package com.ruoyi.staff.vo; + +import com.ruoyi.dto.PageDto; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; + +/** + * @author buhuazhen + * @date 2025/9/3 + * @email 3038525872@qq.com + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SearchSchedulingVo extends PageDto { + + private String staffName; + + private String shiftType; + + private LocalDate startDate; + + private LocalDate endDate; +} -- Gitblit v1.9.3