Commit af59a5ee218a8442b9f1244939a2940cf5199171
1 parent
e791214e
fix: 新增排班
Showing
54 changed files
with
2014 additions
and
170 deletions
ruoyi-admin/src/main/java/com/ruoyi/common/RuleSchedulingProperties.java
| ... | ... | @@ -5,11 +5,11 @@ package com.ruoyi.common; |
| 5 | 5 | */ |
| 6 | 6 | public interface RuleSchedulingProperties { |
| 7 | 7 | /** |
| 8 | - * 无分段 | |
| 8 | + * 有分段 | |
| 9 | 9 | */ |
| 10 | 10 | Integer HAVE_SEGMENTATION = 2; |
| 11 | 11 | /** |
| 12 | - * 有分段 | |
| 12 | + * 无分段 | |
| 13 | 13 | */ |
| 14 | 14 | Integer NO_SEGMENTATION = 1; |
| 15 | 15 | |
| ... | ... | @@ -47,4 +47,22 @@ public interface RuleSchedulingProperties { |
| 47 | 47 | Integer WORK_HOUR_TYPE_ELASTIC = 0; |
| 48 | 48 | Integer WORK_HOUR_TYPE_FIXED = 1; |
| 49 | 49 | |
| 50 | + /** | |
| 51 | + * 班次类型 按照星期翻班 | |
| 52 | + */ | |
| 53 | + Integer RULE_TYPE_WEEK = 2; | |
| 54 | + /** | |
| 55 | + * 按照固定规则 | |
| 56 | + */ | |
| 57 | + Integer RULE_TYPE_FIXED = 1; | |
| 58 | + | |
| 59 | + /** | |
| 60 | + * 上班 | |
| 61 | + */ | |
| 62 | + Integer WORK_FLAG = 1; | |
| 63 | + /** | |
| 64 | + * 休息 | |
| 65 | + */ | |
| 66 | + Integer FREE_FLAG = 0; | |
| 67 | + | |
| 50 | 68 | } | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/common/WeekEnum.java
0 → 100644
| 1 | +package com.ruoyi.common; | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * 星期枚举 | |
| 5 | + * @author 20412 | |
| 6 | + */ | |
| 7 | + | |
| 8 | +public enum WeekEnum { | |
| 9 | + MONDAY(1,"MONDAY","星期一"), | |
| 10 | + TUESDAY(2,"TUESDAY","星期二"), | |
| 11 | + WEDNESDAY(3,"WEDNESDAY","星期三"), | |
| 12 | + THURSDAY(4,"THURSDAY","星期四"), | |
| 13 | + FRIDAY(5,"FRIDAY","星期五"), | |
| 14 | + SATURDAY(6,"SATURDAY","星期六"), | |
| 15 | + SUNDAY(7,"SUNDAY","星期天"), | |
| 16 | + FREE(0,"休息","休息"); | |
| 17 | + | |
| 18 | + private String description; | |
| 19 | + private Integer value; | |
| 20 | + private String valueString; | |
| 21 | + | |
| 22 | + WeekEnum(Integer value,String valueString,String description){ | |
| 23 | + this.value = value; | |
| 24 | + this.description = description; | |
| 25 | + this.valueString = valueString; | |
| 26 | + } | |
| 27 | + public Integer getValue(){ | |
| 28 | + return this.value; | |
| 29 | + } | |
| 30 | + public String getDescription() { | |
| 31 | + return this.description; | |
| 32 | + } | |
| 33 | + public String getValueString(){ | |
| 34 | + return this.valueString; | |
| 35 | + } | |
| 36 | +} | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/controller/AttendanceController.java
| 1 | 1 | package com.ruoyi.controller; |
| 2 | 2 | |
| 3 | +import com.ruoyi.common.core.controller.BaseController; | |
| 4 | +import com.ruoyi.common.core.page.TableDataInfo; | |
| 3 | 5 | import com.ruoyi.common.global.Result; |
| 6 | +import com.ruoyi.domain.RuleAttendanceMain; | |
| 7 | +import com.ruoyi.pojo.dto.SchedulingDto; | |
| 8 | +import com.ruoyi.pojo.dto.SchedulingSettingDto; | |
| 9 | +import com.ruoyi.pojo.vo.RuleAttendanceMainRequestVo; | |
| 4 | 10 | import com.ruoyi.pojo.vo.SchedulingRequestVo; |
| 11 | +import com.ruoyi.pojo.vo.SchedulingResponseVo; | |
| 12 | +import com.ruoyi.pojo.vo.UpdateAttendanceVo; | |
| 5 | 13 | import com.ruoyi.service.AttendanceService; |
| 6 | 14 | import io.swagger.annotations.Api; |
| 7 | 15 | import io.swagger.annotations.ApiOperation; |
| 8 | 16 | import org.springframework.beans.factory.annotation.Autowired; |
| 17 | +import org.springframework.validation.annotation.Validated; | |
| 9 | 18 | import org.springframework.web.bind.annotation.*; |
| 10 | 19 | |
| 20 | +import java.util.List; | |
| 21 | + | |
| 11 | 22 | /** |
| 12 | 23 | * 考勤表controller |
| 13 | 24 | * @author 20412 |
| ... | ... | @@ -15,7 +26,7 @@ import org.springframework.web.bind.annotation.*; |
| 15 | 26 | @RestController |
| 16 | 27 | @RequestMapping("/attendance") |
| 17 | 28 | @Api(tags = "考勤管理") |
| 18 | -public class AttendanceController { | |
| 29 | +public class AttendanceController extends BaseController { | |
| 19 | 30 | |
| 20 | 31 | @Autowired |
| 21 | 32 | private AttendanceService attendanceService; |
| ... | ... | @@ -35,7 +46,66 @@ public class AttendanceController { |
| 35 | 46 | */ |
| 36 | 47 | @ApiOperation("获取排班") |
| 37 | 48 | @GetMapping("/scheduling/list") |
| 38 | - public Result<?> getSchedulingList(@ModelAttribute SchedulingRequestVo vo){ | |
| 39 | - return Result.OK(attendanceService.getSchedulingList(vo)); | |
| 49 | + public TableDataInfo getSchedulingList(@ModelAttribute SchedulingRequestVo vo){ | |
| 50 | + List<SchedulingResponseVo> list = attendanceService.getSchedulingList(vo); | |
| 51 | + return getDataTable(list); | |
| 52 | + } | |
| 53 | + | |
| 54 | + /** | |
| 55 | + * 根据班次获取模板 | |
| 56 | + */ | |
| 57 | + @ApiOperation("根据班次获取模板") | |
| 58 | + @GetMapping("/template/{id}") | |
| 59 | + public Result<?> getTemplate(@PathVariable("id") Long id){ | |
| 60 | + return Result.OK(attendanceService.getTemplate(id)); | |
| 61 | + } | |
| 62 | + | |
| 63 | + | |
| 64 | + /** | |
| 65 | + * 新增排班设置 | |
| 66 | + */ | |
| 67 | + @ApiOperation("排班设置") | |
| 68 | + @PostMapping("/saveSchedulingSetting") | |
| 69 | + public Result<?> saveSchedulingSetting(@RequestBody @Validated SchedulingSettingDto dto){ | |
| 70 | + attendanceService.saveSchedulingSetting(dto); | |
| 71 | + return Result.OK("新增成功"); | |
| 72 | + } | |
| 73 | + | |
| 74 | + /** | |
| 75 | + * 修改排班设置 | |
| 76 | + */ | |
| 77 | + @ApiOperation("排班设置") | |
| 78 | + @PutMapping("/updateSchedulingSetting") | |
| 79 | + public Result<?> updateSchedulingSetting(@RequestBody @Validated SchedulingDto dto){ | |
| 80 | + attendanceService.updateSchedulingSetting(dto); | |
| 81 | + return Result.OK("新增成功"); | |
| 82 | + } | |
| 83 | + | |
| 84 | + /** | |
| 85 | + * 删除排班设置 | |
| 86 | + */ | |
| 87 | + @ApiOperation("排班设置") | |
| 88 | + @DeleteMapping("/deleteSchedulingSetting/{settingId}") | |
| 89 | + public Result<?> deleteSchedulingSetting(@PathVariable("settingId") Integer settingId){ | |
| 90 | + attendanceService.deleteSchedulingSetting(settingId); | |
| 91 | + return Result.OK("删除成功"); | |
| 92 | + } | |
| 93 | + | |
| 94 | + | |
| 95 | + /** | |
| 96 | + * 获取考情表 | |
| 97 | + */ | |
| 98 | + @ApiOperation("获取考情表") | |
| 99 | + @GetMapping("/list/attendance") | |
| 100 | + public TableDataInfo getAttendance(@ModelAttribute RuleAttendanceMainRequestVo vo){ | |
| 101 | + List<RuleAttendanceMain> list = attendanceService.queryAttendanceMain(vo); | |
| 102 | + return getDataTable(list); | |
| 103 | + } | |
| 104 | + | |
| 105 | + @ApiOperation("修改考情表") | |
| 106 | + @PutMapping("/update/attendance") | |
| 107 | + public Result<?> updateAttendance(@RequestBody @Validated UpdateAttendanceVo vo){ | |
| 108 | + attendanceService.updateAttendance(vo); | |
| 109 | + return Result.OK("规则修改成功"); | |
| 40 | 110 | } |
| 41 | 111 | } | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/domain/RuleAttendanceMain.java
0 → 100644
| 1 | +package com.ruoyi.domain; | |
| 2 | + | |
| 3 | +import com.baomidou.mybatisplus.annotation.IdType; | |
| 4 | +import com.baomidou.mybatisplus.annotation.TableField; | |
| 5 | +import com.baomidou.mybatisplus.annotation.TableId; | |
| 6 | +import com.baomidou.mybatisplus.annotation.TableName; | |
| 7 | +import java.io.Serializable; | |
| 8 | +import java.util.Date; | |
| 9 | +import lombok.Data; | |
| 10 | +import org.springframework.format.annotation.DateTimeFormat; | |
| 11 | + | |
| 12 | +/** | |
| 13 | + * 考勤表 | |
| 14 | + * @author 20412 | |
| 15 | + * @TableName rule_attendance_main | |
| 16 | + */ | |
| 17 | +@TableName(value ="rule_attendance_main") | |
| 18 | +@Data | |
| 19 | +public class RuleAttendanceMain implements Serializable { | |
| 20 | + /** | |
| 21 | + * 主键 | |
| 22 | + */ | |
| 23 | + @TableId(type = IdType.AUTO) | |
| 24 | + private Integer id; | |
| 25 | + | |
| 26 | + /** | |
| 27 | + * 姓名 | |
| 28 | + */ | |
| 29 | + private String name; | |
| 30 | + | |
| 31 | + /** | |
| 32 | + * 工号 | |
| 33 | + */ | |
| 34 | + private String jobCode; | |
| 35 | + | |
| 36 | + /** | |
| 37 | + * 工时制 | |
| 38 | + */ | |
| 39 | + private Integer workingHourPlan; | |
| 40 | + | |
| 41 | + /** | |
| 42 | + * 工时类型 | |
| 43 | + */ | |
| 44 | + private Integer workingHourType; | |
| 45 | + | |
| 46 | + /** | |
| 47 | + * 第一段上班签到时间 | |
| 48 | + */ | |
| 49 | + private Date firstWorkSignInTime; | |
| 50 | + | |
| 51 | + /** | |
| 52 | + * 第一段上班打卡签到范围 | |
| 53 | + */ | |
| 54 | + private Integer firstSignInWorkingRange; | |
| 55 | + | |
| 56 | + /** | |
| 57 | + * 第一段下班签退时间 | |
| 58 | + */ | |
| 59 | + private Date firstQuittingSignInTime; | |
| 60 | + | |
| 61 | + /** | |
| 62 | + * 第一段下班签退签到范围 | |
| 63 | + */ | |
| 64 | + private Integer firstSignInQuittingRange; | |
| 65 | + | |
| 66 | + /** | |
| 67 | + * 超时范围允许 | |
| 68 | + */ | |
| 69 | + private Integer signInTimeOutRange; | |
| 70 | + | |
| 71 | + /** | |
| 72 | + * 第二段上班签到时间 | |
| 73 | + */ | |
| 74 | + private Date secondWorkSignInTime; | |
| 75 | + | |
| 76 | + /** | |
| 77 | + * 第二段上班打卡范围 | |
| 78 | + */ | |
| 79 | + private Integer secondSignInWorkingRange; | |
| 80 | + | |
| 81 | + /** | |
| 82 | + * 第二段下班签到签退 | |
| 83 | + */ | |
| 84 | + private Date secondQuittingSignInTime; | |
| 85 | + | |
| 86 | + /** | |
| 87 | + * 第二段下班打卡范围 | |
| 88 | + */ | |
| 89 | + private Integer secondSignInQuittingRange; | |
| 90 | + | |
| 91 | + /** | |
| 92 | + * 值班日期 | |
| 93 | + */ | |
| 94 | + @DateTimeFormat(pattern = "yyyy-MM-dd") | |
| 95 | + private Date schedulingDate; | |
| 96 | + | |
| 97 | + /** | |
| 98 | + * 工作还是休息 | |
| 99 | + */ | |
| 100 | + private Integer workFlag; | |
| 101 | + | |
| 102 | + /** | |
| 103 | + * 工种 | |
| 104 | + */ | |
| 105 | + private String posts; | |
| 106 | + | |
| 107 | + /** | |
| 108 | + * 班型名称 | |
| 109 | + */ | |
| 110 | + private String ruleDictName; | |
| 111 | + | |
| 112 | + @TableField(exist = false) | |
| 113 | + private static final long serialVersionUID = 1L; | |
| 114 | +} | |
| 0 | 115 | \ No newline at end of file | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/domain/RuleNumSetting.java
| 1 | 1 | package com.ruoyi.domain; |
| 2 | 2 | |
| 3 | + | |
| 4 | +import com.baomidou.mybatisplus.annotation.IdType; | |
| 5 | +import com.baomidou.mybatisplus.annotation.TableField; | |
| 6 | +import com.baomidou.mybatisplus.annotation.TableId; | |
| 7 | +import com.baomidou.mybatisplus.annotation.TableName; | |
| 8 | +import java.io.Serializable; | |
| 9 | +import java.util.Date; | |
| 3 | 10 | import lombok.Data; |
| 4 | 11 | |
| 5 | 12 | /** |
| 6 | - * 排班设置 | |
| 13 | + * 排班设置表 | |
| 7 | 14 | * @author 20412 |
| 15 | + * @TableName rule_num_setting | |
| 8 | 16 | */ |
| 17 | +@TableName(value ="rule_num_setting") | |
| 9 | 18 | @Data |
| 10 | -public class RuleNumSetting { | |
| 11 | -} | |
| 19 | +public class RuleNumSetting implements Serializable { | |
| 20 | + /** | |
| 21 | + * 主键 | |
| 22 | + */ | |
| 23 | + @TableId(type = IdType.AUTO) | |
| 24 | + private Integer id; | |
| 25 | + | |
| 26 | + /** | |
| 27 | + * 班次id | |
| 28 | + */ | |
| 29 | + private Integer ruleNumId; | |
| 30 | + | |
| 31 | + /** | |
| 32 | + * 排班名称 | |
| 33 | + */ | |
| 34 | + private String ruleDictName; | |
| 35 | + | |
| 36 | + /** | |
| 37 | + * 创建时间 | |
| 38 | + */ | |
| 39 | + private Date createTime; | |
| 40 | + | |
| 41 | + /** | |
| 42 | + * 修改时间 | |
| 43 | + */ | |
| 44 | + private Date updateTime; | |
| 45 | + | |
| 46 | + /** | |
| 47 | + * 备注 | |
| 48 | + */ | |
| 49 | + private String remark; | |
| 50 | + | |
| 51 | + /** | |
| 52 | + * 创建人 | |
| 53 | + */ | |
| 54 | + private String createBy; | |
| 55 | + | |
| 56 | + /** | |
| 57 | + * 修改人 | |
| 58 | + */ | |
| 59 | + private String updateBy; | |
| 60 | + | |
| 61 | + @TableField(exist = false) | |
| 62 | + private static final long serialVersionUID = 1L; | |
| 63 | +} | |
| 12 | 64 | \ No newline at end of file | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/domain/RuleSettingDriver.java
0 → 100644
| 1 | +package com.ruoyi.domain; | |
| 2 | + | |
| 3 | + | |
| 4 | +import com.baomidou.mybatisplus.annotation.IdType; | |
| 5 | +import com.baomidou.mybatisplus.annotation.TableField; | |
| 6 | +import com.baomidou.mybatisplus.annotation.TableId; | |
| 7 | +import com.baomidou.mybatisplus.annotation.TableName; | |
| 8 | +import java.io.Serializable; | |
| 9 | +import java.util.Date; | |
| 10 | + | |
| 11 | +import com.fasterxml.jackson.annotation.JsonFormat; | |
| 12 | +import lombok.Data; | |
| 13 | +import org.springframework.format.annotation.DateTimeFormat; | |
| 14 | + | |
| 15 | +import javax.validation.constraints.NotNull; | |
| 16 | + | |
| 17 | +/** | |
| 18 | + * 人员信息表与排班设置绑定表 | |
| 19 | + * @author 20412 | |
| 20 | + * @TableName rule_setting_driver | |
| 21 | + */ | |
| 22 | +@TableName(value ="rule_setting_driver") | |
| 23 | +@Data | |
| 24 | +public class RuleSettingDriver implements Serializable { | |
| 25 | + /** | |
| 26 | + * | |
| 27 | + */ | |
| 28 | + @TableId(type = IdType.AUTO) | |
| 29 | + private Integer id; | |
| 30 | + | |
| 31 | + /** | |
| 32 | + * | |
| 33 | + */ | |
| 34 | + private Integer settingId; | |
| 35 | + | |
| 36 | + /** | |
| 37 | + * 工号 | |
| 38 | + */ | |
| 39 | + private String jobCode; | |
| 40 | + | |
| 41 | + /** | |
| 42 | + * 开始时间 | |
| 43 | + */ | |
| 44 | + @DateTimeFormat(pattern = "yyyy-MM-dd") | |
| 45 | + @JsonFormat(pattern = "yyyy-MM-dd") | |
| 46 | + private Date startDate; | |
| 47 | + | |
| 48 | + @TableField(exist = false) | |
| 49 | + private static final long serialVersionUID = 1L; | |
| 50 | +} | |
| 0 | 51 | \ No newline at end of file | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/domain/RuleSettingScheduling.java
0 → 100644
| 1 | +package com.ruoyi.domain; | |
| 2 | + | |
| 3 | + | |
| 4 | +import com.baomidou.mybatisplus.annotation.IdType; | |
| 5 | +import com.baomidou.mybatisplus.annotation.TableField; | |
| 6 | +import com.baomidou.mybatisplus.annotation.TableId; | |
| 7 | +import com.baomidou.mybatisplus.annotation.TableName; | |
| 8 | +import java.io.Serializable; | |
| 9 | +import lombok.Data; | |
| 10 | + | |
| 11 | +import javax.validation.constraints.NotNull; | |
| 12 | + | |
| 13 | +/** | |
| 14 | + * 考勤规则表 | |
| 15 | + * @author 20412 | |
| 16 | + * @TableName rule_setting_scheduling | |
| 17 | + */ | |
| 18 | +@TableName(value ="rule_setting_scheduling") | |
| 19 | +@Data | |
| 20 | +public class RuleSettingScheduling implements Serializable { | |
| 21 | + /** | |
| 22 | + * | |
| 23 | + */ | |
| 24 | + @TableId(type = IdType.AUTO) | |
| 25 | + private Integer id; | |
| 26 | + | |
| 27 | + /** | |
| 28 | + * 设置表id | |
| 29 | + */ | |
| 30 | + @NotNull(message = "设置表id不能为空") | |
| 31 | + private Integer settingId; | |
| 32 | + | |
| 33 | + /** | |
| 34 | + * 规则id | |
| 35 | + */ | |
| 36 | + private Integer ruleSchedulingId; | |
| 37 | + /** | |
| 38 | + * 规则名称 | |
| 39 | + */ | |
| 40 | + private String ruleName; | |
| 41 | + /** | |
| 42 | + * 时间范围 | |
| 43 | + */ | |
| 44 | + private String rangeTime; | |
| 45 | + | |
| 46 | + /** | |
| 47 | + * 序号 | |
| 48 | + */ | |
| 49 | + @NotNull(message = "序号不能为空") | |
| 50 | + private Integer sort; | |
| 51 | + | |
| 52 | + @TableField(exist = false) | |
| 53 | + private static final long serialVersionUID = 1L; | |
| 54 | +} | |
| 0 | 55 | \ No newline at end of file | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/driver/mapper/DriverMapper.java
ruoyi-admin/src/main/java/com/ruoyi/job/DriverJob.java
| 1 | 1 | package com.ruoyi.job; |
| 2 | 2 | |
| 3 | -import cn.hutool.core.collection.CollectionUtil; | |
| 4 | 3 | import cn.hutool.http.HttpUtil; |
| 5 | 4 | import com.alibaba.fastjson2.JSON; |
| 6 | 5 | import com.alibaba.fastjson2.JSONArray; |
| ... | ... | @@ -16,6 +15,7 @@ import com.ruoyi.pojo.request.PersonnelRequestVo; |
| 16 | 15 | import com.ruoyi.pojo.request.TokenRequestVo; |
| 17 | 16 | import com.ruoyi.pojo.response.ResponseSchedulingDto; |
| 18 | 17 | import com.ruoyi.pojo.response.personnel.*; |
| 18 | +import com.ruoyi.service.RuleNumSettingService; | |
| 19 | 19 | import com.ruoyi.service.ThreadJobService; |
| 20 | 20 | import com.ruoyi.utils.ConstDateUtil; |
| 21 | 21 | import com.ruoyi.utils.ListUtils; |
| ... | ... | @@ -74,6 +74,9 @@ public class DriverJob implements InitializingBean { |
| 74 | 74 | private ThreadJobService threadJobService; |
| 75 | 75 | |
| 76 | 76 | @Autowired |
| 77 | + private RuleNumSettingService ruleNumSettingService; | |
| 78 | + | |
| 79 | + @Autowired | |
| 77 | 80 | private IDriverService driverService; |
| 78 | 81 | |
| 79 | 82 | @Value("${api.url.getDriverInfo}") |
| ... | ... | @@ -98,6 +101,7 @@ public class DriverJob implements InitializingBean { |
| 98 | 101 | @Value("${api.config.nonce}") |
| 99 | 102 | private String nonce; |
| 100 | 103 | |
| 104 | + private static RuleNumSettingService RULE_NUM_SETTING_SERVICE; | |
| 101 | 105 | private static NowSchedulingCache NOW_SCHEDULING_CACHE; |
| 102 | 106 | private static ThreadJobService THREAD_JOB_SERVICE; |
| 103 | 107 | private static SchedulingCache SCHEDULING_CACHE; |
| ... | ... | @@ -204,7 +208,7 @@ public class DriverJob implements InitializingBean { |
| 204 | 208 | * 获取排班任务请求 |
| 205 | 209 | * 24小时执行一次 |
| 206 | 210 | */ |
| 207 | - public void getSchedulingInfo() { | |
| 211 | + public void getSchedulingInfo(String timeOut) { | |
| 208 | 212 | // TODO 获取当天的签到表 |
| 209 | 213 | long timestamp = System.currentTimeMillis(); |
| 210 | 214 | String formatDate = ConstDateUtil.formatDate(timestamp); |
| ... | ... | @@ -220,7 +224,7 @@ public class DriverJob implements InitializingBean { |
| 220 | 224 | throw new RuntimeException(e); |
| 221 | 225 | } |
| 222 | 226 | // 获取排班信息并存入redis |
| 223 | - saveSchedulingToRedis(getSchedulingInfoUrl, formatDate); | |
| 227 | + saveSchedulingToRedis(getSchedulingInfoUrl, formatDate,timeOut); | |
| 224 | 228 | // 删除两天前排班信息 |
| 225 | 229 | deleteScheduling(); |
| 226 | 230 | log.info("获取{}的排班数据完毕", formatDate); |
| ... | ... | @@ -261,6 +265,13 @@ public class DriverJob implements InitializingBean { |
| 261 | 265 | } |
| 262 | 266 | |
| 263 | 267 | /** |
| 268 | + * 生成排班 | |
| 269 | + */ | |
| 270 | + public void createAttendance(){ | |
| 271 | + RULE_NUM_SETTING_SERVICE.createAttendance(); | |
| 272 | + } | |
| 273 | + | |
| 274 | + /** | |
| 264 | 275 | * 计算设备在线状态 5 分钟一次 |
| 265 | 276 | */ |
| 266 | 277 | public void computedDeviceOnlineStatus(String date) throws IOException, ClassNotFoundException { |
| ... | ... | @@ -287,7 +298,7 @@ public class DriverJob implements InitializingBean { |
| 287 | 298 | } |
| 288 | 299 | |
| 289 | 300 | |
| 290 | - public Map<String, List<ResponseSchedulingDto>> saveSchedulingToRedis(String getSchedulingInfoUrl, String dateKey) { | |
| 301 | + public Map<String, List<ResponseSchedulingDto>> saveSchedulingToRedis(String getSchedulingInfoUrl, String dateKey, String timeOut) { | |
| 291 | 302 | log.info("开始拉取排班:{}", dateKey); |
| 292 | 303 | List<ResponseSchedulingDto> originSchedulingList = RESTTEMPLATE.exchange( |
| 293 | 304 | getSchedulingInfoUrl, |
| ... | ... | @@ -314,7 +325,7 @@ public class DriverJob implements InitializingBean { |
| 314 | 325 | schedulingList.sort(Comparator.comparing(ResponseSchedulingDto::getFcsjT)); |
| 315 | 326 | } |
| 316 | 327 | // 存入签到报表 |
| 317 | - THREAD_JOB_SERVICE.asyncComputedScheduling(driverSchedulingMap); | |
| 328 | + THREAD_JOB_SERVICE.asyncComputedScheduling(driverSchedulingMap,timeOut); | |
| 318 | 329 | // 实时排班直接存入缓存 |
| 319 | 330 | SCHEDULING_CACHE.setCacheScheduling(DRIVER_SCHEDULING_PRE + dateKey, driverSchedulingMap); |
| 320 | 331 | log.info("拉取排班完毕:{}", dateKey); |
| ... | ... | @@ -472,29 +483,8 @@ public class DriverJob implements InitializingBean { |
| 472 | 483 | throw e; |
| 473 | 484 | } |
| 474 | 485 | |
| 475 | - | |
| 476 | 486 | } |
| 477 | 487 | |
| 478 | -// public static void main(String[] args) throws Exception { | |
| 479 | -// RestTemplate restTemplate1 = new RestTemplate(); | |
| 480 | -//// String url = "http://101.95.136.206:9089/webservice/rest/person/company/%s"; | |
| 481 | -// String url = "http://101.95.136.206:9089/webservice/rest/schedule_real/sch_jk/%s/%s?timestamp=%d&nonce=%s&password=%s&sign=%s"; | |
| 482 | -// | |
| 483 | -// long timestamp = System.currentTimeMillis(); | |
| 484 | -// Map<String, String> configMap = new HashMap<>(5); | |
| 485 | -// configMap.put("timestamp", String.valueOf(timestamp)); | |
| 486 | -// configMap.put("nonce", "NONCE"); | |
| 487 | -// configMap.put("password", "c4dd3d8cb9a82f6d6a625818618b28ca7bebb464"); | |
| 488 | -// String format = String.format(url, "99", DateUtils.getDate("yyyyMMdd"), timestamp, "NONCE", "c4dd3d8cb9a82f6d6a625818618b28ca7bebb464", getSHA1(configMap)); | |
| 489 | -//// String sign = getSHA1(configMap); | |
| 490 | -//// String httpUrl = format | |
| 491 | -//// + "?timestamp=" + timestamp | |
| 492 | -//// + "&nonce=" + "NONCE" | |
| 493 | -//// + "&password=" + "c4dd3d8cb9a82f6d6a625818618b28ca7bebb464" | |
| 494 | -//// + "&sign=" + sign; | |
| 495 | -// Object forObject = restTemplate1.getForObject(format, Object.class); | |
| 496 | -// } | |
| 497 | - | |
| 498 | 488 | @Override |
| 499 | 489 | public void afterPropertiesSet() throws Exception { |
| 500 | 490 | GET_DRIVER_INFO_URL = getDriverInfoUrl; |
| ... | ... | @@ -511,5 +501,6 @@ public class DriverJob implements InitializingBean { |
| 511 | 501 | SCHEDULING_CACHE = schedulingCache; |
| 512 | 502 | EQUIPMENT_MAPPER = equipmentMapper; |
| 513 | 503 | NOW_SCHEDULING_CACHE = nowSchedulingCache; |
| 504 | + RULE_NUM_SETTING_SERVICE = ruleNumSettingService; | |
| 514 | 505 | } |
| 515 | 506 | } | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/mapper/RuleAttendanceMainMapper.java
0 → 100644
| 1 | +package com.ruoyi.mapper; | |
| 2 | + | |
| 3 | +import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |
| 4 | +import com.ruoyi.domain.RuleAttendanceMain; | |
| 5 | + | |
| 6 | +/** | |
| 7 | +* @author 20412 | |
| 8 | +* @description 针对表【rule_attendance_main(考勤表)】的数据库操作Mapper | |
| 9 | +* @createDate 2023-09-03 12:15:39 | |
| 10 | +* @Entity .domain.RuleAttendanceMain | |
| 11 | +*/ | |
| 12 | +public interface RuleAttendanceMainMapper extends BaseMapper<RuleAttendanceMain> { | |
| 13 | + | |
| 14 | +} | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/mapper/RuleNumSettingMapper.java
0 → 100644
| 1 | +package com.ruoyi.mapper; | |
| 2 | + | |
| 3 | +import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |
| 4 | +import com.ruoyi.domain.RuleNumSetting; | |
| 5 | +import com.ruoyi.driver.domain.Driver; | |
| 6 | +import com.ruoyi.pojo.dto.AttendanceDto; | |
| 7 | +import com.ruoyi.pojo.vo.SchedulingRequestVo; | |
| 8 | +import com.ruoyi.pojo.vo.SchedulingResponseVo; | |
| 9 | + | |
| 10 | +import java.util.List; | |
| 11 | + | |
| 12 | +/** | |
| 13 | +* @author 20412 | |
| 14 | +* @description 针对表【rule_num_setting(排班设置表)】的数据库操作Mapper | |
| 15 | +* @createDate 2023-08-31 09:31:28 | |
| 16 | +* @Entity .domain.RuleNumSetting | |
| 17 | +*/ | |
| 18 | +public interface RuleNumSettingMapper extends BaseMapper<RuleNumSetting> { | |
| 19 | + | |
| 20 | + List<SchedulingResponseVo> getSchedulingList(SchedulingRequestVo vo); | |
| 21 | + | |
| 22 | + /** | |
| 23 | + * 获取需要生成排班人员 | |
| 24 | + * @return | |
| 25 | + */ | |
| 26 | + List<AttendanceDto> getPeopleList(); | |
| 27 | +} | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/mapper/RuleSettingDriverMapper.java
0 → 100644
| 1 | +package com.ruoyi.mapper; | |
| 2 | + | |
| 3 | + | |
| 4 | +import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |
| 5 | +import com.ruoyi.domain.RuleSettingDriver; | |
| 6 | +import com.ruoyi.driver.domain.Driver; | |
| 7 | +import com.ruoyi.pojo.dto.DriverDto; | |
| 8 | + | |
| 9 | +import java.util.List; | |
| 10 | + | |
| 11 | +/** | |
| 12 | +* @author 20412 | |
| 13 | +* @description 针对表【rule_setting_driver(人员信息表与排班设置绑定表)】的数据库操作Mapper | |
| 14 | +* @createDate 2023-08-31 14:35:06 | |
| 15 | +* @Entity .domain.RuleSettingDriver | |
| 16 | +*/ | |
| 17 | +public interface RuleSettingDriverMapper extends BaseMapper<RuleSettingDriver> { | |
| 18 | + | |
| 19 | + List<DriverDto> queryDriverListBySettingId(List<Integer> list); | |
| 20 | +} | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/mapper/RuleSettingSchedulingMapper.java
0 → 100644
| 1 | +package com.ruoyi.mapper; | |
| 2 | + | |
| 3 | + | |
| 4 | +import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |
| 5 | +import com.ruoyi.domain.RuleSettingScheduling; | |
| 6 | +import com.ruoyi.pojo.dto.RuleSchedulingDto; | |
| 7 | +import com.ruoyi.scheduling.domain.RuleScheduling; | |
| 8 | + | |
| 9 | +import java.util.List; | |
| 10 | + | |
| 11 | +/** | |
| 12 | +* @author 20412 | |
| 13 | +* @description 针对表【rule_setting_scheduling(考勤规则表)】的数据库操作Mapper | |
| 14 | +* @createDate 2023-08-31 14:35:06 | |
| 15 | +* @Entity .domain.RuleSettingScheduling | |
| 16 | +*/ | |
| 17 | +public interface RuleSettingSchedulingMapper extends BaseMapper<RuleSettingScheduling> { | |
| 18 | + | |
| 19 | + List<RuleSchedulingDto> querySchedulingListBySettingId(List<Integer> list); | |
| 20 | +} | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/num/controller/RuleNumController.java
| ... | ... | @@ -56,6 +56,17 @@ public class RuleNumController extends BaseController |
| 56 | 56 | return AjaxResult.success(ruleNumService.selectRuleNumList(ruleNum)); |
| 57 | 57 | } |
| 58 | 58 | |
| 59 | + /** | |
| 60 | + * 查询班次管理列表 | |
| 61 | + */ | |
| 62 | + @PreAuthorize("@ss.hasPermi('num:num:list')") | |
| 63 | + @GetMapping("/list/num/{settingId}") | |
| 64 | + public AjaxResult getRuleNumBySettingId(@PathVariable("settingId") Integer settingId) | |
| 65 | + { | |
| 66 | + return AjaxResult.success(ruleNumService.getRuleNumBySettingId(settingId)); | |
| 67 | + } | |
| 68 | + | |
| 69 | + | |
| 59 | 70 | |
| 60 | 71 | /** |
| 61 | 72 | * 导出班次管理列表 | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/num/domain/RuleNum.java
| 1 | 1 | package com.ruoyi.num.domain; |
| 2 | 2 | |
| 3 | +import lombok.Data; | |
| 3 | 4 | import org.apache.commons.lang3.builder.ToStringBuilder; |
| 4 | 5 | import org.apache.commons.lang3.builder.ToStringStyle; |
| 5 | 6 | import com.ruoyi.common.annotation.Excel; |
| ... | ... | @@ -11,6 +12,7 @@ import com.ruoyi.common.core.domain.BaseEntity; |
| 11 | 12 | * @author guzijian |
| 12 | 13 | * @date 2023-08-03 |
| 13 | 14 | */ |
| 15 | +@Data | |
| 14 | 16 | public class RuleNum extends BaseEntity |
| 15 | 17 | { |
| 16 | 18 | private static final long serialVersionUID = 1L; |
| ... | ... | @@ -24,84 +26,18 @@ public class RuleNum extends BaseEntity |
| 24 | 26 | |
| 25 | 27 | /** 班次类型 */ |
| 26 | 28 | @Excel(name = "班次类型") |
| 27 | - private Long ruleType; | |
| 29 | + private Integer ruleType; | |
| 28 | 30 | |
| 29 | 31 | /** 工作天数 */ |
| 30 | 32 | @Excel(name = "工作天数") |
| 31 | - private Long workDay; | |
| 33 | + private Integer workDay; | |
| 32 | 34 | |
| 33 | 35 | /** 休息天数 */ |
| 34 | 36 | @Excel(name = "休息天数") |
| 35 | - private Long freeDay; | |
| 37 | + private Integer freeDay; | |
| 36 | 38 | |
| 37 | 39 | /** 星期翻班详情 */ |
| 38 | 40 | @Excel(name = "星期翻班详情") |
| 39 | 41 | private String ruleWeek; |
| 40 | 42 | |
| 41 | - public void setId(Long id) | |
| 42 | - { | |
| 43 | - this.id = id; | |
| 44 | - } | |
| 45 | - | |
| 46 | - public Long getId() | |
| 47 | - { | |
| 48 | - return id; | |
| 49 | - } | |
| 50 | - public void setRuleDictName(String ruleDictName) | |
| 51 | - { | |
| 52 | - this.ruleDictName = ruleDictName; | |
| 53 | - } | |
| 54 | - | |
| 55 | - public String getRuleDictName() | |
| 56 | - { | |
| 57 | - return ruleDictName; | |
| 58 | - } | |
| 59 | - public void setRuleType(Long ruleType) | |
| 60 | - { | |
| 61 | - this.ruleType = ruleType; | |
| 62 | - } | |
| 63 | - | |
| 64 | - public Long getRuleType() | |
| 65 | - { | |
| 66 | - return ruleType; | |
| 67 | - } | |
| 68 | - public void setWorkDay(Long workDay) | |
| 69 | - { | |
| 70 | - this.workDay = workDay; | |
| 71 | - } | |
| 72 | - | |
| 73 | - public Long getWorkDay() | |
| 74 | - { | |
| 75 | - return workDay; | |
| 76 | - } | |
| 77 | - public void setFreeDay(Long freeDay) | |
| 78 | - { | |
| 79 | - this.freeDay = freeDay; | |
| 80 | - } | |
| 81 | - | |
| 82 | - public Long getFreeDay() | |
| 83 | - { | |
| 84 | - return freeDay; | |
| 85 | - } | |
| 86 | - public void setRuleWeek(String ruleWeek) | |
| 87 | - { | |
| 88 | - this.ruleWeek = ruleWeek; | |
| 89 | - } | |
| 90 | - | |
| 91 | - public String getRuleWeek() | |
| 92 | - { | |
| 93 | - return ruleWeek; | |
| 94 | - } | |
| 95 | - | |
| 96 | - @Override | |
| 97 | - public String toString() { | |
| 98 | - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) | |
| 99 | - .append("id", getId()) | |
| 100 | - .append("ruleDictName", getRuleDictName()) | |
| 101 | - .append("ruleType", getRuleType()) | |
| 102 | - .append("workDay", getWorkDay()) | |
| 103 | - .append("freeDay", getFreeDay()) | |
| 104 | - .append("ruleWeek", getRuleWeek()) | |
| 105 | - .toString(); | |
| 106 | - } | |
| 107 | 43 | } | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/num/mapper/RuleNumMapper.java
| ... | ... | @@ -2,6 +2,8 @@ package com.ruoyi.num.mapper; |
| 2 | 2 | |
| 3 | 3 | import java.util.List; |
| 4 | 4 | import com.ruoyi.num.domain.RuleNum; |
| 5 | +import com.ruoyi.pojo.dto.RuleNumDto; | |
| 6 | +import org.apache.ibatis.annotations.Param; | |
| 5 | 7 | |
| 6 | 8 | /** |
| 7 | 9 | * 班次管理Mapper接口 |
| ... | ... | @@ -58,4 +60,13 @@ public interface RuleNumMapper |
| 58 | 60 | * @return 结果 |
| 59 | 61 | */ |
| 60 | 62 | public int deleteRuleNumByIds(Long[] ids); |
| 63 | + | |
| 64 | + /** | |
| 65 | + * 根据排班设置id获取当前班次 | |
| 66 | + * @param settingId | |
| 67 | + * @return | |
| 68 | + */ | |
| 69 | + RuleNum listNumBySettingId(@Param("id") Integer settingId); | |
| 70 | + | |
| 71 | + List<RuleNumDto> selectRuleNumBySettingId(List<Integer> list); | |
| 61 | 72 | } | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/num/service/IRuleNumService.java
| ... | ... | @@ -2,6 +2,9 @@ package com.ruoyi.num.service; |
| 2 | 2 | |
| 3 | 3 | import java.util.List; |
| 4 | 4 | import com.ruoyi.num.domain.RuleNum; |
| 5 | +import com.ruoyi.pojo.dto.RuleNumDto; | |
| 6 | +import com.ruoyi.pojo.vo.RuleNumTemplateVo; | |
| 7 | +import com.ruoyi.pojo.vo.RuleNumVo; | |
| 5 | 8 | |
| 6 | 9 | /** |
| 7 | 10 | * 班次管理Service接口 |
| ... | ... | @@ -58,4 +61,13 @@ public interface IRuleNumService |
| 58 | 61 | * @return 结果 |
| 59 | 62 | */ |
| 60 | 63 | public int deleteRuleNumById(Long id); |
| 64 | + | |
| 65 | + RuleNumVo getRuleNumBySettingId(Integer settingId); | |
| 66 | + | |
| 67 | + /** | |
| 68 | + * 查询班次 | |
| 69 | + * @param settingList | |
| 70 | + * @return | |
| 71 | + */ | |
| 72 | + List<RuleNumDto> selectRuleNumBySettingId(List<Integer> settingList); | |
| 61 | 73 | } | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/num/service/impl/RuleNumServiceImpl.java
| 1 | 1 | package com.ruoyi.num.service.impl; |
| 2 | 2 | |
| 3 | +import java.util.ArrayList; | |
| 3 | 4 | import java.util.List; |
| 5 | +import java.util.Map; | |
| 6 | +import java.util.Objects; | |
| 7 | +import java.util.stream.Collectors; | |
| 8 | +import java.util.stream.Stream; | |
| 9 | + | |
| 10 | +import cn.hutool.core.bean.BeanUtil; | |
| 4 | 11 | import com.ruoyi.common.utils.SecurityUtils; |
| 12 | +import com.ruoyi.pojo.dto.RuleNumDto; | |
| 13 | +import com.ruoyi.pojo.vo.RuleNumTemplateVo; | |
| 14 | +import com.ruoyi.pojo.vo.RuleNumVo; | |
| 5 | 15 | import org.springframework.beans.factory.annotation.Autowired; |
| 6 | 16 | import org.springframework.stereotype.Service; |
| 7 | 17 | import com.ruoyi.num.mapper.RuleNumMapper; |
| 8 | 18 | import com.ruoyi.num.domain.RuleNum; |
| 9 | 19 | import com.ruoyi.num.service.IRuleNumService; |
| 10 | 20 | |
| 21 | +import static com.ruoyi.common.RuleSchedulingProperties.*; | |
| 22 | + | |
| 11 | 23 | /** |
| 12 | 24 | * 班次管理Service业务层处理 |
| 13 | 25 | * |
| ... | ... | @@ -91,4 +103,58 @@ public class RuleNumServiceImpl implements IRuleNumService |
| 91 | 103 | { |
| 92 | 104 | return ruleNumMapper.deleteRuleNumById(id); |
| 93 | 105 | } |
| 106 | + | |
| 107 | + @Override | |
| 108 | + public RuleNumVo getRuleNumBySettingId(Integer settingId) { | |
| 109 | + RuleNum ruleNum = ruleNumMapper.listNumBySettingId(settingId); | |
| 110 | + RuleNumVo vo = new RuleNumVo(); | |
| 111 | + BeanUtil.copyProperties(ruleNum,vo); | |
| 112 | + // 当为固定规则时 | |
| 113 | + if (RULE_TYPE_FIXED.equals(ruleNum.getRuleType())) { | |
| 114 | + vo.setTemplateVos(handleFixedTemplate(ruleNum)); | |
| 115 | + } | |
| 116 | + // 处理按星期 | |
| 117 | + else { | |
| 118 | + vo.setTemplateVos(handleWeekTemplate(ruleNum)); | |
| 119 | + } | |
| 120 | + // 模板 | |
| 121 | + return vo; | |
| 122 | + } | |
| 123 | + | |
| 124 | + @Override | |
| 125 | + public List<RuleNumDto> selectRuleNumBySettingId(List<Integer> settingList) { | |
| 126 | + return ruleNumMapper.selectRuleNumBySettingId(settingList); | |
| 127 | + } | |
| 128 | + | |
| 129 | + private List<RuleNumTemplateVo> handleWeekTemplate(RuleNum ruleNum) { | |
| 130 | + String[] strings = ruleNum.getRuleWeek().split(","); | |
| 131 | + Map<Integer, Integer> weeks = Stream.of(strings).collect(Collectors.toMap(s -> Integer.parseInt(s), s -> Integer.parseInt(s))); | |
| 132 | + List<RuleNumTemplateVo> vos = new ArrayList<>(7); | |
| 133 | + for (int i = 1; i <= 7; i++) { | |
| 134 | + Integer integer = weeks.get(i); | |
| 135 | + if (Objects.isNull(integer)) { | |
| 136 | + vos.add(getRuleNumTemplateVo(i, false)); | |
| 137 | + } else { | |
| 138 | + vos.add(getRuleNumTemplateVo(integer, true)); | |
| 139 | + } | |
| 140 | + } | |
| 141 | + return vos; | |
| 142 | + } | |
| 143 | + | |
| 144 | + private RuleNumTemplateVo getRuleNumTemplateVo(Integer serialNumber, Boolean workFlag) { | |
| 145 | + RuleNumTemplateVo vo = new RuleNumTemplateVo(); | |
| 146 | + vo.setSerialNumber(serialNumber); | |
| 147 | + vo.setType(workFlag ? WORK_FLAG : FREE_FLAG); | |
| 148 | + return vo; | |
| 149 | + } | |
| 150 | + | |
| 151 | + | |
| 152 | + private List<RuleNumTemplateVo> handleFixedTemplate(RuleNum ruleNum) { | |
| 153 | + int countDay = ruleNum.getWorkDay() + ruleNum.getFreeDay(); | |
| 154 | + List<RuleNumTemplateVo> vos = new ArrayList<>(countDay); | |
| 155 | + for (int i = 1; i <= countDay; i++) { | |
| 156 | + vos.add(getRuleNumTemplateVo(i, i <= ruleNum.getWorkDay())); | |
| 157 | + } | |
| 158 | + return vos; | |
| 159 | + } | |
| 94 | 160 | } | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/pojo/dto/AttendanceDto.java
0 → 100644
| 1 | +package com.ruoyi.pojo.dto; | |
| 2 | + | |
| 3 | +import com.ruoyi.scheduling.domain.RuleScheduling; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +import java.util.Date; | |
| 7 | +import java.util.List; | |
| 8 | + | |
| 9 | +/** | |
| 10 | + * @author 20412 | |
| 11 | + */ | |
| 12 | +@Data | |
| 13 | +public class AttendanceDto { | |
| 14 | + private String name; | |
| 15 | + private String jobCode; | |
| 16 | + private List<RuleScheduling> ruleList; | |
| 17 | + private Integer settingId; | |
| 18 | + private Date startDate; | |
| 19 | + private String posts; | |
| 20 | +} | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/pojo/dto/DriverDto.java
0 → 100644
ruoyi-admin/src/main/java/com/ruoyi/pojo/dto/RuleNumDto.java
0 → 100644
ruoyi-admin/src/main/java/com/ruoyi/pojo/dto/RuleSchedulingDto.java
0 → 100644
ruoyi-admin/src/main/java/com/ruoyi/pojo/dto/SchedulingDto.java
0 → 100644
| 1 | +package com.ruoyi.pojo.dto; | |
| 2 | + | |
| 3 | +import com.ruoyi.domain.RuleSettingDriver; | |
| 4 | +import com.ruoyi.domain.RuleSettingScheduling; | |
| 5 | +import lombok.Data; | |
| 6 | + | |
| 7 | +import javax.validation.constraints.NotBlank; | |
| 8 | +import javax.validation.constraints.NotEmpty; | |
| 9 | +import javax.validation.constraints.NotNull; | |
| 10 | +import java.util.List; | |
| 11 | + | |
| 12 | +/** | |
| 13 | + * 修改排班设置表dto | |
| 14 | + * @author 20412 | |
| 15 | + */ | |
| 16 | +@Data | |
| 17 | +public class SchedulingDto { | |
| 18 | + | |
| 19 | + @NotNull(message = "设置表id不能为空") | |
| 20 | + private Integer id; | |
| 21 | + | |
| 22 | + @NotNull(message = "班次id不能为空") | |
| 23 | + private Integer ruleNumId; | |
| 24 | + | |
| 25 | + @NotBlank(message = "班次名称不能为空") | |
| 26 | + private String ruleDictName; | |
| 27 | + | |
| 28 | + @NotEmpty(message = "规则集合不能为空") | |
| 29 | + private List<RuleSettingScheduling> ruleSchedulingList; | |
| 30 | + | |
| 31 | + private List<RuleSettingDriver> peopleList; | |
| 32 | +} | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/pojo/dto/SchedulingSettingDto.java
0 → 100644
| 1 | +package com.ruoyi.pojo.dto; | |
| 2 | + | |
| 3 | +import com.ruoyi.domain.RuleSettingDriver; | |
| 4 | +import com.ruoyi.domain.RuleSettingScheduling; | |
| 5 | +import com.ruoyi.scheduling.domain.RuleScheduling; | |
| 6 | +import lombok.Data; | |
| 7 | + | |
| 8 | +import javax.validation.constraints.NotBlank; | |
| 9 | +import javax.validation.constraints.NotEmpty; | |
| 10 | +import javax.validation.constraints.NotNull; | |
| 11 | +import java.util.List; | |
| 12 | + | |
| 13 | +/** | |
| 14 | + * @author 20412 | |
| 15 | + */ | |
| 16 | +@Data | |
| 17 | +public class SchedulingSettingDto { | |
| 18 | + /** | |
| 19 | + * 班次 | |
| 20 | + */ | |
| 21 | + @NotNull | |
| 22 | + private Integer ruleNumId; | |
| 23 | + /** | |
| 24 | + * 班次名称 | |
| 25 | + */ | |
| 26 | + @NotBlank | |
| 27 | + private String ruleDictName; | |
| 28 | + /** | |
| 29 | + * 规则集合 | |
| 30 | + */ | |
| 31 | + @NotEmpty | |
| 32 | + private List<RuleSettingScheduling> ruleSchedulingList; | |
| 33 | + /** | |
| 34 | + * 绑定人员集合 | |
| 35 | + */ | |
| 36 | + private List<RuleSettingDriver> peopleList; | |
| 37 | +} | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/pojo/vo/PeopleResponseVo.java
| ... | ... | @@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel; |
| 4 | 4 | import io.swagger.annotations.ApiModelProperty; |
| 5 | 5 | import lombok.Data; |
| 6 | 6 | |
| 7 | +import java.util.Date; | |
| 8 | + | |
| 7 | 9 | /** |
| 8 | 10 | * @author 20412 |
| 9 | 11 | */ |
| ... | ... | @@ -18,4 +20,6 @@ public class PeopleResponseVo { |
| 18 | 20 | private String posts; |
| 19 | 21 | @ApiModelProperty("部门") |
| 20 | 22 | private String fleetName; |
| 23 | + @ApiModelProperty("开始时间") | |
| 24 | + private Date startDate; | |
| 21 | 25 | } | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/pojo/vo/RuleAttendanceMainRequestVo.java
0 → 100644
ruoyi-admin/src/main/java/com/ruoyi/pojo/vo/RuleNumTemplateVo.java
0 → 100644
| 1 | +package com.ruoyi.pojo.vo; | |
| 2 | + | |
| 3 | +import io.swagger.annotations.ApiModel; | |
| 4 | +import io.swagger.annotations.ApiModelProperty; | |
| 5 | +import lombok.Data; | |
| 6 | + | |
| 7 | +/** | |
| 8 | + * 班次模板 | |
| 9 | + * @author 20412 | |
| 10 | + */ | |
| 11 | +@Data | |
| 12 | +@ApiModel("班次模板") | |
| 13 | +public class RuleNumTemplateVo { | |
| 14 | + /** | |
| 15 | + * 休息还是上班 0 休息 1 上班 | |
| 16 | + */ | |
| 17 | + @ApiModelProperty("休息还是上班 (0 休息 1 上班)") | |
| 18 | + private Integer type; | |
| 19 | + | |
| 20 | + @ApiModelProperty("序号") | |
| 21 | + private Integer serialNumber; | |
| 22 | +} | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/pojo/vo/RuleNumVo.java
0 → 100644
| 1 | +package com.ruoyi.pojo.vo; | |
| 2 | + | |
| 3 | +import com.ruoyi.num.domain.RuleNum; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +import java.util.List; | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * @author 20412 | |
| 10 | + */ | |
| 11 | +@Data | |
| 12 | +public class RuleNumVo extends RuleNum { | |
| 13 | + /** | |
| 14 | + * 模板 | |
| 15 | + */ | |
| 16 | + private List<RuleNumTemplateVo> templateVos; | |
| 17 | +} | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/pojo/vo/SchedulingRequestVo.java
| ... | ... | @@ -12,15 +12,19 @@ import java.util.List; |
| 12 | 12 | @Data |
| 13 | 13 | @ApiModel("排班规则请求vo") |
| 14 | 14 | public class SchedulingRequestVo { |
| 15 | + /** | |
| 16 | + * 主键 | |
| 17 | + */ | |
| 15 | 18 | @ApiModelProperty("id") |
| 16 | 19 | private Long id; |
| 17 | - @ApiModelProperty("规则名字") | |
| 18 | - private String matchName; | |
| 20 | + /** | |
| 21 | + * 班次名称 | |
| 22 | + */ | |
| 19 | 23 | @ApiModelProperty("班次名称") |
| 20 | 24 | private String ruleDictName; |
| 21 | - @ApiModelProperty("班次类型") | |
| 22 | - private Integer ruleType; | |
| 23 | - | |
| 24 | - private Integer pageNum; | |
| 25 | - private Integer pageSize; | |
| 25 | + /** | |
| 26 | + * 工号 | |
| 27 | + */ | |
| 28 | + @ApiModelProperty("工号") | |
| 29 | + private String jobCode; | |
| 26 | 30 | } | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/pojo/vo/SchedulingResponseVo.java
| 1 | 1 | package com.ruoyi.pojo.vo; |
| 2 | 2 | |
| 3 | +import com.ruoyi.domain.RuleNumSetting; | |
| 3 | 4 | import io.swagger.annotations.ApiModelProperty; |
| 4 | 5 | import lombok.Data; |
| 5 | 6 | |
| ... | ... | @@ -9,10 +10,8 @@ import java.util.List; |
| 9 | 10 | * @author 20412 |
| 10 | 11 | */ |
| 11 | 12 | @Data |
| 12 | -public class SchedulingResponseVo { | |
| 13 | +public class SchedulingResponseVo extends RuleNumSetting { | |
| 13 | 14 | |
| 14 | - @ApiModelProperty("规则名字") | |
| 15 | - private String matchName; | |
| 16 | 15 | @ApiModelProperty("班次名称") |
| 17 | 16 | private String ruleDictName; |
| 18 | 17 | @ApiModelProperty("班次类型") | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/pojo/vo/UpdateAttendanceVo.java
0 → 100644
| 1 | +package com.ruoyi.pojo.vo; | |
| 2 | + | |
| 3 | +import com.ruoyi.scheduling.domain.RuleScheduling; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +import javax.validation.constraints.NotNull; | |
| 7 | +import java.util.List; | |
| 8 | + | |
| 9 | +/** | |
| 10 | + * @author 20412 | |
| 11 | + */ | |
| 12 | +@Data | |
| 13 | +public class UpdateAttendanceVo { | |
| 14 | + @NotNull | |
| 15 | + private Integer id; | |
| 16 | + @NotNull | |
| 17 | + private Integer ruleId; | |
| 18 | +} | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/scheduling/controller/RuleSchedulingController.java
| ... | ... | @@ -60,6 +60,17 @@ public class RuleSchedulingController extends BaseController |
| 60 | 60 | } |
| 61 | 61 | |
| 62 | 62 | /** |
| 63 | + * 查询排版规则列表 | |
| 64 | + */ | |
| 65 | + @PreAuthorize("@ss.hasPermi('scheduling:scheduling:list')") | |
| 66 | + @GetMapping("/list/scheduling/{settingId}") | |
| 67 | + public AjaxResult getRuleSchedulingListVoBySettingId(@PathVariable("settingId") Integer settingId) | |
| 68 | + { | |
| 69 | + return AjaxResult.success(ruleSchedulingService.selectRuleSchedulingListVoBySettingId(settingId)); | |
| 70 | + } | |
| 71 | + | |
| 72 | + | |
| 73 | + /** | |
| 63 | 74 | * 导出排版规则列表 |
| 64 | 75 | */ |
| 65 | 76 | @PreAuthorize("@ss.hasPermi('scheduling:scheduling:export')") | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/scheduling/mapper/RuleSchedulingMapper.java
| 1 | 1 | package com.ruoyi.scheduling.mapper; |
| 2 | 2 | |
| 3 | 3 | import java.util.List; |
| 4 | + | |
| 5 | +import com.ruoyi.pojo.dto.RuleSchedulingDto; | |
| 4 | 6 | import com.ruoyi.scheduling.domain.RuleScheduling; |
| 7 | +import org.apache.ibatis.annotations.Param; | |
| 5 | 8 | |
| 6 | 9 | /** |
| 7 | 10 | * 排版规则Mapper接口 |
| ... | ... | @@ -58,4 +61,13 @@ public interface RuleSchedulingMapper |
| 58 | 61 | * @return 结果 |
| 59 | 62 | */ |
| 60 | 63 | public int deleteRuleSchedulingByIds(Long[] ids); |
| 64 | + | |
| 65 | + /** | |
| 66 | + * 根据设置表id返回排班规则 | |
| 67 | + * @param settingId | |
| 68 | + * @return | |
| 69 | + */ | |
| 70 | + List<RuleScheduling> selectRuleSchedulingListVoBySettingId(@Param("settingId") Integer settingId); | |
| 71 | + | |
| 72 | + List<RuleSchedulingDto> selectRuleSchedulingListVoBySettingIds(List<Integer> list); | |
| 61 | 73 | } | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/scheduling/service/IRuleSchedulingService.java
| ... | ... | @@ -2,6 +2,7 @@ package com.ruoyi.scheduling.service; |
| 2 | 2 | |
| 3 | 3 | import java.util.List; |
| 4 | 4 | |
| 5 | +import com.ruoyi.pojo.dto.RuleSchedulingDto; | |
| 5 | 6 | import com.ruoyi.pojo.vo.RuleSchedulingResponseVo; |
| 6 | 7 | import com.ruoyi.pojo.vo.RuleSchedulingVo; |
| 7 | 8 | import com.ruoyi.scheduling.domain.RuleScheduling; |
| ... | ... | @@ -65,4 +66,8 @@ public interface IRuleSchedulingService |
| 65 | 66 | List<RuleSchedulingVo> selectRuleSchedulingListVo(RuleScheduling ruleScheduling); |
| 66 | 67 | |
| 67 | 68 | List<RuleSchedulingResponseVo> handleResponseRuleSchedulingList(List<RuleScheduling> list); |
| 69 | + | |
| 70 | + List<RuleSchedulingVo> selectRuleSchedulingListVoBySettingId(Integer settingId); | |
| 71 | + | |
| 72 | + List<RuleSchedulingDto> selectRuleSchedulingListVoBySettingIds(List<Integer> settingList); | |
| 68 | 73 | } | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/scheduling/service/impl/RuleSchedulingServiceImpl.java
| 1 | 1 | package com.ruoyi.scheduling.service.impl; |
| 2 | 2 | |
| 3 | 3 | import java.text.SimpleDateFormat; |
| 4 | +import java.util.ArrayList; | |
| 4 | 5 | import java.util.Date; |
| 5 | 6 | import java.util.List; |
| 6 | 7 | import java.util.stream.Collectors; |
| 7 | 8 | |
| 8 | 9 | import cn.hutool.core.collection.CollectionUtil; |
| 10 | +import com.ruoyi.pojo.dto.RuleSchedulingDto; | |
| 9 | 11 | import com.ruoyi.pojo.vo.RuleSchedulingResponseVo; |
| 10 | 12 | import com.ruoyi.pojo.vo.RuleSchedulingVo; |
| 11 | 13 | import org.springframework.beans.BeanUtils; |
| ... | ... | @@ -16,6 +18,7 @@ import com.ruoyi.scheduling.domain.RuleScheduling; |
| 16 | 18 | import com.ruoyi.scheduling.service.IRuleSchedulingService; |
| 17 | 19 | |
| 18 | 20 | import static com.ruoyi.common.RuleSchedulingProperties.*; |
| 21 | +import static com.ruoyi.common.WeekEnum.FREE; | |
| 19 | 22 | |
| 20 | 23 | /** |
| 21 | 24 | * 排版规则Service业务层处理 |
| ... | ... | @@ -58,9 +61,21 @@ public class RuleSchedulingServiceImpl implements IRuleSchedulingService { |
| 58 | 61 | */ |
| 59 | 62 | @Override |
| 60 | 63 | public int insertRuleScheduling(RuleScheduling ruleScheduling) { |
| 64 | + handleNewAddScheduling(ruleScheduling); | |
| 61 | 65 | return ruleSchedulingMapper.insertRuleScheduling(ruleScheduling); |
| 62 | 66 | } |
| 63 | 67 | |
| 68 | + private void handleNewAddScheduling(RuleScheduling ruleScheduling) { | |
| 69 | + // 如果没有分班则重置第一段后的规则 | |
| 70 | + if (NO_SEGMENTATION.equals(ruleScheduling.getSecondFlag())){ | |
| 71 | + ruleScheduling.setSecondSignDayTomorrow(null); | |
| 72 | + ruleScheduling.setSecondSignInWorkingRange(null); | |
| 73 | + ruleScheduling.setSecondWorkSignInTime(null); | |
| 74 | + ruleScheduling.setSecondQuittingSignInTime(null); | |
| 75 | + ruleScheduling.setSecondSignInQuittingRange(null); | |
| 76 | + } | |
| 77 | + } | |
| 78 | + | |
| 64 | 79 | /** |
| 65 | 80 | * 修改排版规则 |
| 66 | 81 | * |
| ... | ... | @@ -69,6 +84,7 @@ public class RuleSchedulingServiceImpl implements IRuleSchedulingService { |
| 69 | 84 | */ |
| 70 | 85 | @Override |
| 71 | 86 | public int updateRuleScheduling(RuleScheduling ruleScheduling) { |
| 87 | + handleNewAddScheduling(ruleScheduling); | |
| 72 | 88 | return ruleSchedulingMapper.updateRuleScheduling(ruleScheduling); |
| 73 | 89 | } |
| 74 | 90 | |
| ... | ... | @@ -103,16 +119,30 @@ public class RuleSchedulingServiceImpl implements IRuleSchedulingService { |
| 103 | 119 | @Override |
| 104 | 120 | public List<RuleSchedulingResponseVo> handleResponseRuleSchedulingList(List<RuleScheduling> list) { |
| 105 | 121 | return list.stream() |
| 106 | - .map(item ->{ | |
| 122 | + .map(item -> { | |
| 107 | 123 | RuleSchedulingResponseVo vo = new RuleSchedulingResponseVo(); |
| 108 | - BeanUtils.copyProperties(item,vo); | |
| 124 | + BeanUtils.copyProperties(item, vo); | |
| 109 | 125 | vo.setRangeTime(handleRuleSchedulingRangeTime(item)); |
| 110 | 126 | return vo; |
| 111 | 127 | }) |
| 112 | 128 | .collect(Collectors.toList()); |
| 113 | 129 | } |
| 114 | 130 | |
| 115 | - private List<RuleSchedulingVo> handleRuleScheduling(List<RuleScheduling> list) { | |
| 131 | + @Override | |
| 132 | + public List<RuleSchedulingVo> selectRuleSchedulingListVoBySettingId(Integer settingId) { | |
| 133 | + List<RuleScheduling> list = ruleSchedulingMapper.selectRuleSchedulingListVoBySettingId(settingId); | |
| 134 | + return handleRuleScheduling(list); | |
| 135 | + } | |
| 136 | + | |
| 137 | + @Override | |
| 138 | + public List<RuleSchedulingDto> selectRuleSchedulingListVoBySettingIds(List<Integer> settingList) { | |
| 139 | + if (CollectionUtil.isEmpty(settingList)){ | |
| 140 | + return new ArrayList<>(); | |
| 141 | + } | |
| 142 | + return ruleSchedulingMapper.selectRuleSchedulingListVoBySettingIds(settingList); | |
| 143 | + } | |
| 144 | + | |
| 145 | + public static List<RuleSchedulingVo> handleRuleScheduling(List<RuleScheduling> list) { | |
| 116 | 146 | if (CollectionUtil.isEmpty(list)) { |
| 117 | 147 | return null; |
| 118 | 148 | } |
| ... | ... | @@ -124,6 +154,9 @@ public class RuleSchedulingServiceImpl implements IRuleSchedulingService { |
| 124 | 154 | RuleSchedulingVo vo = new RuleSchedulingVo(); |
| 125 | 155 | vo.setRuleName(item.getRuleName()); |
| 126 | 156 | vo.setId(item.getId()); |
| 157 | + if (item.getRuleName().equals(FREE.getDescription())){ | |
| 158 | + return vo; | |
| 159 | + } | |
| 127 | 160 | vo.setRangeTime(handleRuleSchedulingRangeTime(item)); |
| 128 | 161 | return vo; |
| 129 | 162 | }) |
| ... | ... | @@ -131,7 +164,7 @@ public class RuleSchedulingServiceImpl implements IRuleSchedulingService { |
| 131 | 164 | |
| 132 | 165 | } |
| 133 | 166 | |
| 134 | - private String handleRuleSchedulingRangeTime(RuleScheduling item) { | |
| 167 | + public static String handleRuleSchedulingRangeTime(RuleScheduling item) { | |
| 135 | 168 | // 处理存在分段的数据 |
| 136 | 169 | if (HAVE_SEGMENTATION.equals(item.getSecondFlag())) { |
| 137 | 170 | return handleSegmentation(item); |
| ... | ... | @@ -142,7 +175,7 @@ public class RuleSchedulingServiceImpl implements IRuleSchedulingService { |
| 142 | 175 | } |
| 143 | 176 | } |
| 144 | 177 | |
| 145 | - private String handleNoSegmentation(RuleScheduling item) { | |
| 178 | + private static String handleNoSegmentation(RuleScheduling item) { | |
| 146 | 179 | // 处理不隔天的情况 |
| 147 | 180 | if (TOMORROW_NO.equals(item.getFirstSignInDayTomorrow())) { |
| 148 | 181 | return transformTimeType(item.getFirstWorkSignInTime()) + TOMORROW_NO_STRING + transformTimeType(item.getFirstQuittingSignInTime()); |
| ... | ... | @@ -153,14 +186,14 @@ public class RuleSchedulingServiceImpl implements IRuleSchedulingService { |
| 153 | 186 | } |
| 154 | 187 | } |
| 155 | 188 | |
| 156 | - private String handleSegmentation(RuleScheduling item) { | |
| 189 | + private static String handleSegmentation(RuleScheduling item) { | |
| 157 | 190 | // 隔天 |
| 158 | 191 | String firstRangeTimeString = handleNoSegmentation(item); |
| 159 | 192 | String secondRangeTimeString = handleHaveSegmentation(item); |
| 160 | 193 | return firstRangeTimeString + ";" + secondRangeTimeString; |
| 161 | 194 | } |
| 162 | 195 | |
| 163 | - private String handleHaveSegmentation(RuleScheduling item) { | |
| 196 | + private static String handleHaveSegmentation(RuleScheduling item) { | |
| 164 | 197 | // 处理不隔天的情况 |
| 165 | 198 | if (TOMORROW_NO.equals(item.getSecondSignDayTomorrow())) { |
| 166 | 199 | return transformTimeType(item.getSecondWorkSignInTime()) + TOMORROW_NO_STRING + transformTimeType(item.getSecondQuittingSignInTime()); |
| ... | ... | @@ -171,7 +204,7 @@ public class RuleSchedulingServiceImpl implements IRuleSchedulingService { |
| 171 | 204 | } |
| 172 | 205 | } |
| 173 | 206 | |
| 174 | - private String transformTimeType(Date time) { | |
| 207 | + private static String transformTimeType(Date time) { | |
| 175 | 208 | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); |
| 176 | 209 | return simpleDateFormat.format(time); |
| 177 | 210 | } | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/service/AttendanceService.java
| 1 | 1 | package com.ruoyi.service; |
| 2 | 2 | |
| 3 | -import com.ruoyi.pojo.vo.PeopleResponseVo; | |
| 4 | -import com.ruoyi.pojo.vo.SchedulingRequestVo; | |
| 3 | +import com.ruoyi.domain.RuleAttendanceMain; | |
| 4 | +import com.ruoyi.pojo.dto.SchedulingDto; | |
| 5 | +import com.ruoyi.pojo.dto.SchedulingSettingDto; | |
| 6 | +import com.ruoyi.pojo.vo.*; | |
| 5 | 7 | |
| 6 | 8 | import java.util.List; |
| 7 | 9 | |
| ... | ... | @@ -16,5 +18,39 @@ public interface AttendanceService { |
| 16 | 18 | */ |
| 17 | 19 | List<PeopleResponseVo> getDriverInfo(Long id); |
| 18 | 20 | |
| 19 | - List<SchedulingRequestVo> getSchedulingList(SchedulingRequestVo vo); | |
| 21 | + /** | |
| 22 | + * 获取排班列表 | |
| 23 | + * @param vo | |
| 24 | + * @return | |
| 25 | + */ | |
| 26 | + List<SchedulingResponseVo> getSchedulingList(SchedulingRequestVo vo); | |
| 27 | + | |
| 28 | + /** | |
| 29 | + * 获取班次模板 | |
| 30 | + * @param id | |
| 31 | + * @return | |
| 32 | + */ | |
| 33 | + List<RuleNumTemplateVo> getTemplate(Long id); | |
| 34 | + | |
| 35 | + /** | |
| 36 | + * 新增排班 | |
| 37 | + * @param dto | |
| 38 | + */ | |
| 39 | + void saveSchedulingSetting(SchedulingSettingDto dto); | |
| 40 | + | |
| 41 | + /** | |
| 42 | + * 修改排班 | |
| 43 | + * @param dto | |
| 44 | + */ | |
| 45 | + void updateSchedulingSetting(SchedulingDto dto); | |
| 46 | + | |
| 47 | + /** | |
| 48 | + * 删除排班 | |
| 49 | + * @param settingId | |
| 50 | + */ | |
| 51 | + void deleteSchedulingSetting(Integer settingId); | |
| 52 | + | |
| 53 | + List<RuleAttendanceMain> queryAttendanceMain(RuleAttendanceMainRequestVo vo); | |
| 54 | + | |
| 55 | + void updateAttendance(UpdateAttendanceVo vo); | |
| 20 | 56 | } | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/service/RuleAttendanceMainService.java
0 → 100644
| 1 | +package com.ruoyi.service; | |
| 2 | + | |
| 3 | +import com.baomidou.mybatisplus.extension.service.IService; | |
| 4 | +import com.ruoyi.domain.RuleAttendanceMain; | |
| 5 | + | |
| 6 | +/** | |
| 7 | +* @author 20412 | |
| 8 | +* @description 针对表【rule_attendance_main(考勤表)】的数据库操作Service | |
| 9 | +* @createDate 2023-09-03 12:15:39 | |
| 10 | +*/ | |
| 11 | +public interface RuleAttendanceMainService extends IService<RuleAttendanceMain> { | |
| 12 | + | |
| 13 | +} | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/service/RuleNumSettingService.java
0 → 100644
| 1 | +package com.ruoyi.service; | |
| 2 | + | |
| 3 | +import com.baomidou.mybatisplus.extension.service.IService; | |
| 4 | +import com.ruoyi.domain.RuleNumSetting; | |
| 5 | +import com.ruoyi.pojo.dto.RuleNumDto; | |
| 6 | +import com.ruoyi.pojo.vo.SchedulingRequestVo; | |
| 7 | +import com.ruoyi.pojo.vo.SchedulingResponseVo; | |
| 8 | + | |
| 9 | +import java.util.List; | |
| 10 | + | |
| 11 | +/** | |
| 12 | +* @author 20412 | |
| 13 | +* @description 针对表【rule_num_setting(排班设置表)】的数据库操作Service | |
| 14 | +* @createDate 2023-08-31 09:31:28 | |
| 15 | +*/ | |
| 16 | +public interface RuleNumSettingService extends IService<RuleNumSetting> { | |
| 17 | + | |
| 18 | + /** | |
| 19 | + * 查询排班设置表 | |
| 20 | + * @param vo | |
| 21 | + * @return | |
| 22 | + */ | |
| 23 | + List<SchedulingResponseVo> getSchedulingList(SchedulingRequestVo vo); | |
| 24 | + | |
| 25 | + /** | |
| 26 | + * 生成考情表 | |
| 27 | + */ | |
| 28 | + void createAttendance(); | |
| 29 | + | |
| 30 | + /** | |
| 31 | + * 获取班次根据设置表 | |
| 32 | + * @param settingList | |
| 33 | + * @return | |
| 34 | + */ | |
| 35 | + List<RuleNumDto> selectRuleNumBySettingId(List<Integer> settingList); | |
| 36 | +} | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/service/RuleSettingDriverService.java
0 → 100644
| 1 | +package com.ruoyi.service; | |
| 2 | + | |
| 3 | +import com.baomidou.mybatisplus.extension.service.IService; | |
| 4 | +import com.ruoyi.domain.RuleSettingDriver; | |
| 5 | +import com.ruoyi.driver.domain.Driver; | |
| 6 | +import com.ruoyi.pojo.dto.DriverDto; | |
| 7 | + | |
| 8 | +import java.util.List; | |
| 9 | + | |
| 10 | +/** | |
| 11 | +* @author 20412 | |
| 12 | +* @description 针对表【rule_setting_driver(人员信息表与排班设置绑定表)】的数据库操作Service | |
| 13 | +* @createDate 2023-08-31 14:35:06 | |
| 14 | +*/ | |
| 15 | +public interface RuleSettingDriverService extends IService<RuleSettingDriver> { | |
| 16 | + | |
| 17 | + List<DriverDto> queryDriverListBySettingId(List<Integer> settingIdList); | |
| 18 | +} | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/service/RuleSettingSchedulingService.java
0 → 100644
| 1 | +package com.ruoyi.service; | |
| 2 | + | |
| 3 | + | |
| 4 | +import com.baomidou.mybatisplus.extension.service.IService; | |
| 5 | +import com.ruoyi.domain.RuleSettingScheduling; | |
| 6 | +import com.ruoyi.pojo.dto.RuleSchedulingDto; | |
| 7 | +import com.ruoyi.scheduling.domain.RuleScheduling; | |
| 8 | + | |
| 9 | +import java.util.List; | |
| 10 | + | |
| 11 | +/** | |
| 12 | +* @author 20412 | |
| 13 | +* @description 针对表【rule_setting_scheduling(考勤规则表)】的数据库操作Service | |
| 14 | +* @createDate 2023-08-31 14:35:06 | |
| 15 | +*/ | |
| 16 | +public interface RuleSettingSchedulingService extends IService<RuleSettingScheduling> { | |
| 17 | + | |
| 18 | + List<RuleSchedulingDto> querySchedulingListBySettingId(List<Integer> settingIdList); | |
| 19 | +} | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/service/ThreadJobService.java
| ... | ... | @@ -39,6 +39,7 @@ import sun.misc.BASE64Decoder; |
| 39 | 39 | |
| 40 | 40 | import javax.annotation.Resource; |
| 41 | 41 | import java.io.*; |
| 42 | +import java.time.LocalDate; | |
| 42 | 43 | import java.util.*; |
| 43 | 44 | import java.util.stream.Collectors; |
| 44 | 45 | |
| ... | ... | @@ -317,10 +318,20 @@ public class ThreadJobService { |
| 317 | 318 | * 保存当天的调度信息 |
| 318 | 319 | * |
| 319 | 320 | * @param originSchedulingMap |
| 321 | + * @param timeOut | |
| 320 | 322 | */ |
| 321 | 323 | @Async |
| 322 | 324 | @Transactional(rollbackFor = {Exception.class}) |
| 323 | - public void asyncComputedScheduling(Map<String, List<ResponseSchedulingDto>> originSchedulingMap) { | |
| 325 | + public void asyncComputedScheduling(Map<String, List<ResponseSchedulingDto>> originSchedulingMap, String timeOut) { | |
| 326 | + if (StringUtils.isNotEmpty(timeOut)){ | |
| 327 | + LocalDate date = LocalDate.now(); | |
| 328 | + Date date2 = ConstDateUtil.dateAddition(date.toString(), timeOut); | |
| 329 | + Date date1 = new Date(); | |
| 330 | + // 如果当前日期小于设定时间就不获取固定排班 | |
| 331 | + if (date1.compareTo(date2) < 0){ | |
| 332 | + return; | |
| 333 | + } | |
| 334 | + } | |
| 324 | 335 | //查询当天是否保存过考情表 如果不存在则保存 |
| 325 | 336 | Map<String, List<DriverScheduling>> dto = nowSchedulingCache.getCacheScheduling(ConstDateUtil.formatDate(new Date())); |
| 326 | 337 | if (!CollectionUtil.isEmpty(dto) || originSchedulingMap.size() == 0) { | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/service/impl/AttendanceServiceImpl.java
| 1 | 1 | package com.ruoyi.service.impl; |
| 2 | 2 | |
| 3 | -import com.github.pagehelper.PageHelper; | |
| 4 | -import com.github.pagehelper.PageInfo; | |
| 3 | +import cn.hutool.core.collection.CollectionUtil; | |
| 4 | +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |
| 5 | +import com.ruoyi.common.utils.DateUtils; | |
| 5 | 6 | import com.ruoyi.common.utils.PageUtils; |
| 7 | +import com.ruoyi.common.utils.SecurityUtils; | |
| 8 | +import com.ruoyi.domain.RuleAttendanceMain; | |
| 9 | +import com.ruoyi.domain.RuleNumSetting; | |
| 10 | +import com.ruoyi.domain.RuleSettingDriver; | |
| 11 | +import com.ruoyi.domain.RuleSettingScheduling; | |
| 6 | 12 | import com.ruoyi.driver.mapper.DriverMapper; |
| 7 | -import com.ruoyi.pojo.vo.PeopleResponseVo; | |
| 8 | -import com.ruoyi.pojo.vo.SchedulingRequestVo; | |
| 9 | -import com.ruoyi.service.AttendanceService; | |
| 13 | +import com.ruoyi.num.domain.RuleNum; | |
| 14 | +import com.ruoyi.num.service.IRuleNumService; | |
| 15 | +import com.ruoyi.pojo.dto.DriverDto; | |
| 16 | +import com.ruoyi.pojo.dto.RuleSchedulingDto; | |
| 17 | +import com.ruoyi.pojo.dto.SchedulingDto; | |
| 18 | +import com.ruoyi.pojo.dto.SchedulingSettingDto; | |
| 19 | +import com.ruoyi.pojo.vo.*; | |
| 20 | +import com.ruoyi.scheduling.domain.RuleScheduling; | |
| 21 | +import com.ruoyi.scheduling.service.IRuleSchedulingService; | |
| 22 | +import com.ruoyi.scheduling.service.impl.RuleSchedulingServiceImpl; | |
| 23 | +import com.ruoyi.service.*; | |
| 24 | +import com.ruoyi.utils.ConstDateUtil; | |
| 25 | +import org.springframework.beans.BeanUtils; | |
| 10 | 26 | import org.springframework.beans.factory.annotation.Autowired; |
| 27 | +import org.springframework.security.core.parameters.P; | |
| 11 | 28 | import org.springframework.stereotype.Service; |
| 29 | +import org.springframework.transaction.annotation.Transactional; | |
| 12 | 30 | |
| 13 | -import java.util.List; | |
| 31 | +import java.time.LocalDate; | |
| 32 | +import java.util.*; | |
| 33 | +import java.util.stream.Collectors; | |
| 34 | +import java.util.stream.Stream; | |
| 35 | + | |
| 36 | +import static com.ruoyi.common.RuleSchedulingProperties.*; | |
| 37 | +import static com.ruoyi.common.WeekEnum.FREE; | |
| 14 | 38 | |
| 15 | 39 | /** |
| 16 | 40 | * @author 20412 |
| ... | ... | @@ -21,12 +45,28 @@ public class AttendanceServiceImpl implements AttendanceService { |
| 21 | 45 | @Autowired |
| 22 | 46 | private DriverMapper driverMapper; |
| 23 | 47 | |
| 48 | + @Autowired | |
| 49 | + private IRuleSchedulingService ruleSchedulingService; | |
| 50 | + | |
| 51 | + @Autowired | |
| 52 | + private RuleNumSettingService ruleNumSettingService; | |
| 53 | + | |
| 54 | + @Autowired | |
| 55 | + private RuleSettingDriverService settingDriverService; | |
| 56 | + | |
| 57 | + @Autowired | |
| 58 | + private RuleSettingSchedulingService settingSchedulingService; | |
| 59 | + | |
| 60 | + @Autowired | |
| 61 | + private RuleAttendanceMainService attendanceMainService; | |
| 62 | + | |
| 63 | + @Autowired | |
| 64 | + private IRuleNumService ruleNumService; | |
| 24 | 65 | |
| 25 | 66 | |
| 26 | 67 | @Override |
| 27 | 68 | public List<PeopleResponseVo> getDriverInfo(Long id) { |
| 28 | - List<PeopleResponseVo> vos ; | |
| 29 | - // TODO 待完成 | |
| 69 | + List<PeopleResponseVo> vos; | |
| 30 | 70 | if (id != null) { |
| 31 | 71 | vos = driverMapper.queryAttendanceInfoById(id); |
| 32 | 72 | } else { |
| ... | ... | @@ -37,9 +77,236 @@ public class AttendanceServiceImpl implements AttendanceService { |
| 37 | 77 | } |
| 38 | 78 | |
| 39 | 79 | @Override |
| 40 | - public List<SchedulingRequestVo> getSchedulingList(SchedulingRequestVo vo) { | |
| 80 | + public List<SchedulingResponseVo> getSchedulingList(SchedulingRequestVo vo) { | |
| 81 | + // 查询排班设置表 | |
| 82 | + PageUtils.startPage(); | |
| 83 | + List<SchedulingResponseVo> vos = ruleNumSettingService.getSchedulingList(vo); | |
| 84 | + if (CollectionUtil.isEmpty(vos)) { | |
| 85 | + return vos; | |
| 86 | + } | |
| 87 | + List<Integer> settingIdList = vos.stream().map(SchedulingResponseVo::getId).collect(Collectors.toList()); | |
| 88 | + // 查询对应的规则 | |
| 89 | + List<DriverDto> driverList = settingDriverService.queryDriverListBySettingId(settingIdList); | |
| 90 | + List<RuleSchedulingDto> schedulingList = settingSchedulingService.querySchedulingListBySettingId(settingIdList); | |
| 91 | + handleSchedulingResponse(vos, driverList, schedulingList); | |
| 92 | + return vos; | |
| 93 | + } | |
| 94 | + | |
| 95 | + @Override | |
| 96 | + public List<RuleNumTemplateVo> getTemplate(Long id) { | |
| 97 | + RuleNum ruleNum = ruleNumService.selectRuleNumById(id); | |
| 98 | + if (Objects.isNull(ruleNum)) { | |
| 99 | + return null; | |
| 100 | + } | |
| 101 | + // 当为固定规则时 | |
| 102 | + if (RULE_TYPE_FIXED.equals(ruleNum.getRuleType())) { | |
| 103 | + return handleFixedTemplate(ruleNum); | |
| 104 | + } | |
| 105 | + // 处理按星期 | |
| 106 | + else { | |
| 107 | + return handleWeekTemplate(ruleNum); | |
| 108 | + } | |
| 109 | + } | |
| 110 | + | |
| 111 | + @Override | |
| 112 | + @Transactional(rollbackFor = Exception.class) | |
| 113 | + public void saveSchedulingSetting(SchedulingSettingDto dto) { | |
| 114 | + RuleNumSetting setting = getRuleNumSetting(dto); | |
| 115 | + ruleNumSettingService.save(setting); | |
| 116 | + List<RuleSettingScheduling> schedulingList = getSettingSchedulingList(dto, setting.getId()); | |
| 117 | + settingSchedulingService.saveBatch(schedulingList); | |
| 118 | + if (CollectionUtil.isNotEmpty(dto.getPeopleList())) { | |
| 119 | + List<RuleSettingDriver> peopleList = getSettingDriverList(dto, setting.getId()); | |
| 120 | + settingDriverService.remove(new QueryWrapper<RuleSettingDriver>().lambda().in(RuleSettingDriver::getJobCode, peopleList.stream().map(RuleSettingDriver::getJobCode).collect(Collectors.toList()))); | |
| 121 | + settingDriverService.saveBatch(peopleList); | |
| 122 | + } | |
| 123 | + } | |
| 124 | + | |
| 125 | + @Override | |
| 126 | + @Transactional(rollbackFor = Exception.class) | |
| 127 | + public void updateSchedulingSetting(SchedulingDto dto) { | |
| 128 | + RuleNumSetting setting = new RuleNumSetting(); | |
| 129 | + getRumSettingByDto(dto, setting); | |
| 130 | + ruleNumSettingService.updateById(setting); | |
| 131 | + // 更新规则 | |
| 132 | + settingSchedulingService.remove(new QueryWrapper<RuleSettingScheduling>().lambda().eq(RuleSettingScheduling::getSettingId, dto.getId())); | |
| 133 | + settingSchedulingService.saveBatch(dto.getRuleSchedulingList()); | |
| 134 | + // 更新人员 | |
| 135 | + settingDriverService.remove(new QueryWrapper<RuleSettingDriver>() | |
| 136 | + .lambda() | |
| 137 | + .eq(RuleSettingDriver::getSettingId, dto.getId())); | |
| 138 | + settingDriverService.saveBatch(dto.getPeopleList()); | |
| 139 | + } | |
| 140 | + | |
| 141 | + @Override | |
| 142 | + public void deleteSchedulingSetting(Integer settingId) { | |
| 143 | + ruleNumSettingService.removeById(settingId); | |
| 144 | + // 更新规则 | |
| 145 | + settingSchedulingService.remove(new QueryWrapper<RuleSettingScheduling>().lambda().eq(RuleSettingScheduling::getSettingId, settingId)); | |
| 146 | + // 更新人员 | |
| 147 | + settingDriverService.remove(new QueryWrapper<RuleSettingDriver>() | |
| 148 | + .lambda() | |
| 149 | + .eq(RuleSettingDriver::getSettingId, settingId)); | |
| 150 | + } | |
| 151 | + | |
| 152 | + @Override | |
| 153 | + public List<RuleAttendanceMain> queryAttendanceMain(RuleAttendanceMainRequestVo vo) { | |
| 41 | 154 | PageUtils.startPage(); |
| 42 | -// ruleAttendanceMapper.getSchedulingList(vo); | |
| 43 | - return null; | |
| 155 | + List<RuleAttendanceMain> list = attendanceMainService.list(new QueryWrapper<RuleAttendanceMain>() | |
| 156 | + .lambda() | |
| 157 | + .eq(RuleAttendanceMain::getSchedulingDate, vo.getDate())); | |
| 158 | + return list; | |
| 159 | + } | |
| 160 | + | |
| 161 | + @Override | |
| 162 | + public void updateAttendance(UpdateAttendanceVo vo) { | |
| 163 | + RuleAttendanceMain main = attendanceMainService.getById(vo.getId()); | |
| 164 | + RuleScheduling ruleScheduling = ruleSchedulingService.selectRuleSchedulingById(vo.getId().longValue()); | |
| 165 | + BeanUtils.copyProperties(ruleScheduling,main); | |
| 166 | + main.setFirstWorkSignInTime(ConstDateUtil.dateAddition(LocalDate.now().toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getFirstWorkSignInTime()))); | |
| 167 | + if (HAVE_SEGMENTATION.equals(ruleScheduling.getSecondFlag())){ | |
| 168 | + main.setFirstQuittingSignInTime(ConstDateUtil.dateAddition(LocalDate.now().toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getFirstQuittingSignInTime()))); | |
| 169 | + main.setSecondWorkSignInTime(ConstDateUtil.dateAddition(LocalDate.now().toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getSecondWorkSignInTime()))); | |
| 170 | + // 处理隔天 | |
| 171 | + if (TOMORROW_YES.equals(ruleScheduling.getFirstSignInDayTomorrow())){ | |
| 172 | + main.setSecondQuittingSignInTime( ConstDateUtil.dateAddition(LocalDate.now().plusDays(1).toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getFirstQuittingSignInTime()))); | |
| 173 | + } | |
| 174 | + }else { | |
| 175 | + | |
| 176 | + // 处理隔天 | |
| 177 | + if (TOMORROW_YES.equals(ruleScheduling.getFirstSignInDayTomorrow())){ | |
| 178 | + main.setFirstQuittingSignInTime( ConstDateUtil.dateAddition(LocalDate.now().plusDays(1).toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getFirstQuittingSignInTime()))); | |
| 179 | + } | |
| 180 | + } | |
| 181 | + } | |
| 182 | + | |
| 183 | + private static void getRumSettingByDto(SchedulingDto dto, RuleNumSetting setting) { | |
| 184 | + setting.setId(dto.getId()); | |
| 185 | + setting.setUpdateTime(DateUtils.getNowDate()); | |
| 186 | + setting.setUpdateBy(SecurityUtils.getUsername()); | |
| 187 | + setting.setRuleNumId(dto.getRuleNumId()); | |
| 188 | + setting.setRuleDictName(dto.getRuleDictName()); | |
| 189 | + } | |
| 190 | + | |
| 191 | + private List<RuleSettingDriver> getSettingDriverList(SchedulingSettingDto dto, Integer id) { | |
| 192 | + return dto | |
| 193 | + .getPeopleList() | |
| 194 | + .stream() | |
| 195 | + .map(item -> { | |
| 196 | + RuleSettingDriver driver = new RuleSettingDriver(); | |
| 197 | + driver.setSettingId(id); | |
| 198 | + driver.setJobCode(item.getJobCode()); | |
| 199 | + if (item.getStartDate() == null) { | |
| 200 | + throw new RuntimeException("非法开始时间"); | |
| 201 | + } | |
| 202 | + driver.setStartDate(item.getStartDate()); | |
| 203 | + return driver; | |
| 204 | + }) | |
| 205 | + .collect(Collectors.toList()); | |
| 206 | + } | |
| 207 | + | |
| 208 | + private List<RuleSettingScheduling> getSettingSchedulingList(SchedulingSettingDto dto, Integer id) { | |
| 209 | + // TODO 规则校验 | |
| 210 | + return dto.getRuleSchedulingList().stream().peek(item -> { | |
| 211 | + item.setSettingId(id); | |
| 212 | + }).collect(Collectors.toList()); | |
| 213 | + } | |
| 214 | + | |
| 215 | + private static RuleNumSetting getRuleNumSetting(SchedulingSettingDto dto) { | |
| 216 | + RuleNumSetting setting = new RuleNumSetting(); | |
| 217 | + setting.setCreateTime(DateUtils.getNowDate()); | |
| 218 | + setting.setUpdateTime(DateUtils.getNowDate()); | |
| 219 | + String username = SecurityUtils.getUsername(); | |
| 220 | + setting.setCreateBy(username); | |
| 221 | + setting.setUpdateBy(username); | |
| 222 | + setting.setRuleDictName(dto.getRuleDictName()); | |
| 223 | + setting.setRuleNumId(dto.getRuleNumId()); | |
| 224 | + return setting; | |
| 225 | + } | |
| 226 | + | |
| 227 | + private List<RuleNumTemplateVo> handleWeekTemplate(RuleNum ruleNum) { | |
| 228 | + String[] strings = ruleNum.getRuleWeek().split(","); | |
| 229 | + Map<Integer, Integer> weeks = Stream.of(strings).collect(Collectors.toMap(s -> Integer.parseInt(s), s -> Integer.parseInt(s))); | |
| 230 | + List<RuleNumTemplateVo> vos = new ArrayList<>(7); | |
| 231 | + for (int i = 1; i <= 7; i++) { | |
| 232 | + Integer integer = weeks.get(i); | |
| 233 | + if (Objects.isNull(integer)) { | |
| 234 | + vos.add(getRuleNumTemplateVo(i, false)); | |
| 235 | + } else { | |
| 236 | + vos.add(getRuleNumTemplateVo(integer, true)); | |
| 237 | + } | |
| 238 | + } | |
| 239 | + return vos; | |
| 240 | + } | |
| 241 | + | |
| 242 | + private List<RuleNumTemplateVo> handleFixedTemplate(RuleNum ruleNum) { | |
| 243 | + int countDay = ruleNum.getWorkDay() + ruleNum.getFreeDay(); | |
| 244 | + List<RuleNumTemplateVo> vos = new ArrayList<>(countDay); | |
| 245 | + for (int i = 1; i <= countDay; i++) { | |
| 246 | + vos.add(getRuleNumTemplateVo(i, i <= ruleNum.getWorkDay())); | |
| 247 | + } | |
| 248 | + return vos; | |
| 249 | + } | |
| 250 | + | |
| 251 | + private RuleNumTemplateVo getRuleNumTemplateVo(Integer serialNumber, Boolean workFlag) { | |
| 252 | + RuleNumTemplateVo vo = new RuleNumTemplateVo(); | |
| 253 | + vo.setSerialNumber(serialNumber); | |
| 254 | + vo.setType(workFlag ? WORK_FLAG : FREE_FLAG); | |
| 255 | + return vo; | |
| 256 | + } | |
| 257 | + | |
| 258 | + private void handleSchedulingResponse(List<SchedulingResponseVo> vos, List<DriverDto> driverList, List<RuleSchedulingDto> schedulingList) { | |
| 259 | + Map<Integer, List<DriverDto>> driverMap = transFromMapByDriver(driverList); | |
| 260 | + Map<Integer, List<RuleScheduling>> schedulingMap = transFromMapByScheduling(schedulingList); | |
| 261 | + for (SchedulingResponseVo vo : vos) { | |
| 262 | + vo.setPeopleList(handlePeopleList(vo.getId(), driverMap.get(vo.getId()))); | |
| 263 | + vo.setRuleList(handleRuleList(vo.getId(), schedulingMap.get(vo.getId()))); | |
| 264 | + } | |
| 265 | + } | |
| 266 | + | |
| 267 | + private Map<Integer, List<RuleScheduling>> transFromMapByScheduling(List<RuleSchedulingDto> schedulingList) { | |
| 268 | + Map<Integer, List<RuleScheduling>> map = new HashMap<>(16); | |
| 269 | + for (RuleSchedulingDto scheduling : schedulingList) { | |
| 270 | + List<RuleScheduling> list = map.get(scheduling.getSettingId()); | |
| 271 | + if (CollectionUtil.isEmpty(list)) { | |
| 272 | + map.put(scheduling.getSettingId(), new ArrayList<>(Arrays.asList(scheduling))); | |
| 273 | + } else { | |
| 274 | + list.add(scheduling); | |
| 275 | + } | |
| 276 | + } | |
| 277 | + return map; | |
| 278 | + } | |
| 279 | + | |
| 280 | + private Map<Integer, List<DriverDto>> transFromMapByDriver(List<DriverDto> driverList) { | |
| 281 | + Map<Integer, List<DriverDto>> map = new HashMap<>(16); | |
| 282 | + for (DriverDto driver : driverList) { | |
| 283 | + List<DriverDto> list = map.get(driver.getSettingId()); | |
| 284 | + if (CollectionUtil.isEmpty(list)) { | |
| 285 | + map.put(driver.getSettingId(), new ArrayList<>(Arrays.asList(driver))); | |
| 286 | + } else { | |
| 287 | + list.add(driver); | |
| 288 | + } | |
| 289 | + } | |
| 290 | + return map; | |
| 291 | + } | |
| 292 | + | |
| 293 | + private List<String> handleRuleList(Integer id, List<RuleScheduling> schedulingList) { | |
| 294 | + List<RuleSchedulingVo> list = RuleSchedulingServiceImpl.handleRuleScheduling(schedulingList); | |
| 295 | + if (CollectionUtil.isEmpty(list)) { | |
| 296 | + return new ArrayList<>(); | |
| 297 | + } | |
| 298 | + return list.stream().map(item -> { | |
| 299 | + if (item.getRuleName().equals(FREE.getDescription())) { | |
| 300 | + return item.getRuleName(); | |
| 301 | + } | |
| 302 | + return item.getRuleName() + "(" + item.getRangeTime() + ")"; | |
| 303 | + }).collect(Collectors.toList()); | |
| 304 | + } | |
| 305 | + | |
| 306 | + private List<String> handlePeopleList(Integer id, List<DriverDto> driverList) { | |
| 307 | + if (CollectionUtil.isEmpty(driverList)) { | |
| 308 | + return new ArrayList<>(); | |
| 309 | + } | |
| 310 | + return driverList.stream().map(item -> item.getPersonnelName() + "(" + item.getJobCode() + ")").collect(Collectors.toList()); | |
| 44 | 311 | } |
| 45 | 312 | } | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/service/impl/RuleAttendanceMainServiceImpl.java
0 → 100644
| 1 | +package com.ruoyi.service.impl; | |
| 2 | + | |
| 3 | +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |
| 4 | +import com.ruoyi.domain.RuleAttendanceMain; | |
| 5 | +import com.ruoyi.mapper.RuleAttendanceMainMapper; | |
| 6 | +import com.ruoyi.service.RuleAttendanceMainService; | |
| 7 | +import org.springframework.stereotype.Service; | |
| 8 | + | |
| 9 | +/** | |
| 10 | +* @author 20412 | |
| 11 | +* @description 针对表【rule_attendance_main(考勤表)】的数据库操作Service实现 | |
| 12 | +* @createDate 2023-09-03 12:15:39 | |
| 13 | +*/ | |
| 14 | +@Service | |
| 15 | +public class RuleAttendanceMainServiceImpl extends ServiceImpl<RuleAttendanceMainMapper, RuleAttendanceMain> | |
| 16 | + implements RuleAttendanceMainService { | |
| 17 | + | |
| 18 | +} | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/service/impl/RuleNumSettingServiceImpl.java
0 → 100644
| 1 | +package com.ruoyi.service.impl; | |
| 2 | + | |
| 3 | +import cn.hutool.core.collection.CollectionUtil; | |
| 4 | +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |
| 5 | +import com.ruoyi.domain.RuleAttendanceMain; | |
| 6 | +import com.ruoyi.domain.RuleNumSetting; | |
| 7 | +import com.ruoyi.mapper.RuleNumSettingMapper; | |
| 8 | +import com.ruoyi.num.service.IRuleNumService; | |
| 9 | +import com.ruoyi.pojo.dto.AttendanceDto; | |
| 10 | +import com.ruoyi.pojo.dto.RuleNumDto; | |
| 11 | +import com.ruoyi.pojo.dto.RuleSchedulingDto; | |
| 12 | +import com.ruoyi.pojo.vo.SchedulingRequestVo; | |
| 13 | +import com.ruoyi.pojo.vo.SchedulingResponseVo; | |
| 14 | +import com.ruoyi.scheduling.service.IRuleSchedulingService; | |
| 15 | +import com.ruoyi.service.RuleAttendanceMainService; | |
| 16 | +import com.ruoyi.service.RuleNumSettingService; | |
| 17 | +import com.ruoyi.utils.ConstDateUtil; | |
| 18 | +import org.springframework.beans.BeanUtils; | |
| 19 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 20 | +import org.springframework.stereotype.Service; | |
| 21 | + | |
| 22 | +import java.time.LocalDate; | |
| 23 | +import java.time.ZoneId; | |
| 24 | +import java.time.temporal.ChronoUnit; | |
| 25 | +import java.util.*; | |
| 26 | +import java.util.stream.Collectors; | |
| 27 | + | |
| 28 | +import static com.ruoyi.common.RuleSchedulingProperties.*; | |
| 29 | + | |
| 30 | +/** | |
| 31 | + * @author 20412 | |
| 32 | + * @description 针对表【rule_num_setting(排班设置表)】的数据库操作Service实现 | |
| 33 | + * @createDate 2023-08-31 09:31:28 | |
| 34 | + */ | |
| 35 | +@Service | |
| 36 | +public class RuleNumSettingServiceImpl extends ServiceImpl<RuleNumSettingMapper, RuleNumSetting> | |
| 37 | + implements RuleNumSettingService { | |
| 38 | + | |
| 39 | + @Autowired | |
| 40 | + private IRuleSchedulingService schedulingService; | |
| 41 | + | |
| 42 | + @Autowired | |
| 43 | + private RuleNumSettingService ruleNumSettingService; | |
| 44 | + | |
| 45 | + @Autowired | |
| 46 | + private IRuleNumService ruleNumService; | |
| 47 | + | |
| 48 | + @Autowired | |
| 49 | + private RuleAttendanceMainService attendanceMainService; | |
| 50 | + | |
| 51 | + @Override | |
| 52 | + public List<SchedulingResponseVo> getSchedulingList(SchedulingRequestVo vo) { | |
| 53 | + return baseMapper.getSchedulingList(vo); | |
| 54 | + } | |
| 55 | + | |
| 56 | + @Override | |
| 57 | + public void createAttendance() { | |
| 58 | + | |
| 59 | + // 临时表根据工号生成一个月的模板,固定下来,每天生成一次,如果当前月内的工号已经生成了一次排班,则跳过生成 | |
| 60 | + // 用户可以修改临时排班表的数据,只能修改未来一个月内的数据 过一天后把数据存储到考勤表, | |
| 61 | + // 获取需要生成的人员工号 | |
| 62 | + List<AttendanceDto> peopleList = baseMapper.getPeopleList(); | |
| 63 | + List<Integer> settingList = peopleList.stream().map(AttendanceDto::getSettingId).distinct().collect(Collectors.toList()); | |
| 64 | + // 获取规则集合 | |
| 65 | + List<RuleSchedulingDto> ruleList = schedulingService.selectRuleSchedulingListVoBySettingIds(settingList); | |
| 66 | + // 获取班次 | |
| 67 | + List<RuleNumDto> ruleNumDtoList = ruleNumSettingService.selectRuleNumBySettingId(settingList); | |
| 68 | + // 处理规则 | |
| 69 | + List<RuleAttendanceMain> attendanceMains = handleAttendanceMain(peopleList, ruleList, ruleNumDtoList); | |
| 70 | + attendanceMainService.saveBatch(attendanceMains); | |
| 71 | + } | |
| 72 | + | |
| 73 | + private List<RuleAttendanceMain> handleAttendanceMain(List<AttendanceDto> peopleList, List<RuleSchedulingDto> ruleList, List<RuleNumDto> ruleNumDtoList) { | |
| 74 | + if (CollectionUtil.isEmpty(peopleList)) { | |
| 75 | + return null; | |
| 76 | + } | |
| 77 | + Map<Integer, List<AttendanceDto>> peopleMap = transformMapByPeople(peopleList); | |
| 78 | + Map<Integer, RuleNumDto> ruleNumMap = transformMapByRuleNum(ruleNumDtoList); | |
| 79 | + Map<Integer, List<RuleSchedulingDto>> ruleMap = transformMapByRule(ruleList); | |
| 80 | + List<RuleAttendanceMain> ruleAttendanceMainList = new ArrayList<>(); | |
| 81 | + List<LocalDate> dateList = ConstDateUtil.getDateSetFromTheCurrentDayToTheEndOfTheMonth(); | |
| 82 | + for (Map.Entry<Integer, List<AttendanceDto>> entry : peopleMap.entrySet()) { | |
| 83 | + Integer settingId = entry.getKey(); | |
| 84 | + List<AttendanceDto> attendanceDtoList = entry.getValue(); | |
| 85 | + RuleNumDto dto = ruleNumMap.get(settingId); | |
| 86 | + List<RuleAttendanceMain> mainList = new ArrayList<>(entry.getValue().size() * dateList.size()); | |
| 87 | + for (AttendanceDto attendanceDto : attendanceDtoList) { | |
| 88 | + for (LocalDate date : dateList) { | |
| 89 | + // 处理固定规则翻班 | |
| 90 | + if (RULE_TYPE_FIXED.equals(dto.getRuleType())) { | |
| 91 | + handleFixed(date, mainList, ruleMap.get(settingId), attendanceDto,dto.getRuleDictName()); | |
| 92 | + } | |
| 93 | + // 处理星期翻班 | |
| 94 | + else { | |
| 95 | + handleWeek(date, mainList, ruleMap.get(settingId), attendanceDto,dto.getRuleDictName()); | |
| 96 | + } | |
| 97 | + } | |
| 98 | + } | |
| 99 | + ruleAttendanceMainList.addAll(mainList); | |
| 100 | + } | |
| 101 | + return ruleAttendanceMainList; | |
| 102 | + } | |
| 103 | + | |
| 104 | + private void handleWeek(LocalDate date, List<RuleAttendanceMain> mainList, List<RuleSchedulingDto> ruleSchedulingDtoList, AttendanceDto attendanceDto, String ruleDictName) { | |
| 105 | + RuleAttendanceMain main = new RuleAttendanceMain(); | |
| 106 | + main.setSchedulingDate(Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant())); | |
| 107 | + main.setPosts(attendanceDto.getPosts()); | |
| 108 | + main.setRuleDictName(ruleDictName); | |
| 109 | + RuleSchedulingDto dto = null; | |
| 110 | + dto = getRuleByWeek(main,ruleSchedulingDtoList, date,attendanceDto.getStartDate()); | |
| 111 | + BeanUtils.copyProperties(dto, main); | |
| 112 | + main.setName(attendanceDto.getName()); | |
| 113 | + main.setJobCode(attendanceDto.getJobCode()); | |
| 114 | + handleSegmentationByDate(date, main, dto); | |
| 115 | + mainList.add(main); | |
| 116 | + } | |
| 117 | + | |
| 118 | + private void handleSegmentationByDate(LocalDate date, RuleAttendanceMain main, RuleSchedulingDto dto) { | |
| 119 | + main.setFirstWorkSignInTime(ConstDateUtil.dateAddition(date.toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getFirstWorkSignInTime()))); | |
| 120 | + // 不存在分段 | |
| 121 | + if (NO_SEGMENTATION.equals(dto.getSecondFlag())) { | |
| 122 | + if (TOMORROW_YES.equals(dto.getFirstSignInDayTomorrow())) { | |
| 123 | + main.setFirstQuittingSignInTime(handleTimeTomorrowByRule(date, main.getFirstQuittingSignInTime())); | |
| 124 | + } else { | |
| 125 | + main.setFirstQuittingSignInTime(ConstDateUtil.dateAddition(date.toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getFirstQuittingSignInTime()))); | |
| 126 | + } | |
| 127 | + } | |
| 128 | + // 存在分段 | |
| 129 | + else { | |
| 130 | + main.setSecondWorkSignInTime(ConstDateUtil.dateAddition(date.toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getSecondWorkSignInTime()))); | |
| 131 | + if (TOMORROW_YES.equals(dto.getFirstSignInDayTomorrow())) { | |
| 132 | + main.setSecondQuittingSignInTime(handleTimeTomorrowByRule(date, main.getSecondQuittingSignInTime())); | |
| 133 | + } else { | |
| 134 | + main.setSecondWorkSignInTime(ConstDateUtil.dateAddition(date.toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getSecondQuittingSignInTime()))); | |
| 135 | + } | |
| 136 | + } | |
| 137 | + } | |
| 138 | + | |
| 139 | + private static RuleSchedulingDto getRuleByWeek(RuleAttendanceMain main, List<RuleSchedulingDto> ruleSchedulingDtoList, LocalDate nowDate, Date startDate) { | |
| 140 | + RuleSchedulingDto dto = null; | |
| 141 | + switch (nowDate.getDayOfWeek().toString()) { | |
| 142 | + case "MONDAY": | |
| 143 | + dto = ruleSchedulingDtoList.get(0); | |
| 144 | + break; | |
| 145 | + case "TUESDAY": | |
| 146 | + dto = ruleSchedulingDtoList.get(1); | |
| 147 | + break; | |
| 148 | + case "WEDNESDAY": | |
| 149 | + dto = ruleSchedulingDtoList.get(2); | |
| 150 | + break; | |
| 151 | + case "THURSDAY": | |
| 152 | + dto = ruleSchedulingDtoList.get(3); | |
| 153 | + break; | |
| 154 | + case "FRIDAY": | |
| 155 | + dto = ruleSchedulingDtoList.get(4); | |
| 156 | + break; | |
| 157 | + case "SATURDAY": | |
| 158 | + dto = ruleSchedulingDtoList.get(5); | |
| 159 | + break; | |
| 160 | + case "SUNDAY": | |
| 161 | + dto = ruleSchedulingDtoList.get(6); | |
| 162 | + break; | |
| 163 | + } | |
| 164 | + LocalDate start = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); | |
| 165 | + int daysDifference = new Long(ChronoUnit.DAYS.between(start, nowDate)).intValue(); | |
| 166 | + if (daysDifference < 0) { | |
| 167 | + return getFreeRuleSchedulingDto(startDate); | |
| 168 | + } | |
| 169 | + main.setWorkFlag(dto.getId() == 0 ? FREE_FLAG : WORK_FLAG); | |
| 170 | + return dto; | |
| 171 | + } | |
| 172 | + | |
| 173 | + private void handleFixed(LocalDate nowDate, List<RuleAttendanceMain> mainList, List<RuleSchedulingDto> ruleSchedulingDtoList, AttendanceDto attendanceDto, String ruleDictName) { | |
| 174 | + RuleAttendanceMain main = new RuleAttendanceMain(); | |
| 175 | + main.setPosts(attendanceDto.getPosts()); | |
| 176 | + main.setRuleDictName(ruleDictName); | |
| 177 | + main.setSchedulingDate(Date.from(nowDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); | |
| 178 | + Date startDate = attendanceDto.getStartDate(); | |
| 179 | + // 匹配当天应设置的规则 | |
| 180 | + RuleSchedulingDto dto = getNowRuleByFixed(nowDate, startDate, ruleSchedulingDtoList); | |
| 181 | + main.setWorkFlag(dto.getId() == 0 ? FREE_FLAG : WORK_FLAG); | |
| 182 | + BeanUtils.copyProperties(dto, main); | |
| 183 | + main.setName(attendanceDto.getName()); | |
| 184 | + main.setJobCode(attendanceDto.getJobCode()); | |
| 185 | + // 处理是否分段 | |
| 186 | + handleSegmentationByDate(nowDate, main, dto); | |
| 187 | + mainList.add(main); | |
| 188 | + } | |
| 189 | + | |
| 190 | + | |
| 191 | + private RuleSchedulingDto getNowRuleByFixed(LocalDate nowDate, Date startDate, List<RuleSchedulingDto> ruleSchedulingDtoList) { | |
| 192 | + LocalDate start = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); | |
| 193 | + int daysDifference = new Long(ChronoUnit.DAYS.between(start, nowDate)).intValue(); | |
| 194 | + if (daysDifference < 0) { | |
| 195 | + return getFreeRuleSchedulingDto(startDate); | |
| 196 | + } | |
| 197 | + int length = ruleSchedulingDtoList.size(); | |
| 198 | + return ruleSchedulingDtoList.get(daysDifference % length); | |
| 199 | + } | |
| 200 | + | |
| 201 | + private static RuleSchedulingDto getFreeRuleSchedulingDto(Date startDate) { | |
| 202 | + RuleSchedulingDto dto = new RuleSchedulingDto(); | |
| 203 | + dto.setId(0L); | |
| 204 | + dto.setRuleName("休息"); | |
| 205 | + dto.setWorkingHourPlan(WORK_HOUR_PLAN_NORMAL); | |
| 206 | + dto.setWorkingHourType(WORK_HOUR_TYPE_ELASTIC); | |
| 207 | + dto.setFirstQuittingSignInTime(startDate); | |
| 208 | + dto.setFirstWorkSignInTime(startDate); | |
| 209 | + dto.setSecondFlag(NO_SEGMENTATION); | |
| 210 | + dto.setFirstSignInQuittingRange(0); | |
| 211 | + dto.setFirstSignInWorkingRange(0); | |
| 212 | + dto.setSignInTimeOutRange(0); | |
| 213 | + return dto; | |
| 214 | + } | |
| 215 | + | |
| 216 | + | |
| 217 | + private Date handleTimeTomorrowByRule(LocalDate date, Date time) { | |
| 218 | + // 隔天日期需要加1 | |
| 219 | + return ConstDateUtil.dateAddition(date.plusDays(1).toString(), ConstDateUtil.formatDate("HH:mm:ss", time)); | |
| 220 | + } | |
| 221 | + | |
| 222 | + | |
| 223 | + private Map<Integer, RuleNumDto> transformMapByRuleNum(List<RuleNumDto> ruleNumDtoList) { | |
| 224 | + Map<Integer, RuleNumDto> map = new HashMap<>(16); | |
| 225 | + for (RuleNumDto ruleNumDto : ruleNumDtoList) { | |
| 226 | + map.put(ruleNumDto.getSettingId(), ruleNumDto); | |
| 227 | + } | |
| 228 | + return map; | |
| 229 | + } | |
| 230 | + | |
| 231 | + private Map<Integer, List<RuleSchedulingDto>> transformMapByRule(List<RuleSchedulingDto> ruleList) { | |
| 232 | + Map<Integer, List<RuleSchedulingDto>> map = new HashMap<>(16); | |
| 233 | + for (RuleSchedulingDto dto : ruleList) { | |
| 234 | + List<RuleSchedulingDto> dtoList = map.get(dto.getSettingId()); | |
| 235 | + if (CollectionUtil.isEmpty(dtoList)) { | |
| 236 | + map.put(dto.getSettingId(), new ArrayList<>(Arrays.asList(dto))); | |
| 237 | + } else { | |
| 238 | + dtoList.add(dto); | |
| 239 | + } | |
| 240 | + } | |
| 241 | + for (Map.Entry<Integer, List<RuleSchedulingDto>> entry : map.entrySet()) { | |
| 242 | + entry.getValue().sort(Comparator.comparing(RuleSchedulingDto::getSort)); | |
| 243 | + } | |
| 244 | + return map; | |
| 245 | + } | |
| 246 | + | |
| 247 | + private Map<Integer, List<AttendanceDto>> transformMapByPeople(List<AttendanceDto> peopleList) { | |
| 248 | + Map<Integer, List<AttendanceDto>> map = new HashMap<>(16); | |
| 249 | + for (AttendanceDto dto : peopleList) { | |
| 250 | + List<AttendanceDto> dtoList = map.get(dto.getSettingId()); | |
| 251 | + if (CollectionUtil.isEmpty(dtoList)) { | |
| 252 | + map.put(dto.getSettingId(), new ArrayList<>(Arrays.asList(dto))); | |
| 253 | + } else { | |
| 254 | + dtoList.add(dto); | |
| 255 | + } | |
| 256 | + } | |
| 257 | + return map; | |
| 258 | + } | |
| 259 | + | |
| 260 | + @Override | |
| 261 | + public List<RuleNumDto> selectRuleNumBySettingId(List<Integer> settingList) { | |
| 262 | + if (CollectionUtil.isEmpty(settingList)) { | |
| 263 | + return new ArrayList<>(); | |
| 264 | + } | |
| 265 | + return ruleNumService.selectRuleNumBySettingId(settingList); | |
| 266 | + } | |
| 267 | + | |
| 268 | + | |
| 269 | +} | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/service/impl/RuleSettingDriverServiceImpl.java
0 → 100644
| 1 | +package com.ruoyi.service.impl; | |
| 2 | + | |
| 3 | +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |
| 4 | +import com.ruoyi.domain.RuleSettingDriver; | |
| 5 | +import com.ruoyi.driver.domain.Driver; | |
| 6 | +import com.ruoyi.mapper.RuleSettingDriverMapper; | |
| 7 | +import com.ruoyi.pojo.dto.DriverDto; | |
| 8 | +import com.ruoyi.service.RuleSettingDriverService; | |
| 9 | +import org.springframework.stereotype.Service; | |
| 10 | + | |
| 11 | +import java.util.List; | |
| 12 | + | |
| 13 | +/** | |
| 14 | +* @author 20412 | |
| 15 | +* @description 针对表【rule_setting_driver(人员信息表与排班设置绑定表)】的数据库操作Service实现 | |
| 16 | +* @createDate 2023-08-31 14:35:06 | |
| 17 | +*/ | |
| 18 | +@Service | |
| 19 | +public class RuleSettingDriverServiceImpl extends ServiceImpl<RuleSettingDriverMapper, RuleSettingDriver> | |
| 20 | + implements RuleSettingDriverService { | |
| 21 | + | |
| 22 | + @Override | |
| 23 | + public List<DriverDto> queryDriverListBySettingId(List<Integer> settingIdList) { | |
| 24 | + return getBaseMapper().queryDriverListBySettingId(settingIdList); | |
| 25 | + } | |
| 26 | +} | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/service/impl/RuleSettingSchedulingServiceImpl.java
0 → 100644
| 1 | +package com.ruoyi.service.impl; | |
| 2 | + | |
| 3 | +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |
| 4 | +import com.ruoyi.domain.RuleSettingScheduling; | |
| 5 | +import com.ruoyi.mapper.RuleSettingSchedulingMapper; | |
| 6 | +import com.ruoyi.pojo.dto.RuleSchedulingDto; | |
| 7 | +import com.ruoyi.scheduling.domain.RuleScheduling; | |
| 8 | +import com.ruoyi.scheduling.mapper.RuleSchedulingMapper; | |
| 9 | +import com.ruoyi.service.RuleSettingSchedulingService; | |
| 10 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 11 | +import org.springframework.stereotype.Service; | |
| 12 | + | |
| 13 | +import java.util.ArrayList; | |
| 14 | +import java.util.List; | |
| 15 | + | |
| 16 | +/** | |
| 17 | +* @author 20412 | |
| 18 | +* @description 针对表【rule_setting_scheduling(考勤规则表)】的数据库操作Service实现 | |
| 19 | +* @createDate 2023-08-31 14:35:06 | |
| 20 | +*/ | |
| 21 | +@Service | |
| 22 | +public class RuleSettingSchedulingServiceImpl extends ServiceImpl<RuleSettingSchedulingMapper, RuleSettingScheduling> | |
| 23 | + implements RuleSettingSchedulingService { | |
| 24 | + | |
| 25 | + | |
| 26 | + @Override | |
| 27 | + public List<RuleSchedulingDto> querySchedulingListBySettingId(List<Integer> settingIdList) { | |
| 28 | + return getBaseMapper().querySchedulingListBySettingId(settingIdList); | |
| 29 | + } | |
| 30 | +} | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/utils/ConstDateUtil.java
| 1 | 1 | package com.ruoyi.utils; |
| 2 | 2 | |
| 3 | 3 | import java.text.SimpleDateFormat; |
| 4 | -import java.time.Instant; | |
| 5 | -import java.time.LocalDateTime; | |
| 6 | -import java.time.ZoneId; | |
| 4 | +import java.time.*; | |
| 5 | +import java.time.format.DateTimeFormatter; | |
| 6 | +import java.util.ArrayList; | |
| 7 | 7 | import java.util.Calendar; |
| 8 | 8 | import java.util.Date; |
| 9 | +import java.util.List; | |
| 9 | 10 | |
| 10 | 11 | public class ConstDateUtil { |
| 11 | 12 | public static String formatDate(String pattern){ |
| 12 | 13 | SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); |
| 13 | 14 | return simpleDateFormat.format(new Date()); |
| 14 | 15 | } |
| 16 | + | |
| 15 | 17 | public static String formatDate(String pattern,Date date){ |
| 16 | 18 | SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); |
| 17 | 19 | return simpleDateFormat.format(date); |
| ... | ... | @@ -25,6 +27,15 @@ public class ConstDateUtil { |
| 25 | 27 | return simpleDateFormat.format(date); |
| 26 | 28 | } |
| 27 | 29 | |
| 30 | + public static Date dateAddition(String dateString,String timeString){ | |
| 31 | + LocalDate date = LocalDate.parse(dateString); | |
| 32 | + LocalTime time = LocalTime.parse(timeString); | |
| 33 | + | |
| 34 | + // 将日期和时间相加 | |
| 35 | + LocalDateTime dateTime = date.atTime(time); | |
| 36 | + | |
| 37 | + return Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant()); | |
| 38 | + } | |
| 28 | 39 | |
| 29 | 40 | public static Date getTheSpecifiedNumberOfDaysOfTime(Integer amount) { |
| 30 | 41 | // 获取当前日期时间 |
| ... | ... | @@ -42,5 +53,29 @@ public class ConstDateUtil { |
| 42 | 53 | return localDateTime; |
| 43 | 54 | } |
| 44 | 55 | |
| 56 | + public static List<LocalDate> getDateSetFromTheCurrentDayToTheEndOfTheMonth(){ | |
| 57 | + LocalDate today = LocalDate.now(); | |
| 58 | + int year = today.getYear(); | |
| 59 | + int month = today.getMonthValue(); | |
| 60 | + | |
| 61 | + // 获取本月的最后一天 | |
| 62 | + LocalDate endDay; | |
| 63 | + if (month == 12) { | |
| 64 | + endDay = LocalDate.of(year, month, 31); | |
| 65 | + } else { | |
| 66 | + endDay = LocalDate.of(year, month + 1, 1).minusDays(1); | |
| 67 | + } | |
| 68 | + | |
| 69 | + // 生成日期列表 | |
| 70 | + List<LocalDate> dateList = new ArrayList<>(); | |
| 71 | + LocalDate currentDay = today; | |
| 72 | + while (!currentDay.isAfter(endDay)) { | |
| 73 | + dateList.add(currentDay); | |
| 74 | + currentDay = currentDay.plusDays(1); | |
| 75 | + } | |
| 76 | + | |
| 77 | + return dateList; | |
| 78 | + } | |
| 79 | + | |
| 45 | 80 | |
| 46 | 81 | } | ... | ... |
ruoyi-admin/src/main/resources/mapper/RuleAttendanceMainMapper.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | +<!DOCTYPE mapper | |
| 3 | + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |
| 4 | + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |
| 5 | +<mapper namespace="com.ruoyi.mapper.RuleAttendanceMainMapper"> | |
| 6 | + | |
| 7 | + <resultMap id="BaseResultMap" type="com.ruoyi.domain.RuleAttendanceMain"> | |
| 8 | + <id property="id" column="id" jdbcType="INTEGER"/> | |
| 9 | + <result property="name" column="name" jdbcType="VARCHAR"/> | |
| 10 | + <result property="jobCode" column="job_code" jdbcType="VARCHAR"/> | |
| 11 | + <result property="workingHourPlan" column="working_hour_plan" jdbcType="INTEGER"/> | |
| 12 | + <result property="workingHourType" column="working_hour_type" jdbcType="TINYINT"/> | |
| 13 | + <result property="firstWorkSignInTime" column="first_work_sign_in_time" jdbcType="TIMESTAMP"/> | |
| 14 | + <result property="firstSignInWorkingRange" column="first_sign_in_working_range" jdbcType="INTEGER"/> | |
| 15 | + <result property="firstQuittingSignInTime" column="first_quitting_sign_in_time" jdbcType="TIMESTAMP"/> | |
| 16 | + <result property="firstSignInQuittingRange" column="first_sign_in_quitting_range" jdbcType="INTEGER"/> | |
| 17 | + <result property="signInTimeOutRange" column="sign_in_time_out_range" jdbcType="INTEGER"/> | |
| 18 | + <result property="secondWorkSignInTime" column="second_work_sign_in_time" jdbcType="TIMESTAMP"/> | |
| 19 | + <result property="secondSignInWorkingRange" column="second_sign_in_working_range" jdbcType="INTEGER"/> | |
| 20 | + <result property="secondQuittingSignInTime" column="second_quitting_sign_in_time" jdbcType="TIMESTAMP"/> | |
| 21 | + <result property="secondSignInQuittingRange" column="second_sign_in_quitting_range" jdbcType="INTEGER"/> | |
| 22 | + <result property="schedulingDate" column="scheduling_date" jdbcType="DATE"/> | |
| 23 | + <result property="posts" column="posts" jdbcType="VARCHAR"/> | |
| 24 | + <result property="ruleDictName" column="rule_dict_name" jdbcType="VARCHAR"/> | |
| 25 | + <result property="workFlag" column="work_flag" jdbcType="INTEGER"/> | |
| 26 | + </resultMap> | |
| 27 | + | |
| 28 | + <sql id="Base_Column_List"> | |
| 29 | + id,name,job_code, | |
| 30 | + working_hour_plan,working_hour_type,first_work_sign_in_time, | |
| 31 | + first_sign_in_working_range,first_quitting_sign_in_time,first_sign_in_quitting_range, | |
| 32 | + sign_in_time_out_range,second_work_sign_in_time,second_sign_in_working_range, | |
| 33 | + second_quitting_sign_in_time,second_sign_in_quitting_range,scheduling_date,work_flag | |
| 34 | + </sql> | |
| 35 | +</mapper> | ... | ... |
ruoyi-admin/src/main/resources/mapper/RuleNumSettingMapper.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | +<!DOCTYPE mapper | |
| 3 | + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |
| 4 | + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |
| 5 | +<mapper namespace="com.ruoyi.mapper.RuleNumSettingMapper"> | |
| 6 | + | |
| 7 | + <resultMap id="BaseResultMap" type="com.ruoyi.domain.RuleNumSetting"> | |
| 8 | + <id property="id" column="id" jdbcType="INTEGER"/> | |
| 9 | + <result property="ruleNumId" column="rule_num_id" jdbcType="INTEGER"/> | |
| 10 | + <result property="ruleDictName" column="rule_dict_name" jdbcType="VARCHAR"/> | |
| 11 | + <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> | |
| 12 | + <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> | |
| 13 | + <result property="remark" column="remark" jdbcType="VARCHAR"/> | |
| 14 | + <result property="createBy" column="create_by" jdbcType="VARCHAR"/> | |
| 15 | + <result property="updateBy" column="update_by" jdbcType="VARCHAR"/> | |
| 16 | + </resultMap> | |
| 17 | + | |
| 18 | + <resultMap id="AttendanceResult" type="com.ruoyi.pojo.dto.AttendanceDto"> | |
| 19 | + <result property="jobCode" column="job_code" jdbcType="VARCHAR"/> | |
| 20 | + <result property="name" column="personnel_name" jdbcType="VARCHAR"/> | |
| 21 | + <result property="posts" column="posts" jdbcType="VARCHAR"/> | |
| 22 | + <result property="name" column="personnel_name" jdbcType="VARCHAR"/> | |
| 23 | + <result property="settingId" column="setting_id" jdbcType="INTEGER"/> | |
| 24 | + <result property="startDate" column="start_date" jdbcType="DATE"/> | |
| 25 | +<!-- <collection property="ruleList" ofType="com.ruoyi.scheduling.domain.RuleScheduling">--> | |
| 26 | +<!-- <result column="working_hour_plan" property="workingHourPlan" jdbcType="INTEGER"/>--> | |
| 27 | +<!-- <result column="working_hour_type" property="workingHourType" jdbcType="INTEGER"/>--> | |
| 28 | +<!-- <result column="first_work_sign_in_time" property="firstWorkSignInTime" jdbcType="DATE"/>--> | |
| 29 | +<!-- <result column="first_sign_in_working_range" property="firstSignInWorkingRange" jdbcType="INTEGER"/>--> | |
| 30 | +<!-- <result column="first_quitting_sign_in_time" property="firstQuittingSignInTime" jdbcType="DATE"/>--> | |
| 31 | +<!-- <result column="first_sign_in_day_tomorrow" property="firstSignInDayTomorrow" jdbcType="INTEGER"/>--> | |
| 32 | +<!-- <result column="first_sign_in_quitting_range" property="firstSignInQuittingRange" jdbcType="INTEGER"/>--> | |
| 33 | +<!-- <result column="sign_in_time_out_range" property="signInTimeOutRange" jdbcType="INTEGER"/>--> | |
| 34 | +<!-- <result column="second_flag" property="secondFlag" jdbcType="INTEGER"/>--> | |
| 35 | +<!-- <result column="second_work_sign_in_time" property="secondWorkSignInTime" jdbcType="DATE"/>--> | |
| 36 | +<!-- <result column="second_sign_in_working_range" property="secondSignInWorkingRange" jdbcType="INTEGER"/>--> | |
| 37 | +<!-- <result column="second_quitting_sign_in_time" property="secondQuittingSignInTime" jdbcType="DATE"/>--> | |
| 38 | +<!-- <result column="second_sign_in_quitting_range" property="secondSignInQuittingRange" jdbcType="INTEGER"/>--> | |
| 39 | +<!-- <result column="second_sign_day_tomorrow" property="secondSignDayTomorrow" jdbcType="INTEGER"/>--> | |
| 40 | +<!-- </collection>--> | |
| 41 | + </resultMap> | |
| 42 | + | |
| 43 | + <sql id="Base_Column_List"> | |
| 44 | + id,rule_num_id,match_name, | |
| 45 | + create_time,update_time,remart, | |
| 46 | + create_by,update_by | |
| 47 | + </sql> | |
| 48 | + <select id="getSchedulingList" resultType="com.ruoyi.pojo.vo.SchedulingResponseVo"> | |
| 49 | + SELECT | |
| 50 | + setting.*, | |
| 51 | + num.rule_dict_name, | |
| 52 | + num.rule_type | |
| 53 | + FROM | |
| 54 | + `rule_num_setting` setting,rule_num num | |
| 55 | + WHERE setting.rule_num_id = num.id | |
| 56 | + <if test="jobCode != null and jobCode != ''"> | |
| 57 | + and setting.id = ( | |
| 58 | + SELECT | |
| 59 | + setting_id | |
| 60 | + FROM | |
| 61 | + rule_setting_driver | |
| 62 | + WHERE | |
| 63 | + job_code = #{jocCode} | |
| 64 | + LIMIT 1) | |
| 65 | + </if> | |
| 66 | + <if test="ruleDictName != null and ruleDictName != ''"> | |
| 67 | + and rule_dict_name = #{ruleDictName} | |
| 68 | + </if> | |
| 69 | + </select> | |
| 70 | + <select id="getPeopleList" resultType="com.ruoyi.pojo.dto.AttendanceDto" resultMap="AttendanceResult"> | |
| 71 | + SELECT | |
| 72 | + driver.job_code, | |
| 73 | + driver.personnel_name, | |
| 74 | + driver.posts, | |
| 75 | + rule_setting_driver.setting_id, | |
| 76 | + rule_setting_driver.start_date | |
| 77 | + FROM | |
| 78 | + driver, | |
| 79 | + rule_setting_driver | |
| 80 | + WHERE | |
| 81 | + driver.job_code = rule_setting_driver.job_code | |
| 82 | + AND rule_setting_driver.job_code NOT IN ( | |
| 83 | + SELECT DISTINCT | |
| 84 | + job_code | |
| 85 | + FROM | |
| 86 | + rule_attendance_main | |
| 87 | + WHERE | |
| 88 | + DATE_FORMAT( scheduling_date, '%y-%m' ) = DATE_FORMAT( NOW(), '%y-%m' ) | |
| 89 | + ) | |
| 90 | + </select> | |
| 91 | + | |
| 92 | +</mapper> | ... | ... |
ruoyi-admin/src/main/resources/mapper/RuleSettingDriverMapper.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | +<!DOCTYPE mapper | |
| 3 | + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |
| 4 | + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |
| 5 | +<mapper namespace="com.ruoyi.mapper.RuleSettingDriverMapper"> | |
| 6 | + | |
| 7 | + <resultMap id="BaseResultMap" type="com.ruoyi.domain.RuleSettingDriver"> | |
| 8 | + <id property="id" column="id" jdbcType="INTEGER"/> | |
| 9 | + <result property="settingId" column="setting_id" jdbcType="INTEGER"/> | |
| 10 | + <result property="jobCode" column="job_code" jdbcType="VARCHAR"/> | |
| 11 | + <result property="startDate" column="start_date" jdbcType="DATE"/> | |
| 12 | + </resultMap> | |
| 13 | + | |
| 14 | + <sql id="Base_Column_List"> | |
| 15 | + id,setting_id,job_code | |
| 16 | + </sql> | |
| 17 | + <select id="queryDriverListBySettingId" resultType="com.ruoyi.pojo.dto.DriverDto"> | |
| 18 | + SELECT | |
| 19 | + driver.*, | |
| 20 | + rule_setting_driver.setting_id | |
| 21 | + FROM | |
| 22 | + `driver`, | |
| 23 | + rule_setting_driver | |
| 24 | + WHERE | |
| 25 | + driver.job_code = rule_setting_driver.job_code | |
| 26 | + <if test="list != null and list.size() > 0"> | |
| 27 | + AND rule_setting_driver.setting_id IN | |
| 28 | + <foreach collection="list" index="index" item="item" open="(" close=")" separator=","> | |
| 29 | + #{item} | |
| 30 | + </foreach> | |
| 31 | + </if> | |
| 32 | + </select> | |
| 33 | +</mapper> | ... | ... |
ruoyi-admin/src/main/resources/mapper/RuleSettingSchedulingMapper.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | +<!DOCTYPE mapper | |
| 3 | + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |
| 4 | + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |
| 5 | +<mapper namespace="com.ruoyi.mapper.RuleSettingSchedulingMapper"> | |
| 6 | + | |
| 7 | + <resultMap id="BaseResultMap" type="com.ruoyi.domain.RuleSettingScheduling"> | |
| 8 | + <id property="id" column="id" jdbcType="INTEGER"/> | |
| 9 | + <result property="settingId" column="setting_id" jdbcType="INTEGER"/> | |
| 10 | + <result property="ruleSchedulingId" column="rule_scheduling_id" jdbcType="INTEGER"/> | |
| 11 | + <result property="rangeTime" column="rangeTime" jdbcType="VARCHAR"/> | |
| 12 | + <result property="ruleName" column="rule_name" jdbcType="VARCHAR"/> | |
| 13 | + </resultMap> | |
| 14 | + | |
| 15 | + <sql id="Base_Column_List"> | |
| 16 | + id,setting_id,rule_scheduling_id | |
| 17 | + </sql> | |
| 18 | + <select id="querySchedulingListBySettingId" resultType="com.ruoyi.pojo.dto.RuleSchedulingDto"> | |
| 19 | + SELECT | |
| 20 | + rule_scheduling.*, | |
| 21 | + rule_setting_scheduling.setting_id | |
| 22 | + FROM | |
| 23 | + `rule_scheduling`, | |
| 24 | + rule_setting_scheduling | |
| 25 | + WHERE | |
| 26 | + rule_scheduling.id = rule_setting_scheduling.rule_scheduling_id | |
| 27 | + <if test="list != null and list.size() > 0"> | |
| 28 | + AND rule_setting_scheduling.setting_id IN | |
| 29 | + <foreach collection="list" index="index" item="item" open="(" close=")" separator=","> | |
| 30 | + #{item} | |
| 31 | + </foreach> | |
| 32 | + </if> | |
| 33 | + </select> | |
| 34 | +</mapper> | ... | ... |
ruoyi-admin/src/main/resources/mapper/driver/DriverMapper.xml
| ... | ... | @@ -31,6 +31,7 @@ |
| 31 | 31 | <result property="fleetName" column="fleet_name"/> |
| 32 | 32 | <result property="posts" column="posts"/> |
| 33 | 33 | <result property="name" column="personnel_name"/> |
| 34 | + <result property="startDate" column="start_date"/> | |
| 34 | 35 | </resultMap> |
| 35 | 36 | <sql id="selectDriverVo"> |
| 36 | 37 | select id, |
| ... | ... | @@ -179,7 +180,15 @@ |
| 179 | 180 | </foreach> |
| 180 | 181 | </select> |
| 181 | 182 | <select id="queryAttendanceInfoById" resultType="com.ruoyi.pojo.vo.PeopleResponseVo" resultMap="PeopleResult"> |
| 182 | - | |
| 183 | + SELECT | |
| 184 | + driver.job_code, | |
| 185 | + driver.personnel_name, | |
| 186 | + driver.posts, | |
| 187 | + driver.fleet_name, | |
| 188 | + rule_setting_driver.start_date | |
| 189 | + FROM | |
| 190 | + driver,rule_setting_driver | |
| 191 | + WHERE driver.job_code = rule_setting_driver.job_code and rule_setting_driver.setting_id = #{id} | |
| 183 | 192 | </select> |
| 184 | 193 | <select id="queryAttendanceInfoAll" resultType="com.ruoyi.pojo.vo.PeopleResponseVo" resultMap="PeopleResult"> |
| 185 | 194 | SELECT |
| ... | ... | @@ -189,13 +198,7 @@ |
| 189 | 198 | fleet_name |
| 190 | 199 | FROM |
| 191 | 200 | driver |
| 192 | - WHERE | |
| 193 | - job_code NOT IN ( | |
| 194 | - SELECT | |
| 195 | - job_code | |
| 196 | - FROM | |
| 197 | - rule_num_driver | |
| 198 | - ) and driver.posts != "驾驶员" and driver.posts != "售票员" | |
| 201 | + WHERE driver.posts != "驾驶员" and driver.posts != "售票员" | |
| 199 | 202 | </select> |
| 200 | 203 | |
| 201 | 204 | <insert id="insertDriver" parameterType="Driver" useGeneratedKeys="true" keyProperty="id"> | ... | ... |
ruoyi-admin/src/main/resources/mapper/num/RuleNumMapper.xml
| 1 | 1 | <?xml version="1.0" encoding="UTF-8" ?> |
| 2 | 2 | <!DOCTYPE mapper |
| 3 | -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |
| 4 | -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |
| 3 | + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |
| 4 | + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |
| 5 | 5 | <mapper namespace="com.ruoyi.num.mapper.RuleNumMapper"> |
| 6 | - | |
| 6 | + | |
| 7 | 7 | <resultMap type="RuleNum" id="RuleNumResult"> |
| 8 | - <result property="id" column="id" /> | |
| 9 | - <result property="ruleDictName" column="rule_dict_name" /> | |
| 10 | - <result property="ruleType" column="rule_type" /> | |
| 11 | - <result property="workDay" column="work_day" /> | |
| 12 | - <result property="freeDay" column="free_day" /> | |
| 13 | - <result property="ruleWeek" column="rule_week" /> | |
| 8 | + <result property="id" column="id"/> | |
| 9 | + <result property="ruleDictName" column="rule_dict_name"/> | |
| 10 | + <result property="ruleType" column="rule_type"/> | |
| 11 | + <result property="workDay" column="work_day"/> | |
| 12 | + <result property="freeDay" column="free_day"/> | |
| 13 | + <result property="ruleWeek" column="rule_week"/> | |
| 14 | + </resultMap> | |
| 15 | + | |
| 16 | + <resultMap type="com.ruoyi.pojo.dto.RuleNumDto" id="RuleNumDtoResult"> | |
| 17 | + <result property="id" column="id"/> | |
| 18 | + <result property="ruleDictName" column="rule_dict_name"/> | |
| 19 | + <result property="ruleType" column="rule_type"/> | |
| 20 | + <result property="workDay" column="work_day"/> | |
| 21 | + <result property="freeDay" column="free_day"/> | |
| 22 | + <result property="ruleWeek" column="rule_week"/> | |
| 23 | + <result property="settingId" column="setting_id"/> | |
| 14 | 24 | </resultMap> |
| 15 | 25 | |
| 16 | 26 | <sql id="selectRuleNumVo"> |
| 17 | - select id, rule_dict_name, rule_type, work_day, free_day, rule_week from rule_num | |
| 27 | + select id, rule_dict_name, rule_type, work_day, free_day, rule_week | |
| 28 | + from rule_num | |
| 18 | 29 | </sql> |
| 19 | 30 | |
| 20 | 31 | <select id="selectRuleNumList" parameterType="RuleNum" resultMap="RuleNumResult"> |
| 21 | 32 | <include refid="selectRuleNumVo"/> |
| 22 | - <where> | |
| 23 | - <if test="ruleDictName != null "> and rule_dict_name like concat('%', #{ruleDictName}, '%')</if> | |
| 24 | - <if test="ruleType != null "> and rule_type = #{ruleType}</if> | |
| 25 | - <if test="workDay != null "> and work_day = #{workDay}</if> | |
| 26 | - <if test="freeDay != null "> and free_day = #{freeDay}</if> | |
| 27 | - <if test="ruleWeek != null and ruleWeek != ''"> and rule_week = #{ruleWeek}</if> | |
| 33 | + <where> | |
| 34 | + <if test="ruleDictName != null ">and rule_dict_name like concat('%', #{ruleDictName}, '%')</if> | |
| 35 | + <if test="ruleType != null ">and rule_type = #{ruleType}</if> | |
| 36 | + <if test="workDay != null ">and work_day = #{workDay}</if> | |
| 37 | + <if test="freeDay != null ">and free_day = #{freeDay}</if> | |
| 38 | + <if test="ruleWeek != null and ruleWeek != ''">and rule_week = #{ruleWeek}</if> | |
| 28 | 39 | </where> |
| 29 | 40 | </select> |
| 30 | - | |
| 41 | + | |
| 31 | 42 | <select id="selectRuleNumById" parameterType="Long" resultMap="RuleNumResult"> |
| 32 | 43 | <include refid="selectRuleNumVo"/> |
| 33 | 44 | where id = #{id} |
| 34 | 45 | </select> |
| 35 | - | |
| 46 | + <select id="listNumBySettingId" resultType="com.ruoyi.num.domain.RuleNum" resultMap="RuleNumResult"> | |
| 47 | + select * | |
| 48 | + from rule_num, | |
| 49 | + rule_num_setting | |
| 50 | + where rule_num.id = rule_num_setting.rule_num_id | |
| 51 | + and rule_num_setting.id = #{id} | |
| 52 | + </select> | |
| 53 | + <select id="selectRuleNumBySettingId" resultType="com.ruoyi.pojo.dto.RuleNumDto" resultMap="RuleNumDtoResult"> | |
| 54 | + select | |
| 55 | + rule_num.*, | |
| 56 | + rule_num_setting.id setting_id | |
| 57 | + from rule_num,rule_num_setting | |
| 58 | + where rule_num.id = rule_num_setting.rule_num_id | |
| 59 | + and rule_num_setting.id in | |
| 60 | + <foreach collection="list" item="item" index="index" open="(" close=")" separator=","> | |
| 61 | + #{item} | |
| 62 | + </foreach> | |
| 63 | + </select> | |
| 64 | + | |
| 36 | 65 | <insert id="insertRuleNum" parameterType="RuleNum" useGeneratedKeys="true" keyProperty="id"> |
| 37 | 66 | insert into rule_num |
| 38 | 67 | <trim prefix="(" suffix=")" suffixOverrides=","> |
| ... | ... | @@ -41,14 +70,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
| 41 | 70 | <if test="workDay != null">work_day,</if> |
| 42 | 71 | <if test="freeDay != null">free_day,</if> |
| 43 | 72 | <if test="ruleWeek != null">rule_week,</if> |
| 44 | - </trim> | |
| 73 | + </trim> | |
| 45 | 74 | <trim prefix="values (" suffix=")" suffixOverrides=","> |
| 46 | 75 | <if test="ruleDictName != null">#{ruleDictName},</if> |
| 47 | 76 | <if test="ruleType != null">#{ruleType},</if> |
| 48 | 77 | <if test="workDay != null">#{workDay},</if> |
| 49 | 78 | <if test="freeDay != null">#{freeDay},</if> |
| 50 | 79 | <if test="ruleWeek != null">#{ruleWeek},</if> |
| 51 | - </trim> | |
| 80 | + </trim> | |
| 52 | 81 | </insert> |
| 53 | 82 | |
| 54 | 83 | <update id="updateRuleNum" parameterType="RuleNum"> |
| ... | ... | @@ -64,11 +93,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
| 64 | 93 | </update> |
| 65 | 94 | |
| 66 | 95 | <delete id="deleteRuleNumById" parameterType="Long"> |
| 67 | - delete from rule_num where id = #{id} | |
| 96 | + delete | |
| 97 | + from rule_num | |
| 98 | + where id = #{id} | |
| 68 | 99 | </delete> |
| 69 | 100 | |
| 70 | 101 | <delete id="deleteRuleNumByIds" parameterType="String"> |
| 71 | - delete from rule_num where id in | |
| 102 | + delete from rule_num where id in | |
| 72 | 103 | <foreach item="id" collection="array" open="(" separator="," close=")"> |
| 73 | 104 | #{id} |
| 74 | 105 | </foreach> | ... | ... |
ruoyi-admin/src/main/resources/mapper/scheduling/RuleSchedulingMapper.xml
| ... | ... | @@ -4,6 +4,27 @@ |
| 4 | 4 | "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| 5 | 5 | <mapper namespace="com.ruoyi.scheduling.mapper.RuleSchedulingMapper"> |
| 6 | 6 | |
| 7 | + <resultMap type="com.ruoyi.pojo.dto.RuleSchedulingDto" id="RuleSchedulingDtoResult"> | |
| 8 | + <result property="id" column="id" /> | |
| 9 | + <result property="ruleName" column="rule_name" /> | |
| 10 | + <result property="workingHourPlan" column="working_hour_plan" /> | |
| 11 | + <result property="workingHourType" column="working_hour_type" /> | |
| 12 | + <result property="firstWorkSignInTime" column="first_work_sign_in_time" /> | |
| 13 | + <result property="firstSignInWorkingRange" column="first_sign_in_working_range" /> | |
| 14 | + <result property="firstQuittingSignInTime" column="first_quitting_sign_in_time" /> | |
| 15 | + <result property="firstSignInDayTomorrow" column="first_sign_in_day_tomorrow" /> | |
| 16 | + <result property="firstSignInQuittingRange" column="first_sign_in_quitting_range" /> | |
| 17 | + <result property="signInTimeOutRange" column="sign_in_time_out_range" /> | |
| 18 | + <result property="secondFlag" column="second_flag" /> | |
| 19 | + <result property="secondWorkSignInTime" column="second_work_sign_in_time" /> | |
| 20 | + <result property="secondSignInWorkingRange" column="second_sign_in_working_range" /> | |
| 21 | + <result property="secondQuittingSignInTime" column="second_quitting_sign_in_time" /> | |
| 22 | + <result property="secondSignInQuittingRange" column="second_sign_in_quitting_range" /> | |
| 23 | + <result property="secondSignDayTomorrow" column="second_sign_day_tomorrow" /> | |
| 24 | + <result property="settingId" column="setting_id" /> | |
| 25 | + <result property="sort" column="sort" /> | |
| 26 | + </resultMap> | |
| 27 | + | |
| 7 | 28 | <resultMap type="RuleScheduling" id="RuleSchedulingResult"> |
| 8 | 29 | <result property="id" column="id" /> |
| 9 | 30 | <result property="ruleName" column="rule_name" /> |
| ... | ... | @@ -52,6 +73,24 @@ |
| 52 | 73 | <include refid="selectRuleSchedulingVo"/> |
| 53 | 74 | where id = #{id} |
| 54 | 75 | </select> |
| 76 | + <select id="selectRuleSchedulingListVoBySettingId" resultType="com.ruoyi.scheduling.domain.RuleScheduling"> | |
| 77 | + select rule_scheduling.* | |
| 78 | + from rule_scheduling,rule_setting_scheduling | |
| 79 | + where rule_scheduling.id = rule_setting_scheduling.rule_scheduling_id and | |
| 80 | + rule_setting_scheduling.setting_id = #{settingId} | |
| 81 | + </select> | |
| 82 | + <select id="selectRuleSchedulingListVoBySettingIds" | |
| 83 | + resultType="com.ruoyi.pojo.dto.RuleSchedulingDto" resultMap="RuleSchedulingDtoResult"> | |
| 84 | + select rule_scheduling.*, | |
| 85 | + rule_setting_scheduling.setting_id, | |
| 86 | + rule_setting_scheduling.sort | |
| 87 | + from rule_scheduling,rule_setting_scheduling | |
| 88 | + where rule_scheduling.id = rule_setting_scheduling.rule_scheduling_id | |
| 89 | + and rule_setting_scheduling.setting_id in | |
| 90 | + <foreach collection="list" item="item" index="index" separator="," open="(" close=")"> | |
| 91 | + #{item} | |
| 92 | + </foreach> | |
| 93 | + </select> | |
| 55 | 94 | |
| 56 | 95 | <insert id="insertRuleScheduling" parameterType="RuleScheduling" useGeneratedKeys="true" keyProperty="id"> |
| 57 | 96 | insert into rule_scheduling | ... | ... |