Commit f140e57a9d9b26df9f869908ebe643c6ba1b852d

Authored by guzijian
1 parent 088d8a89

fix: 添加调度考勤

Showing 28 changed files with 607 additions and 101 deletions
ruoyi-admin/src/main/java/com/ruoyi/controller/AttendanceController.java
@@ -6,10 +6,7 @@ import com.ruoyi.common.global.Result; @@ -6,10 +6,7 @@ import com.ruoyi.common.global.Result;
6 import com.ruoyi.domain.RuleAttendanceMain; 6 import com.ruoyi.domain.RuleAttendanceMain;
7 import com.ruoyi.pojo.dto.SchedulingDto; 7 import com.ruoyi.pojo.dto.SchedulingDto;
8 import com.ruoyi.pojo.dto.SchedulingSettingDto; 8 import com.ruoyi.pojo.dto.SchedulingSettingDto;
9 -import com.ruoyi.pojo.vo.RuleAttendanceMainRequestVo;  
10 -import com.ruoyi.pojo.vo.SchedulingRequestVo;  
11 -import com.ruoyi.pojo.vo.SchedulingResponseVo;  
12 -import com.ruoyi.pojo.vo.UpdateAttendanceVo; 9 +import com.ruoyi.pojo.vo.*;
13 import com.ruoyi.service.AttendanceService; 10 import com.ruoyi.service.AttendanceService;
14 import io.swagger.annotations.Api; 11 import io.swagger.annotations.Api;
15 import io.swagger.annotations.ApiOperation; 12 import io.swagger.annotations.ApiOperation;
@@ -21,6 +18,7 @@ import java.util.List; @@ -21,6 +18,7 @@ import java.util.List;
21 18
22 /** 19 /**
23 * 考勤表controller 20 * 考勤表controller
  21 + *
24 * @author 20412 22 * @author 20412
25 */ 23 */
26 @RestController 24 @RestController
@@ -37,7 +35,7 @@ public class AttendanceController extends BaseController { @@ -37,7 +35,7 @@ public class AttendanceController extends BaseController {
37 */ 35 */
38 @ApiOperation("获取人员信息") 36 @ApiOperation("获取人员信息")
39 @GetMapping("/peoples") 37 @GetMapping("/peoples")
40 - public Result<?> getPeopleInfo(@RequestParam(value = "id",required = false) Long id){ 38 + public Result<?> getPeopleInfo(@RequestParam(value = "id", required = false) Long id) {
41 return Result.OK(attendanceService.getDriverInfo(id)); 39 return Result.OK(attendanceService.getDriverInfo(id));
42 } 40 }
43 41
@@ -46,7 +44,7 @@ public class AttendanceController extends BaseController { @@ -46,7 +44,7 @@ public class AttendanceController extends BaseController {
46 */ 44 */
47 @ApiOperation("获取排班") 45 @ApiOperation("获取排班")
48 @GetMapping("/scheduling/list") 46 @GetMapping("/scheduling/list")
49 - public TableDataInfo getSchedulingList(@ModelAttribute SchedulingRequestVo vo){ 47 + public TableDataInfo getSchedulingList(@ModelAttribute SchedulingRequestVo vo) {
50 List<SchedulingResponseVo> list = attendanceService.getSchedulingList(vo); 48 List<SchedulingResponseVo> list = attendanceService.getSchedulingList(vo);
51 return getDataTable(list); 49 return getDataTable(list);
52 } 50 }
@@ -56,7 +54,7 @@ public class AttendanceController extends BaseController { @@ -56,7 +54,7 @@ public class AttendanceController extends BaseController {
56 */ 54 */
57 @ApiOperation("根据班次获取模板") 55 @ApiOperation("根据班次获取模板")
58 @GetMapping("/template/{id}") 56 @GetMapping("/template/{id}")
59 - public Result<?> getTemplate(@PathVariable("id") Long id){ 57 + public Result<?> getTemplate(@PathVariable("id") Long id) {
60 return Result.OK(attendanceService.getTemplate(id)); 58 return Result.OK(attendanceService.getTemplate(id));
61 } 59 }
62 60
@@ -66,7 +64,7 @@ public class AttendanceController extends BaseController { @@ -66,7 +64,7 @@ public class AttendanceController extends BaseController {
66 */ 64 */
67 @ApiOperation("排班设置") 65 @ApiOperation("排班设置")
68 @PostMapping("/saveSchedulingSetting") 66 @PostMapping("/saveSchedulingSetting")
69 - public Result<?> saveSchedulingSetting(@RequestBody @Validated SchedulingSettingDto dto){ 67 + public Result<?> saveSchedulingSetting(@RequestBody @Validated SchedulingSettingDto dto) {
70 attendanceService.saveSchedulingSetting(dto); 68 attendanceService.saveSchedulingSetting(dto);
71 return Result.OK("新增成功"); 69 return Result.OK("新增成功");
72 } 70 }
@@ -76,7 +74,7 @@ public class AttendanceController extends BaseController { @@ -76,7 +74,7 @@ public class AttendanceController extends BaseController {
76 */ 74 */
77 @ApiOperation("排班设置") 75 @ApiOperation("排班设置")
78 @PutMapping("/updateSchedulingSetting") 76 @PutMapping("/updateSchedulingSetting")
79 - public Result<?> updateSchedulingSetting(@RequestBody @Validated SchedulingDto dto){ 77 + public Result<?> updateSchedulingSetting(@RequestBody @Validated SchedulingDto dto) {
80 attendanceService.updateSchedulingSetting(dto); 78 attendanceService.updateSchedulingSetting(dto);
81 return Result.OK("新增成功"); 79 return Result.OK("新增成功");
82 } 80 }
@@ -86,7 +84,7 @@ public class AttendanceController extends BaseController { @@ -86,7 +84,7 @@ public class AttendanceController extends BaseController {
86 */ 84 */
87 @ApiOperation("排班设置") 85 @ApiOperation("排班设置")
88 @DeleteMapping("/deleteSchedulingSetting/{settingId}") 86 @DeleteMapping("/deleteSchedulingSetting/{settingId}")
89 - public Result<?> deleteSchedulingSetting(@PathVariable("settingId") Integer settingId){ 87 + public Result<?> deleteSchedulingSetting(@PathVariable("settingId") Integer settingId) {
90 attendanceService.deleteSchedulingSetting(settingId); 88 attendanceService.deleteSchedulingSetting(settingId);
91 return Result.OK("删除成功"); 89 return Result.OK("删除成功");
92 } 90 }
@@ -97,15 +95,36 @@ public class AttendanceController extends BaseController { @@ -97,15 +95,36 @@ public class AttendanceController extends BaseController {
97 */ 95 */
98 @ApiOperation("获取考情表") 96 @ApiOperation("获取考情表")
99 @GetMapping("/list/attendance") 97 @GetMapping("/list/attendance")
100 - public TableDataInfo getAttendance(@ModelAttribute RuleAttendanceMainRequestVo vo){ 98 + public TableDataInfo getAttendance(@ModelAttribute RuleAttendanceMainRequestVo vo) {
101 List<RuleAttendanceMain> list = attendanceService.queryAttendanceMain(vo); 99 List<RuleAttendanceMain> list = attendanceService.queryAttendanceMain(vo);
102 return getDataTable(list); 100 return getDataTable(list);
103 } 101 }
104 102
105 @ApiOperation("修改考情表") 103 @ApiOperation("修改考情表")
106 @PutMapping("/update/attendance") 104 @PutMapping("/update/attendance")
107 - public Result<?> updateAttendance(@RequestBody @Validated UpdateAttendanceVo vo){  
108 - attendanceService.updateAttendance(vo);  
109 - return Result.OK("规则修改成功"); 105 + public Result<?> updateAttendance(@RequestBody @Validated UpdateAttendanceVo vo) {
  106 + try {
  107 + attendanceService.updateAttendance(vo);
  108 + return Result.OK("排班修改成功");
  109 + } catch (Exception e) {
  110 + throw new RuntimeException("排班修改失败,请联系管理员" + e.getMessage());
  111 + }
  112 + }
  113 +
  114 + @ApiOperation("删除考勤表")
  115 + @PostMapping("/delete/attendance")
  116 + public Result<?> deleteAttendance(@RequestBody DeleteAttendanceVo vo) {
  117 + try {
  118 + attendanceService.deleteAttendance(vo);
  119 + return Result.OK("删除排班成功");
  120 + } catch (Exception e) {
  121 + throw new RuntimeException("删除排班失败,请联系管理员" + e.getMessage());
  122 + }
  123 + }
  124 +
  125 + @ApiOperation("获取排班表人员信息")
  126 + @GetMapping("/list/people")
  127 + public Result<?> getPeopleList(@ModelAttribute PeopleRequestVo vo){
  128 + return Result.OK(attendanceService.getPeopleList(vo));
110 } 129 }
111 } 130 }
ruoyi-admin/src/main/java/com/ruoyi/domain/RuleAttendanceMain.java
@@ -109,6 +109,8 @@ public class RuleAttendanceMain implements Serializable { @@ -109,6 +109,8 @@ public class RuleAttendanceMain implements Serializable {
109 */ 109 */
110 private String ruleDictName; 110 private String ruleDictName;
111 111
  112 + private String fleetName;
  113 +
112 @TableField(exist = false) 114 @TableField(exist = false)
113 private static final long serialVersionUID = 1L; 115 private static final long serialVersionUID = 1L;
114 } 116 }
115 \ No newline at end of file 117 \ No newline at end of file
ruoyi-admin/src/main/java/com/ruoyi/domain/RuleAttendanceMainHelp.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 +
  10 +import lombok.Data;
  11 +
  12 +/**
  13 + * 考勤表
  14 + * @author 20412
  15 + * @TableName rule_attendance_main_help
  16 + */
  17 +@TableName(value ="rule_attendance_main_help")
  18 +@Data
  19 +public class RuleAttendanceMainHelp 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 String posts;
  40 +
  41 + private Date dateFlag;
  42 +
  43 + private String fleetName;
  44 +
  45 + @TableField(exist = false)
  46 + private static final long serialVersionUID = 1L;
  47 +}
0 \ No newline at end of file 48 \ No newline at end of file
ruoyi-admin/src/main/java/com/ruoyi/driver/controller/DriverController.java
@@ -213,20 +213,10 @@ public class DriverController extends BaseController { @@ -213,20 +213,10 @@ public class DriverController extends BaseController {
213 return driverService.faceRegistrationFeedback(vo.getDeviceId(), vo.getJobCodes()); 213 return driverService.faceRegistrationFeedback(vo.getDeviceId(), vo.getJobCodes());
214 } 214 }
215 215
216 - /**  
217 - * 清除指定工号异常记录  
218 - */  
219 - @ApiOperation("清除指定工号异常记录")  
220 - @DeleteMapping("/clear/{jobCode}")  
221 - public AjaxResult clearExceptionRecordByJobCode(@PathVariable("jobCode") String jobCode) {  
222 - driverService.clearExceptionRecordByJobCode(jobCode);  
223 - return AjaxResult.success("清除成功");  
224 - }  
225 -  
226 - @GetMapping("/questionFeedback")  
227 -// @ApiOperation("人脸识别反馈")  
228 - public Result<?> questionFeedback() {  
229 -  
230 - return null;  
231 - } 216 +// @GetMapping("/questionFeedback")
  217 +//// @ApiOperation("人脸识别反馈")
  218 +// public Result<?> questionFeedback() {
  219 +//
  220 +// return null;
  221 +// }
232 } 222 }
ruoyi-admin/src/main/java/com/ruoyi/driver/service/IDriverService.java
@@ -101,7 +101,6 @@ public interface IDriverService @@ -101,7 +101,6 @@ public interface IDriverService
101 101
102 void updateDrivers(List<Driver> drivers); 102 void updateDrivers(List<Driver> drivers);
103 103
104 - void clearExceptionRecordByJobCode(String jobCode);  
105 104
106 /** 105 /**
107 * 删除不存在的工号 106 * 删除不存在的工号
ruoyi-admin/src/main/java/com/ruoyi/driver/service/impl/DriverServiceImpl.java
@@ -194,6 +194,7 @@ public class DriverServiceImpl implements IDriverService { @@ -194,6 +194,7 @@ public class DriverServiceImpl implements IDriverService {
194 */ 194 */
195 @Override 195 @Override
196 public int updateDriver(Driver driver) { 196 public int updateDriver(Driver driver) {
  197 + driver.setUpdateTime(new Date());
197 return driverMapper.updateDriver(driver); 198 return driverMapper.updateDriver(driver);
198 } 199 }
199 200
@@ -331,13 +332,19 @@ public class DriverServiceImpl implements IDriverService { @@ -331,13 +332,19 @@ public class DriverServiceImpl implements IDriverService {
331 List<DriverScheduling> dto = null; 332 List<DriverScheduling> dto = null;
332 Boolean schedulingFlag = true; 333 Boolean schedulingFlag = true;
333 Boolean alcoholFlag = true; 334 Boolean alcoholFlag = true;
334 -  
335 // 更新信息 335 // 更新信息
336 for (Driver item : drivers) { 336 for (Driver item : drivers) {
337 dto = schedulingService.queryScheduling(item.getJobCode(), now); 337 dto = schedulingService.queryScheduling(item.getJobCode(), now);
338 DriverResponseVo vo = handlerRecommendation(item, now, dto, schedulingFlag, alcoholFlag); 338 DriverResponseVo vo = handlerRecommendation(item, now, dto, schedulingFlag, alcoholFlag);
339 - if (CollectionUtil.isEmpty(dto) && (item.getJobCode().equals("722717") || item.getJobCode().equals("700001"))) {  
340 - vos.add(DriverResponseVo.createDriverResponseVo(null, item, "签到", true, true, "测试", "测试", "测试")); 339 + // 针对指定用户操作
  340 + if ( item.getJobCode().equals("722717") || item.getJobCode().equals("700001")) {
  341 + if (!CollectionUtil.isEmpty(dto) && vo.getPlanAction().equals(SIGN_IN_STRING) ){
  342 + vos.add(DriverResponseVo.createDriverResponseVo(null, item, SIGN_IN_STRING, true, true, "测试", "测试", "测试"));
  343 + }else if (!CollectionUtil.isEmpty(dto)){
  344 + vos.add(vo);
  345 + }else {
  346 + vos.add(DriverResponseVo.createDriverResponseVo(null, item, SIGN_IN_STRING, true, true, "测试", "测试", "测试"));
  347 + }
341 }else { 348 }else {
342 // 无排班 349 // 无排班
343 if (Objects.isNull(vo)) { 350 if (Objects.isNull(vo)) {
@@ -346,7 +353,6 @@ public class DriverServiceImpl implements IDriverService { @@ -346,7 +353,6 @@ public class DriverServiceImpl implements IDriverService {
346 vos.add(vo); 353 vos.add(vo);
347 } 354 }
348 } 355 }
349 -  
350 } 356 }
351 return vos; 357 return vos;
352 } 358 }
@@ -484,12 +490,6 @@ public class DriverServiceImpl implements IDriverService { @@ -484,12 +490,6 @@ public class DriverServiceImpl implements IDriverService {
484 driverMapper.updateDriverInfoByJobCodes(drivers); 490 driverMapper.updateDriverInfoByJobCodes(drivers);
485 } 491 }
486 492
487 - @Override  
488 - public void clearExceptionRecordByJobCode(String jobCode) {  
489 - String dateKey = REDIS_SIGN_IN_DRIVER_ALCOHOL_OVERFLOW + ConstDateUtil.formatDate(new Date());  
490 - log.info("在:{}时间工号:{}的异常记录被清除了", dateKey, jobCode);  
491 - redisCache.deleteCacheMapValue(dateKey, jobCode);  
492 - }  
493 493
494 @Override 494 @Override
495 public void deleteNotEmptyJob(List<String> jobList) { 495 public void deleteNotEmptyJob(List<String> jobList) {
ruoyi-admin/src/main/java/com/ruoyi/global/GlobalException.java 0 → 100644
  1 +package com.ruoyi.global;
  2 +
  3 +import com.ruoyi.common.global.Result;
  4 +import com.ruoyi.common.global.ResultCode;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.security.core.userdetails.UsernameNotFoundException;
  7 +import org.springframework.web.bind.annotation.ExceptionHandler;
  8 +import org.springframework.web.bind.annotation.RestControllerAdvice;
  9 +
  10 +import java.sql.SQLIntegrityConstraintViolationException;
  11 +
  12 +/**
  13 + * @author 20412
  14 + */
  15 +@Slf4j
  16 +@RestControllerAdvice
  17 +public class GlobalException {
  18 +
  19 + /**
  20 + * 处理sql完整性约束冲突
  21 + * @param e
  22 + * @return
  23 + */
  24 + @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
  25 + public Result<?> uniqSqlHandler(SQLIntegrityConstraintViolationException e){
  26 + // 唯一完成性约束冲突
  27 + if (e.getMessage().contains("Duplicate entry")){
  28 + String[] args = e.getMessage().split(" ");
  29 + String message = args[2] + "已存在";
  30 + return Result.ERROR(message);
  31 + }
  32 + return Result.ERROR(e.getMessage());
  33 + }
  34 +
  35 + @ExceptionHandler(UsernameNotFoundException.class)
  36 + public Result<?> userInfoIllegal(UsernameNotFoundException e){
  37 + return Result.ERROR(e.getMessage()).code(ResultCode.CODE_401.getCode());
  38 + }
  39 +}
ruoyi-admin/src/main/java/com/ruoyi/in/service/impl/SignInServiceImpl.java
@@ -396,14 +396,14 @@ public class SignInServiceImpl implements ISignInService { @@ -396,14 +396,14 @@ public class SignInServiceImpl implements ISignInService {
396 396
397 private AjaxResult getAjaxResultByDriverSignInfo(SignIn signIn, SignInResponseVo vo) { 397 private AjaxResult getAjaxResultByDriverSignInfo(SignIn signIn, SignInResponseVo vo) {
398 // TODO 待更换 缓存更新为当天签到记录 398 // TODO 待更换 缓存更新为当天签到记录
399 - String key = REDIS_SIGN_IN_DRIVER_ALCOHOL_OVERFLOW + ConstDateUtil.formatDate("yyyyMMdd"); 399 + String key = REDIS_SIGN_IN_DRIVER_ALCOHOL_OVERFLOW + ConstDateUtil.formatDate("yyyyMMdd") + ":" + signIn.getJobCode();
400 // 驾驶员酒精测试连续超标两次则提示换人 400 // 驾驶员酒精测试连续超标两次则提示换人
401 - Integer count = redisCache.getCacheMapValue(key, signIn.getJobCode()); 401 + Integer count = redisCache.getCacheObject(key);
402 if (Objects.isNull(count) || count.equals(0)) { 402 if (Objects.isNull(count) || count.equals(0)) {
403 count = 1; 403 count = 1;
404 redisCache.setCacheMapValue(key, signIn.getJobCode(), count); 404 redisCache.setCacheMapValue(key, signIn.getJobCode(), count);
405 } else { 405 } else {
406 - count = redisCache.setIncrementMapValue(key, signIn.getJobCode(), 1); 406 + redisCache.setCacheObject(key, ++count);
407 } 407 }
408 if (SIGN_IN_ERROR_COUNT.compareTo(count) <= 0) { 408 if (SIGN_IN_ERROR_COUNT.compareTo(count) <= 0) {
409 return AjaxResult.success(SIGN_IN_ERROR + ": " + signIn.getRemark() + "酒精测试不通过" + count + "次请更换车辆驾驶员。", vo); 409 return AjaxResult.success(SIGN_IN_ERROR + ": " + signIn.getRemark() + "酒精测试不通过" + count + "次请更换车辆驾驶员。", vo);
@@ -500,7 +500,7 @@ public class SignInServiceImpl implements ISignInService { @@ -500,7 +500,7 @@ public class SignInServiceImpl implements ISignInService {
500 if (PERSONNEL_POSTS_DRIVER.equals(posts) || PERSONNEL_POSTS_SALES.equals(posts)) { 500 if (PERSONNEL_POSTS_DRIVER.equals(posts) || PERSONNEL_POSTS_SALES.equals(posts)) {
501 return driverCheckTimeOut(globalIndex, signIn, dto, now); 501 return driverCheckTimeOut(globalIndex, signIn, dto, now);
502 } else { 502 } else {
503 - return true; 503 + return driverCheckTimeOut(globalIndex, signIn, dto, now);
504 } 504 }
505 } 505 }
506 506
ruoyi-admin/src/main/java/com/ruoyi/job/DriverJob.java
@@ -224,7 +224,7 @@ public class DriverJob implements InitializingBean { @@ -224,7 +224,7 @@ public class DriverJob implements InitializingBean {
224 throw new RuntimeException(e); 224 throw new RuntimeException(e);
225 } 225 }
226 // 获取排班信息并存入redis 226 // 获取排班信息并存入redis
227 - saveSchedulingToRedis(getSchedulingInfoUrl, formatDate,timeOut); 227 + saveSchedulingToRedis(getSchedulingInfoUrl, formatDate, timeOut);
228 // 删除两天前排班信息 228 // 删除两天前排班信息
229 deleteScheduling(); 229 deleteScheduling();
230 log.info("获取{}的排班数据完毕", formatDate); 230 log.info("获取{}的排班数据完毕", formatDate);
@@ -243,14 +243,14 @@ public class DriverJob implements InitializingBean { @@ -243,14 +243,14 @@ public class DriverJob implements InitializingBean {
243 243
244 // 删除实时排班 244 // 删除实时排班
245 for (int i = 0; i < keys.size(); i++) { 245 for (int i = 0; i < keys.size(); i++) {
246 - if (nowKey.equals(keys.get(i)) || yesterdayKey.equals(keys.get(i))){ 246 + if (nowKey.equals(keys.get(i)) || yesterdayKey.equals(keys.get(i))) {
247 continue; 247 continue;
248 } 248 }
249 SCHEDULING_CACHE.removeCacheSchedulingByKey(keys.get(i)); 249 SCHEDULING_CACHE.removeCacheSchedulingByKey(keys.get(i));
250 } 250 }
251 // 删除考勤 251 // 删除考勤
252 for (int i = 0; i < nowKeys.size(); i++) { 252 for (int i = 0; i < nowKeys.size(); i++) {
253 - if (nowDate.equals(nowKeys.get(i)) || yesterdayDate.equals(nowKeys.get(i))){ 253 + if (nowDate.equals(nowKeys.get(i)) || yesterdayDate.equals(nowKeys.get(i))) {
254 continue; 254 continue;
255 } 255 }
256 NOW_SCHEDULING_CACHE.removeCacheSchedulingByKey(nowKeys.get(i)); 256 NOW_SCHEDULING_CACHE.removeCacheSchedulingByKey(nowKeys.get(i));
@@ -267,11 +267,18 @@ public class DriverJob implements InitializingBean { @@ -267,11 +267,18 @@ public class DriverJob implements InitializingBean {
267 /** 267 /**
268 * 生成排班 268 * 生成排班
269 */ 269 */
270 - public void createAttendance(){ 270 + public void createAttendance() {
271 RULE_NUM_SETTING_SERVICE.createAttendance(); 271 RULE_NUM_SETTING_SERVICE.createAttendance();
272 } 272 }
273 273
274 /** 274 /**
  275 + * 工具任务 手动把非司售人员的排班加入到签到报表缓存 可以把当天生成的排班明细没有来得及加入签到报表的员工手动加入
  276 + */
  277 + public void manualAddBcCache(){
  278 + RULE_NUM_SETTING_SERVICE.manualAddBcCache();
  279 + }
  280 +
  281 + /**
275 * 计算设备在线状态 5 分钟一次 282 * 计算设备在线状态 5 分钟一次
276 */ 283 */
277 public void computedDeviceOnlineStatus(String date) throws IOException, ClassNotFoundException { 284 public void computedDeviceOnlineStatus(String date) throws IOException, ClassNotFoundException {
@@ -293,7 +300,7 @@ public class DriverJob implements InitializingBean { @@ -293,7 +300,7 @@ public class DriverJob implements InitializingBean {
293 } 300 }
294 } 301 }
295 // 更新日志 302 // 更新日志
296 - THREAD_JOB_SERVICE.asyncInsertEquipmentLog(list,original); 303 + THREAD_JOB_SERVICE.asyncInsertEquipmentLog(list, original);
297 EQUIPMENT_MAPPER.updateEquipments(list); 304 EQUIPMENT_MAPPER.updateEquipments(list);
298 } 305 }
299 306
@@ -325,7 +332,7 @@ public class DriverJob implements InitializingBean { @@ -325,7 +332,7 @@ public class DriverJob implements InitializingBean {
325 schedulingList.sort(Comparator.comparing(ResponseSchedulingDto::getFcsjT)); 332 schedulingList.sort(Comparator.comparing(ResponseSchedulingDto::getFcsjT));
326 } 333 }
327 // 存入签到报表 334 // 存入签到报表
328 - THREAD_JOB_SERVICE.asyncComputedScheduling(driverSchedulingMap,timeOut); 335 + THREAD_JOB_SERVICE.asyncComputedScheduling(driverSchedulingMap, timeOut);
329 // 实时排班直接存入缓存 336 // 实时排班直接存入缓存
330 SCHEDULING_CACHE.setCacheScheduling(DRIVER_SCHEDULING_PRE + dateKey, driverSchedulingMap); 337 SCHEDULING_CACHE.setCacheScheduling(DRIVER_SCHEDULING_PRE + dateKey, driverSchedulingMap);
331 log.info("拉取排班完毕:{}", dateKey); 338 log.info("拉取排班完毕:{}", dateKey);
@@ -335,7 +342,7 @@ public class DriverJob implements InitializingBean { @@ -335,7 +342,7 @@ public class DriverJob implements InitializingBean {
335 private void splitSaveScheduling(Map<String, List<ResponseSchedulingDto>> driverSchedulingMap, String jobCode, String name, ResponseSchedulingDto item, String posts) { 342 private void splitSaveScheduling(Map<String, List<ResponseSchedulingDto>> driverSchedulingMap, String jobCode, String name, ResponseSchedulingDto item, String posts) {
336 if (!Objects.isNull(jobCode)) { 343 if (!Objects.isNull(jobCode)) {
337 ResponseSchedulingDto scheduling = new ResponseSchedulingDto(); 344 ResponseSchedulingDto scheduling = new ResponseSchedulingDto();
338 - BeanUtils.copyProperties(item,scheduling); 345 + BeanUtils.copyProperties(item, scheduling);
339 scheduling.setPosts(posts); 346 scheduling.setPosts(posts);
340 scheduling.setJobCode(jobCode); 347 scheduling.setJobCode(jobCode);
341 scheduling.setName(name); 348 scheduling.setName(name);
@@ -359,7 +366,7 @@ public class DriverJob implements InitializingBean { @@ -359,7 +366,7 @@ public class DriverJob implements InitializingBean {
359 int countPage = vo.getTotalCount() / pageSize; 366 int countPage = vo.getTotalCount() / pageSize;
360 countPage = vo.getTotalCount() % pageSize == 0 ? countPage : countPage + 1; 367 countPage = vo.getTotalCount() % pageSize == 0 ? countPage : countPage + 1;
361 List<Driver> drivers = getDrivers(date, vo); 368 List<Driver> drivers = getDrivers(date, vo);
362 - for (int i = 2; i <= countPage; i++ ) { 369 + for (int i = 2; i <= countPage; i++) {
363 drivers.addAll(getDrivers(date, getPersonInfo(accessToken, 100, i))); 370 drivers.addAll(getDrivers(date, getPersonInfo(accessToken, 100, i)));
364 } 371 }
365 List<String> jobList = drivers.stream().map(driver -> driver.getJobCode()).collect(Collectors.toList()); 372 List<String> jobList = drivers.stream().map(driver -> driver.getJobCode()).collect(Collectors.toList());
ruoyi-admin/src/main/java/com/ruoyi/mapper/RuleAttendanceMainHelpMapper.java 0 → 100644
  1 +package com.ruoyi.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import com.ruoyi.domain.RuleAttendanceMainHelp;
  5 +import com.ruoyi.pojo.vo.PeopleRequestVo;
  6 +
  7 +import java.util.List;
  8 +
  9 +/**
  10 +* @author 20412
  11 +* @description 针对表【rule_attendance_main_help(考勤表)】的数据库操作Mapper
  12 +* @createDate 2023-09-05 15:39:18
  13 +* @Entity .domain.RuleAttendanceMainHelp
  14 +*/
  15 +public interface RuleAttendanceMainHelpMapper extends BaseMapper<RuleAttendanceMainHelp> {
  16 +
  17 + /**
  18 + * 获取当月生成的人员信息
  19 + * @param vo
  20 + * @return
  21 + */
  22 + List<RuleAttendanceMainHelp> queryNowMonthPeople(PeopleRequestVo vo);
  23 +}
  24 +
  25 +
  26 +
  27 +
ruoyi-admin/src/main/java/com/ruoyi/mapper/RuleAttendanceMainMapper.java
@@ -2,6 +2,9 @@ package com.ruoyi.mapper; @@ -2,6 +2,9 @@ package com.ruoyi.mapper;
2 2
3 import com.baomidou.mybatisplus.core.mapper.BaseMapper; 3 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4 import com.ruoyi.domain.RuleAttendanceMain; 4 import com.ruoyi.domain.RuleAttendanceMain;
  5 +import com.ruoyi.pojo.vo.DeleteAttendanceVo;
  6 +import com.ruoyi.pojo.vo.UpdateAttendanceVo;
  7 +import org.apache.ibatis.annotations.Param;
5 8
6 /** 9 /**
7 * @author 20412 10 * @author 20412
@@ -11,10 +14,18 @@ import com.ruoyi.domain.RuleAttendanceMain; @@ -11,10 +14,18 @@ import com.ruoyi.domain.RuleAttendanceMain;
11 */ 14 */
12 public interface RuleAttendanceMainMapper extends BaseMapper<RuleAttendanceMain> { 15 public interface RuleAttendanceMainMapper extends BaseMapper<RuleAttendanceMain> {
13 /** 16 /**
14 - * 全量更新 17 + * 批量更新
  18 + *
  19 + * @param vo
15 * @param main 20 * @param main
16 */ 21 */
17 - void updateByIdTotalQuantity(RuleAttendanceMain main); 22 + void updateByIdTotalQuantity(@Param("vo") UpdateAttendanceVo vo,@Param("main") RuleAttendanceMain main);
  23 +
  24 + /**
  25 + * 批量删除
  26 + * @param vo
  27 + */
  28 + void deleteByJobCodeTotalRecord(DeleteAttendanceVo vo);
18 } 29 }
19 30
20 31
ruoyi-admin/src/main/java/com/ruoyi/pojo/dto/AttendanceDto.java
@@ -17,4 +17,5 @@ public class AttendanceDto { @@ -17,4 +17,5 @@ public class AttendanceDto {
17 private Integer settingId; 17 private Integer settingId;
18 private Date startDate; 18 private Date startDate;
19 private String posts; 19 private String posts;
  20 + private String fleetName;
20 } 21 }
ruoyi-admin/src/main/java/com/ruoyi/pojo/vo/DeleteAttendanceVo.java 0 → 100644
  1 +package com.ruoyi.pojo.vo;
  2 +
  3 +import lombok.Data;
  4 +
  5 +import java.util.List;
  6 +
  7 +/**
  8 + * @author 20412
  9 + */
  10 +@Data
  11 +public class DeleteAttendanceVo {
  12 + private List<String> jobCode;
  13 + private String startDate;
  14 + private String endDate;
  15 +}
ruoyi-admin/src/main/java/com/ruoyi/pojo/vo/PeopleRequestVo.java 0 → 100644
  1 +package com.ruoyi.pojo.vo;
  2 +
  3 +import lombok.Data;
  4 +
  5 +/**
  6 + * @author 20412
  7 + */
  8 +@Data
  9 +public class PeopleRequestVo {
  10 + private String date;
  11 + private String jobCode;
  12 + private String name;
  13 + private String posts;
  14 + private String fleeName;
  15 +}
ruoyi-admin/src/main/java/com/ruoyi/pojo/vo/UpdateAttendanceVo.java
1 package com.ruoyi.pojo.vo; 1 package com.ruoyi.pojo.vo;
2 2
3 -import com.ruoyi.scheduling.domain.RuleScheduling;  
4 import lombok.Data; 3 import lombok.Data;
5 4
6 -import javax.validation.constraints.NotNull;  
7 import java.util.List; 5 import java.util.List;
8 6
  7 +
9 /** 8 /**
10 * @author 20412 9 * @author 20412
11 */ 10 */
12 @Data 11 @Data
13 public class UpdateAttendanceVo { 12 public class UpdateAttendanceVo {
14 - @NotNull  
15 - private Integer id;  
16 - @NotNull 13 + private List<String> jobCode;
  14 + private String startDate;
  15 + private String endDate;
17 private Integer ruleId; 16 private Integer ruleId;
18 } 17 }
ruoyi-admin/src/main/java/com/ruoyi/service/AttendanceService.java
1 package com.ruoyi.service; 1 package com.ruoyi.service;
2 2
3 import com.ruoyi.domain.RuleAttendanceMain; 3 import com.ruoyi.domain.RuleAttendanceMain;
  4 +import com.ruoyi.domain.RuleAttendanceMainHelp;
4 import com.ruoyi.pojo.dto.SchedulingDto; 5 import com.ruoyi.pojo.dto.SchedulingDto;
5 import com.ruoyi.pojo.dto.SchedulingSettingDto; 6 import com.ruoyi.pojo.dto.SchedulingSettingDto;
6 import com.ruoyi.pojo.vo.*; 7 import com.ruoyi.pojo.vo.*;
@@ -53,4 +54,8 @@ public interface AttendanceService { @@ -53,4 +54,8 @@ public interface AttendanceService {
53 List<RuleAttendanceMain> queryAttendanceMain(RuleAttendanceMainRequestVo vo); 54 List<RuleAttendanceMain> queryAttendanceMain(RuleAttendanceMainRequestVo vo);
54 55
55 void updateAttendance(UpdateAttendanceVo vo); 56 void updateAttendance(UpdateAttendanceVo vo);
  57 +
  58 + void deleteAttendance(DeleteAttendanceVo vo);
  59 +
  60 + List<RuleAttendanceMainHelp> getPeopleList(PeopleRequestVo vo);
56 } 61 }
ruoyi-admin/src/main/java/com/ruoyi/service/RuleAttendanceMainHelpService.java 0 → 100644
  1 +package com.ruoyi.service;
  2 +
  3 +import com.baomidou.mybatisplus.extension.service.IService;
  4 +import com.ruoyi.domain.RuleAttendanceMainHelp;
  5 +import com.ruoyi.pojo.vo.PeopleRequestVo;
  6 +
  7 +import java.util.List;
  8 +
  9 +/**
  10 +* @author 20412
  11 +* @description 针对表【rule_attendance_main_help(考勤表)】的数据库操作Service
  12 +* @createDate 2023-09-05 15:39:18
  13 +*/
  14 +public interface RuleAttendanceMainHelpService extends IService<RuleAttendanceMainHelp> {
  15 +
  16 + /**
  17 + * 查询当月生成人员数据
  18 + * @param vo
  19 + * @return
  20 + */
  21 + List<RuleAttendanceMainHelp> queryNowMonthPeople(PeopleRequestVo vo);
  22 +}
ruoyi-admin/src/main/java/com/ruoyi/service/RuleAttendanceMainService.java
@@ -2,6 +2,14 @@ package com.ruoyi.service; @@ -2,6 +2,14 @@ package com.ruoyi.service;
2 2
3 import com.baomidou.mybatisplus.extension.service.IService; 3 import com.baomidou.mybatisplus.extension.service.IService;
4 import com.ruoyi.domain.RuleAttendanceMain; 4 import com.ruoyi.domain.RuleAttendanceMain;
  5 +import com.ruoyi.domain.RuleAttendanceMainHelp;
  6 +import com.ruoyi.pojo.vo.DeleteAttendanceVo;
  7 +import com.ruoyi.pojo.vo.PeopleRequestVo;
  8 +import com.ruoyi.pojo.vo.PeopleResponseVo;
  9 +import com.ruoyi.pojo.vo.UpdateAttendanceVo;
  10 +import org.apache.ibatis.annotations.Param;
  11 +
  12 +import java.util.List;
5 13
6 /** 14 /**
7 * @author 20412 15 * @author 20412
@@ -10,5 +18,23 @@ import com.ruoyi.domain.RuleAttendanceMain; @@ -10,5 +18,23 @@ import com.ruoyi.domain.RuleAttendanceMain;
10 */ 18 */
11 public interface RuleAttendanceMainService extends IService<RuleAttendanceMain> { 19 public interface RuleAttendanceMainService extends IService<RuleAttendanceMain> {
12 20
13 - void updateByIdTotalQuantity(RuleAttendanceMain main); 21 + /**
  22 + * 修改规则
  23 + * @param vo
  24 + * @param main
  25 + */
  26 + void updateByJobCodeTotalQuantity(@Param("vo") UpdateAttendanceVo vo, @Param("main") RuleAttendanceMain main);
  27 +
  28 + /**
  29 + * 删除排班
  30 + * @param vo
  31 + */
  32 + void deleteByJobCodeTotalRecord(DeleteAttendanceVo vo);
  33 +
  34 + /**
  35 + * 获取本月生成清单
  36 + * @param vo
  37 + * @return
  38 + */
  39 + List<RuleAttendanceMainHelp> queryPeopleList(PeopleRequestVo vo);
14 } 40 }
ruoyi-admin/src/main/java/com/ruoyi/service/RuleNumSettingService.java
@@ -33,4 +33,9 @@ public interface RuleNumSettingService extends IService&lt;RuleNumSetting&gt; { @@ -33,4 +33,9 @@ public interface RuleNumSettingService extends IService&lt;RuleNumSetting&gt; {
33 * @return 33 * @return
34 */ 34 */
35 List<RuleNumDto> selectRuleNumBySettingId(List<Integer> settingList); 35 List<RuleNumDto> selectRuleNumBySettingId(List<Integer> settingList);
  36 +
  37 + /**
  38 + * 手动添加班次
  39 + */
  40 + void manualAddBcCache();
36 } 41 }
ruoyi-admin/src/main/java/com/ruoyi/service/ThreadJobService.java
@@ -3,11 +3,13 @@ package com.ruoyi.service; @@ -3,11 +3,13 @@ package com.ruoyi.service;
3 3
4 import cn.hutool.core.collection.CollectionUtil; 4 import cn.hutool.core.collection.CollectionUtil;
5 import cn.hutool.http.HttpUtil; 5 import cn.hutool.http.HttpUtil;
  6 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
6 import com.ruoyi.common.cache.NowSchedulingCache; 7 import com.ruoyi.common.cache.NowSchedulingCache;
7 import com.ruoyi.common.config.RuoYiConfig; 8 import com.ruoyi.common.config.RuoYiConfig;
8 import com.ruoyi.common.exception.file.FileUploadException; 9 import com.ruoyi.common.exception.file.FileUploadException;
9 import com.ruoyi.common.utils.StringUtils; 10 import com.ruoyi.common.utils.StringUtils;
10 import com.ruoyi.common.utils.file.FileUploadUtils; 11 import com.ruoyi.common.utils.file.FileUploadUtils;
  12 +import com.ruoyi.domain.RuleAttendanceMain;
11 import com.ruoyi.driver.domain.Driver; 13 import com.ruoyi.driver.domain.Driver;
12 import com.ruoyi.driver.mapper.DriverMapper; 14 import com.ruoyi.driver.mapper.DriverMapper;
13 import com.ruoyi.driver.mapper.DriverSchedulingMapper; 15 import com.ruoyi.driver.mapper.DriverSchedulingMapper;
@@ -48,6 +50,7 @@ import static com.ruoyi.common.ConstDriverProperties.BC_TYPE_IN; @@ -48,6 +50,7 @@ import static com.ruoyi.common.ConstDriverProperties.BC_TYPE_IN;
48 import static com.ruoyi.common.ConstDriverProperties.BC_TYPE_OUT; 50 import static com.ruoyi.common.ConstDriverProperties.BC_TYPE_OUT;
49 import static com.ruoyi.common.ConstEquipmentProperties.*; 51 import static com.ruoyi.common.ConstEquipmentProperties.*;
50 import static com.ruoyi.common.ConstSignInConstSignInProperties.SIGN_NO_EX_NUM; 52 import static com.ruoyi.common.ConstSignInConstSignInProperties.SIGN_NO_EX_NUM;
  53 +import static com.ruoyi.common.RuleSchedulingProperties.WORK_FLAG;
51 54
52 55
53 /** 56 /**
@@ -75,6 +78,9 @@ public class ThreadJobService { @@ -75,6 +78,9 @@ public class ThreadJobService {
75 @Resource 78 @Resource
76 private NowSchedulingCache nowSchedulingCache; 79 private NowSchedulingCache nowSchedulingCache;
77 80
  81 + @Autowired
  82 + private RuleAttendanceMainService attendanceMainService;
  83 +
78 84
79 @Autowired 85 @Autowired
80 private PlatformTransactionManager transactionManager; 86 private PlatformTransactionManager transactionManager;
@@ -344,6 +350,9 @@ public class ThreadJobService { @@ -344,6 +350,9 @@ public class ThreadJobService {
344 return; 350 return;
345 } 351 }
346 List<DriverScheduling> bcList = getBcList(originSchedulingMap); 352 List<DriverScheduling> bcList = getBcList(originSchedulingMap);
  353 +
  354 + // 处理非司售人员的排班明细
  355 + bcList.addAll(handleOtherPostsScheduling());
347 // 插入排班 356 // 插入排班
348 schedulingMapper.insertRoster(bcList); 357 schedulingMapper.insertRoster(bcList);
349 // 异常数据过多,不通过自增获取id再次查询获取 358 // 异常数据过多,不通过自增获取id再次查询获取
@@ -362,6 +371,57 @@ public class ThreadJobService { @@ -362,6 +371,57 @@ public class ThreadJobService {
362 } 371 }
363 } 372 }
364 373
  374 + private List<DriverScheduling> handleOtherPostsScheduling() {
  375 + QueryWrapper<RuleAttendanceMain> qw = new QueryWrapper<>();
  376 + qw.lambda()
  377 + .eq(RuleAttendanceMain::getWorkFlag, WORK_FLAG)
  378 + .eq(RuleAttendanceMain::getSchedulingDate, LocalDate.now());
  379 + List<RuleAttendanceMain> mainList = attendanceMainService.list(qw);
  380 + List<DriverScheduling> bcList = new ArrayList<>(mainList.size() * 2);
  381 + for (RuleAttendanceMain ruleAttendanceMain : mainList) {
  382 + // 第一段
  383 + DriverScheduling scheduling = getDriverScheduling(ruleAttendanceMain);
  384 + scheduling.setFcsjT(ruleAttendanceMain.getFirstWorkSignInTime().getTime());
  385 + scheduling.setBcType(BC_TYPE_OUT);
  386 + scheduling.setZdsjT(ruleAttendanceMain.getFirstWorkSignInTime().getTime());
  387 + scheduling.setScheduleDate(ruleAttendanceMain.getSchedulingDate());
  388 + bcList.add(scheduling);
  389 +
  390 + DriverScheduling scheduling1 = getDriverScheduling(ruleAttendanceMain);
  391 + scheduling1.setBcType(BC_TYPE_IN);
  392 + scheduling1.setZdsjT(ruleAttendanceMain.getFirstQuittingSignInTime().getTime());
  393 + scheduling1.setFcsjT(ruleAttendanceMain.getFirstQuittingSignInTime().getTime());
  394 + scheduling1.setScheduleDate(ruleAttendanceMain.getSchedulingDate());
  395 + bcList.add(scheduling1);
  396 + // 第二段
  397 + if (!Objects.isNull(ruleAttendanceMain.getSecondWorkSignInTime())) {
  398 + DriverScheduling scheduling2 = getDriverScheduling(ruleAttendanceMain);
  399 + scheduling2.setBcType(BC_TYPE_OUT);
  400 + scheduling2.setFcsjT(ruleAttendanceMain.getSecondWorkSignInTime().getTime());
  401 + scheduling2.setZdsjT(ruleAttendanceMain.getSecondWorkSignInTime().getTime());
  402 + scheduling2.setScheduleDate(ruleAttendanceMain.getSchedulingDate());
  403 + bcList.add(scheduling2);
  404 +
  405 + DriverScheduling scheduling3 = getDriverScheduling(ruleAttendanceMain);
  406 + scheduling3.setBcType(BC_TYPE_IN);
  407 + scheduling3.setFcsjT(ruleAttendanceMain.getSecondQuittingSignInTime().getTime());
  408 + scheduling3.setZdsjT(ruleAttendanceMain.getSecondQuittingSignInTime().getTime());
  409 + scheduling3.setScheduleDate(ruleAttendanceMain.getSchedulingDate());
  410 + bcList.add(scheduling3);
  411 + }
  412 + }
  413 + return bcList;
  414 + }
  415 +
  416 + private static DriverScheduling getDriverScheduling(RuleAttendanceMain ruleAttendanceMain) {
  417 + DriverScheduling scheduling = new DriverScheduling();
  418 + scheduling.setPosts(ruleAttendanceMain.getPosts());
  419 + scheduling.setJobCode(ruleAttendanceMain.getJobCode());
  420 + scheduling.setName(ruleAttendanceMain.getName());
  421 + scheduling.setFleetName(ruleAttendanceMain.getFleetName());
  422 + return scheduling;
  423 + }
  424 +
365 private List<DriverScheduling> getBcList(Map<String, List<ResponseSchedulingDto>> originSchedulingMap) { 425 private List<DriverScheduling> getBcList(Map<String, List<ResponseSchedulingDto>> originSchedulingMap) {
366 List<DriverScheduling> bcList = new ArrayList<>(1000); 426 List<DriverScheduling> bcList = new ArrayList<>(1000);
367 for (String key : originSchedulingMap.keySet()) { 427 for (String key : originSchedulingMap.keySet()) {
ruoyi-admin/src/main/java/com/ruoyi/service/impl/AttendanceServiceImpl.java
@@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5 import com.ruoyi.common.utils.DateUtils; 5 import com.ruoyi.common.utils.DateUtils;
6 import com.ruoyi.common.utils.PageUtils; 6 import com.ruoyi.common.utils.PageUtils;
7 import com.ruoyi.common.utils.SecurityUtils; 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; 8 +import com.ruoyi.domain.*;
12 import com.ruoyi.driver.mapper.DriverMapper; 9 import com.ruoyi.driver.mapper.DriverMapper;
13 import com.ruoyi.num.domain.RuleNum; 10 import com.ruoyi.num.domain.RuleNum;
14 import com.ruoyi.num.service.IRuleNumService; 11 import com.ruoyi.num.service.IRuleNumService;
@@ -24,7 +21,6 @@ import com.ruoyi.service.*; @@ -24,7 +21,6 @@ import com.ruoyi.service.*;
24 import com.ruoyi.utils.ConstDateUtil; 21 import com.ruoyi.utils.ConstDateUtil;
25 import org.springframework.beans.BeanUtils; 22 import org.springframework.beans.BeanUtils;
26 import org.springframework.beans.factory.annotation.Autowired; 23 import org.springframework.beans.factory.annotation.Autowired;
27 -import org.springframework.security.core.parameters.P;  
28 import org.springframework.stereotype.Service; 24 import org.springframework.stereotype.Service;
29 import org.springframework.transaction.annotation.Transactional; 25 import org.springframework.transaction.annotation.Transactional;
30 26
@@ -159,8 +155,9 @@ public class AttendanceServiceImpl implements AttendanceService { @@ -159,8 +155,9 @@ public class AttendanceServiceImpl implements AttendanceService {
159 } 155 }
160 156
161 @Override 157 @Override
  158 + @Transactional(rollbackFor = Exception.class)
162 public void updateAttendance(UpdateAttendanceVo vo) { 159 public void updateAttendance(UpdateAttendanceVo vo) {
163 - RuleAttendanceMain main = attendanceMainService.getById(vo.getId()); 160 + RuleAttendanceMain main = new RuleAttendanceMain();
164 RuleScheduling ruleScheduling = ruleSchedulingService.selectRuleSchedulingById(vo.getRuleId().longValue()); 161 RuleScheduling ruleScheduling = ruleSchedulingService.selectRuleSchedulingById(vo.getRuleId().longValue());
165 BeanUtils.copyProperties(ruleScheduling, main); 162 BeanUtils.copyProperties(ruleScheduling, main);
166 main.setFirstWorkSignInTime(ConstDateUtil.dateAddition(LocalDate.now().toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getFirstWorkSignInTime()))); 163 main.setFirstWorkSignInTime(ConstDateUtil.dateAddition(LocalDate.now().toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getFirstWorkSignInTime())));
@@ -170,19 +167,30 @@ public class AttendanceServiceImpl implements AttendanceService { @@ -170,19 +167,30 @@ public class AttendanceServiceImpl implements AttendanceService {
170 // 处理隔天 167 // 处理隔天
171 if (TOMORROW_YES.equals(ruleScheduling.getFirstSignInDayTomorrow())) { 168 if (TOMORROW_YES.equals(ruleScheduling.getFirstSignInDayTomorrow())) {
172 main.setSecondQuittingSignInTime(ConstDateUtil.dateAddition(LocalDate.now().plusDays(1).toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getSecondQuittingSignInTime()))); 169 main.setSecondQuittingSignInTime(ConstDateUtil.dateAddition(LocalDate.now().plusDays(1).toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getSecondQuittingSignInTime())));
173 - }else { 170 + } else {
174 main.setSecondQuittingSignInTime(ConstDateUtil.dateAddition(LocalDate.now().toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getSecondQuittingSignInTime()))); 171 main.setSecondQuittingSignInTime(ConstDateUtil.dateAddition(LocalDate.now().toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getSecondQuittingSignInTime())));
175 } 172 }
176 } else { 173 } else {
177 // 处理隔天 174 // 处理隔天
178 if (TOMORROW_YES.equals(ruleScheduling.getFirstSignInDayTomorrow())) { 175 if (TOMORROW_YES.equals(ruleScheduling.getFirstSignInDayTomorrow())) {
179 main.setFirstQuittingSignInTime(ConstDateUtil.dateAddition(LocalDate.now().plusDays(1).toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getFirstQuittingSignInTime()))); 176 main.setFirstQuittingSignInTime(ConstDateUtil.dateAddition(LocalDate.now().plusDays(1).toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getFirstQuittingSignInTime())));
180 - }else { 177 + } else {
181 main.setFirstQuittingSignInTime(ConstDateUtil.dateAddition(LocalDate.now().toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getFirstQuittingSignInTime()))); 178 main.setFirstQuittingSignInTime(ConstDateUtil.dateAddition(LocalDate.now().toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getFirstQuittingSignInTime())));
182 } 179 }
183 } 180 }
184 main.setWorkFlag(ruleScheduling.getId() == 0 ? FREE_FLAG : WORK_FLAG); 181 main.setWorkFlag(ruleScheduling.getId() == 0 ? FREE_FLAG : WORK_FLAG);
185 - attendanceMainService.updateByIdTotalQuantity(main); 182 + attendanceMainService.updateByJobCodeTotalQuantity(vo, main);
  183 + }
  184 +
  185 + @Override
  186 + @Transactional(rollbackFor = Exception.class)
  187 + public void deleteAttendance(DeleteAttendanceVo vo) {
  188 + attendanceMainService.deleteByJobCodeTotalRecord(vo);
  189 + }
  190 +
  191 + @Override
  192 + public List<RuleAttendanceMainHelp> getPeopleList(PeopleRequestVo vo) {
  193 + return attendanceMainService.queryPeopleList(vo);
186 } 194 }
187 195
188 private static void getRumSettingByDto(SchedulingDto dto, RuleNumSetting setting) { 196 private static void getRumSettingByDto(SchedulingDto dto, RuleNumSetting setting) {
ruoyi-admin/src/main/java/com/ruoyi/service/impl/RuleAttendanceMainHelpServiceImpl.java 0 → 100644
  1 +package com.ruoyi.service.impl;
  2 +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3 +import com.ruoyi.domain.RuleAttendanceMainHelp;
  4 +import com.ruoyi.mapper.RuleAttendanceMainHelpMapper;
  5 +import com.ruoyi.pojo.vo.PeopleRequestVo;
  6 +import com.ruoyi.service.RuleAttendanceMainHelpService;
  7 +import org.springframework.stereotype.Service;
  8 +
  9 +import java.util.List;
  10 +
  11 +/**
  12 +* @author 20412
  13 +* @description 针对表【rule_attendance_main_help(考勤表)】的数据库操作Service实现
  14 +* @createDate 2023-09-05 15:39:18
  15 +*/
  16 +@Service
  17 +public class RuleAttendanceMainHelpServiceImpl extends ServiceImpl<RuleAttendanceMainHelpMapper, RuleAttendanceMainHelp>
  18 + implements RuleAttendanceMainHelpService {
  19 +
  20 + @Override
  21 + public List<RuleAttendanceMainHelp> queryNowMonthPeople(PeopleRequestVo vo) {
  22 + return baseMapper.queryNowMonthPeople(vo);
  23 + }
  24 +}
  25 +
  26 +
  27 +
  28 +
ruoyi-admin/src/main/java/com/ruoyi/service/impl/RuleAttendanceMainServiceImpl.java
@@ -2,10 +2,19 @@ package com.ruoyi.service.impl; @@ -2,10 +2,19 @@ package com.ruoyi.service.impl;
2 2
3 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 3 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
4 import com.ruoyi.domain.RuleAttendanceMain; 4 import com.ruoyi.domain.RuleAttendanceMain;
  5 +import com.ruoyi.domain.RuleAttendanceMainHelp;
5 import com.ruoyi.mapper.RuleAttendanceMainMapper; 6 import com.ruoyi.mapper.RuleAttendanceMainMapper;
  7 +import com.ruoyi.pojo.vo.DeleteAttendanceVo;
  8 +import com.ruoyi.pojo.vo.PeopleRequestVo;
  9 +import com.ruoyi.pojo.vo.PeopleResponseVo;
  10 +import com.ruoyi.pojo.vo.UpdateAttendanceVo;
  11 +import com.ruoyi.service.RuleAttendanceMainHelpService;
6 import com.ruoyi.service.RuleAttendanceMainService; 12 import com.ruoyi.service.RuleAttendanceMainService;
  13 +import org.springframework.beans.factory.annotation.Autowired;
7 import org.springframework.stereotype.Service; 14 import org.springframework.stereotype.Service;
8 15
  16 +import java.util.List;
  17 +
9 /** 18 /**
10 * @author 20412 19 * @author 20412
11 * @description 针对表【rule_attendance_main(考勤表)】的数据库操作Service实现 20 * @description 针对表【rule_attendance_main(考勤表)】的数据库操作Service实现
@@ -15,9 +24,22 @@ import org.springframework.stereotype.Service; @@ -15,9 +24,22 @@ import org.springframework.stereotype.Service;
15 public class RuleAttendanceMainServiceImpl extends ServiceImpl<RuleAttendanceMainMapper, RuleAttendanceMain> 24 public class RuleAttendanceMainServiceImpl extends ServiceImpl<RuleAttendanceMainMapper, RuleAttendanceMain>
16 implements RuleAttendanceMainService { 25 implements RuleAttendanceMainService {
17 26
  27 + @Autowired
  28 + private RuleAttendanceMainHelpService helpService;
  29 +
  30 + @Override
  31 + public void updateByJobCodeTotalQuantity(UpdateAttendanceVo vo, RuleAttendanceMain main) {
  32 + baseMapper.updateByIdTotalQuantity(vo,main);
  33 + }
  34 +
  35 + @Override
  36 + public void deleteByJobCodeTotalRecord(DeleteAttendanceVo vo) {
  37 + baseMapper.deleteByJobCodeTotalRecord(vo);
  38 + }
  39 +
18 @Override 40 @Override
19 - public void updateByIdTotalQuantity(RuleAttendanceMain main) {  
20 - baseMapper.updateByIdTotalQuantity(main); 41 + public List<RuleAttendanceMainHelp> queryPeopleList(PeopleRequestVo vo) {
  42 + return helpService.queryNowMonthPeople(vo);
21 } 43 }
22 } 44 }
23 45
ruoyi-admin/src/main/java/com/ruoyi/service/impl/RuleNumSettingServiceImpl.java
1 package com.ruoyi.service.impl; 1 package com.ruoyi.service.impl;
2 2
3 import cn.hutool.core.collection.CollectionUtil; 3 import cn.hutool.core.collection.CollectionUtil;
  4 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 5 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6 +import com.ruoyi.common.cache.NowSchedulingCache;
  7 +import com.ruoyi.domain.DriverScheduling;
5 import com.ruoyi.domain.RuleAttendanceMain; 8 import com.ruoyi.domain.RuleAttendanceMain;
  9 +import com.ruoyi.domain.RuleAttendanceMainHelp;
6 import com.ruoyi.domain.RuleNumSetting; 10 import com.ruoyi.domain.RuleNumSetting;
  11 +import com.ruoyi.driver.mapper.DriverSchedulingMapper;
7 import com.ruoyi.mapper.RuleNumSettingMapper; 12 import com.ruoyi.mapper.RuleNumSettingMapper;
8 import com.ruoyi.num.service.IRuleNumService; 13 import com.ruoyi.num.service.IRuleNumService;
9 import com.ruoyi.pojo.dto.AttendanceDto; 14 import com.ruoyi.pojo.dto.AttendanceDto;
@@ -12,19 +17,26 @@ import com.ruoyi.pojo.dto.RuleSchedulingDto; @@ -12,19 +17,26 @@ import com.ruoyi.pojo.dto.RuleSchedulingDto;
12 import com.ruoyi.pojo.vo.SchedulingRequestVo; 17 import com.ruoyi.pojo.vo.SchedulingRequestVo;
13 import com.ruoyi.pojo.vo.SchedulingResponseVo; 18 import com.ruoyi.pojo.vo.SchedulingResponseVo;
14 import com.ruoyi.scheduling.service.IRuleSchedulingService; 19 import com.ruoyi.scheduling.service.IRuleSchedulingService;
  20 +import com.ruoyi.service.RuleAttendanceMainHelpService;
15 import com.ruoyi.service.RuleAttendanceMainService; 21 import com.ruoyi.service.RuleAttendanceMainService;
16 import com.ruoyi.service.RuleNumSettingService; 22 import com.ruoyi.service.RuleNumSettingService;
17 import com.ruoyi.utils.ConstDateUtil; 23 import com.ruoyi.utils.ConstDateUtil;
  24 +import org.slf4j.Logger;
  25 +import org.slf4j.LoggerFactory;
18 import org.springframework.beans.BeanUtils; 26 import org.springframework.beans.BeanUtils;
19 import org.springframework.beans.factory.annotation.Autowired; 27 import org.springframework.beans.factory.annotation.Autowired;
20 import org.springframework.stereotype.Service; 28 import org.springframework.stereotype.Service;
  29 +import org.springframework.transaction.annotation.Transactional;
21 30
  31 +import javax.annotation.Resource;
22 import java.time.LocalDate; 32 import java.time.LocalDate;
23 import java.time.ZoneId; 33 import java.time.ZoneId;
24 import java.time.temporal.ChronoUnit; 34 import java.time.temporal.ChronoUnit;
25 import java.util.*; 35 import java.util.*;
26 import java.util.stream.Collectors; 36 import java.util.stream.Collectors;
27 37
  38 +import static com.ruoyi.common.ConstDriverProperties.BC_TYPE_IN;
  39 +import static com.ruoyi.common.ConstDriverProperties.BC_TYPE_OUT;
28 import static com.ruoyi.common.RuleSchedulingProperties.*; 40 import static com.ruoyi.common.RuleSchedulingProperties.*;
29 41
30 /** 42 /**
@@ -36,6 +48,9 @@ import static com.ruoyi.common.RuleSchedulingProperties.*; @@ -36,6 +48,9 @@ import static com.ruoyi.common.RuleSchedulingProperties.*;
36 public class RuleNumSettingServiceImpl extends ServiceImpl<RuleNumSettingMapper, RuleNumSetting> 48 public class RuleNumSettingServiceImpl extends ServiceImpl<RuleNumSettingMapper, RuleNumSetting>
37 implements RuleNumSettingService { 49 implements RuleNumSettingService {
38 50
  51 + private final static Logger log = LoggerFactory.getLogger(RuleNumSettingServiceImpl.class);
  52 + @Autowired
  53 + private RuleAttendanceMainHelpService helpService;
39 @Autowired 54 @Autowired
40 private IRuleSchedulingService schedulingService; 55 private IRuleSchedulingService schedulingService;
41 56
@@ -48,26 +63,52 @@ public class RuleNumSettingServiceImpl extends ServiceImpl&lt;RuleNumSettingMapper, @@ -48,26 +63,52 @@ public class RuleNumSettingServiceImpl extends ServiceImpl&lt;RuleNumSettingMapper,
48 @Autowired 63 @Autowired
49 private RuleAttendanceMainService attendanceMainService; 64 private RuleAttendanceMainService attendanceMainService;
50 65
  66 + @Autowired
  67 + private DriverSchedulingMapper schedulingMapper;
  68 +
  69 + @Resource
  70 + private NowSchedulingCache nowSchedulingCache;
  71 +
51 @Override 72 @Override
52 public List<SchedulingResponseVo> getSchedulingList(SchedulingRequestVo vo) { 73 public List<SchedulingResponseVo> getSchedulingList(SchedulingRequestVo vo) {
53 return baseMapper.getSchedulingList(vo); 74 return baseMapper.getSchedulingList(vo);
54 } 75 }
55 76
56 @Override 77 @Override
  78 + @Transactional(rollbackFor = Exception.class)
57 public void createAttendance() { 79 public void createAttendance() {
58 -  
59 // 临时表根据工号生成一个月的模板,固定下来,每天生成一次,如果当前月内的工号已经生成了一次排班,则跳过生成 80 // 临时表根据工号生成一个月的模板,固定下来,每天生成一次,如果当前月内的工号已经生成了一次排班,则跳过生成
60 // 用户可以修改临时排班表的数据,只能修改未来一个月内的数据 过一天后把数据存储到考勤表, 81 // 用户可以修改临时排班表的数据,只能修改未来一个月内的数据 过一天后把数据存储到考勤表,
61 // 获取需要生成的人员工号 82 // 获取需要生成的人员工号
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); 83 + try {
  84 + log.info("开始生成排班明细");
  85 + List<AttendanceDto> peopleList = baseMapper.getPeopleList();
  86 + List<Integer> settingList = peopleList.stream().map(AttendanceDto::getSettingId).distinct().collect(Collectors.toList());
  87 + // 获取规则集合
  88 + List<RuleSchedulingDto> ruleList = schedulingService.selectRuleSchedulingListVoBySettingIds(settingList);
  89 + // 获取班次
  90 + List<RuleNumDto> ruleNumDtoList = ruleNumSettingService.selectRuleNumBySettingId(settingList);
  91 + // 处理规则
  92 + List<RuleAttendanceMain> attendanceMains = handleAttendanceMain(peopleList, ruleList, ruleNumDtoList);
  93 + backCreatePeopleListLog(peopleList);
  94 + attendanceMainService.saveBatch(attendanceMains);
  95 + log.info("排班明细生成完毕");
  96 + } catch (Exception e) {
  97 + log.error("排班明细生成失败,失败原因:{}", e.getMessage());
  98 + throw new RuntimeException(e);
  99 + }
  100 + }
  101 +
  102 + private void backCreatePeopleListLog(List<AttendanceDto> peopleList) {
  103 + List<RuleAttendanceMainHelp> helpList = new ArrayList<>(peopleList.size());
  104 + Date date = new Date();
  105 + for (AttendanceDto dto : peopleList) {
  106 + RuleAttendanceMainHelp help = new RuleAttendanceMainHelp();
  107 + BeanUtils.copyProperties(dto, help);
  108 + help.setDateFlag(date);
  109 + helpList.add(help);
  110 + }
  111 + helpService.saveBatch(helpList);
71 } 112 }
72 113
73 private List<RuleAttendanceMain> handleAttendanceMain(List<AttendanceDto> peopleList, List<RuleSchedulingDto> ruleList, List<RuleNumDto> ruleNumDtoList) { 114 private List<RuleAttendanceMain> handleAttendanceMain(List<AttendanceDto> peopleList, List<RuleSchedulingDto> ruleList, List<RuleNumDto> ruleNumDtoList) {
@@ -88,11 +129,11 @@ public class RuleNumSettingServiceImpl extends ServiceImpl&lt;RuleNumSettingMapper, @@ -88,11 +129,11 @@ public class RuleNumSettingServiceImpl extends ServiceImpl&lt;RuleNumSettingMapper,
88 for (LocalDate date : dateList) { 129 for (LocalDate date : dateList) {
89 // 处理固定规则翻班 130 // 处理固定规则翻班
90 if (RULE_TYPE_FIXED.equals(dto.getRuleType())) { 131 if (RULE_TYPE_FIXED.equals(dto.getRuleType())) {
91 - handleFixed(date, mainList, ruleMap.get(settingId), attendanceDto,dto.getRuleDictName()); 132 + handleFixed(date, mainList, ruleMap.get(settingId), attendanceDto, dto.getRuleDictName());
92 } 133 }
93 // 处理星期翻班 134 // 处理星期翻班
94 else { 135 else {
95 - handleWeek(date, mainList, ruleMap.get(settingId), attendanceDto,dto.getRuleDictName()); 136 + handleWeek(date, mainList, ruleMap.get(settingId), attendanceDto, dto.getRuleDictName());
96 } 137 }
97 } 138 }
98 } 139 }
@@ -106,8 +147,9 @@ public class RuleNumSettingServiceImpl extends ServiceImpl&lt;RuleNumSettingMapper, @@ -106,8 +147,9 @@ public class RuleNumSettingServiceImpl extends ServiceImpl&lt;RuleNumSettingMapper,
106 main.setSchedulingDate(Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant())); 147 main.setSchedulingDate(Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant()));
107 main.setPosts(attendanceDto.getPosts()); 148 main.setPosts(attendanceDto.getPosts());
108 main.setRuleDictName(ruleDictName); 149 main.setRuleDictName(ruleDictName);
  150 + main.setFleetName(attendanceDto.getFleetName());
109 RuleSchedulingDto dto = null; 151 RuleSchedulingDto dto = null;
110 - dto = getRuleByWeek(main,ruleSchedulingDtoList, date,attendanceDto.getStartDate()); 152 + dto = getRuleByWeek(main, ruleSchedulingDtoList, date, attendanceDto.getStartDate());
111 main.setWorkFlag(dto.getId() == 0 ? FREE_FLAG : WORK_FLAG); 153 main.setWorkFlag(dto.getId() == 0 ? FREE_FLAG : WORK_FLAG);
112 BeanUtils.copyProperties(dto, main); 154 BeanUtils.copyProperties(dto, main);
113 main.setName(attendanceDto.getName()); 155 main.setName(attendanceDto.getName());
@@ -133,7 +175,7 @@ public class RuleNumSettingServiceImpl extends ServiceImpl&lt;RuleNumSettingMapper, @@ -133,7 +175,7 @@ public class RuleNumSettingServiceImpl extends ServiceImpl&lt;RuleNumSettingMapper,
133 if (TOMORROW_YES.equals(dto.getFirstSignInDayTomorrow())) { 175 if (TOMORROW_YES.equals(dto.getFirstSignInDayTomorrow())) {
134 main.setSecondQuittingSignInTime(handleTimeTomorrowByRule(date, main.getSecondQuittingSignInTime())); 176 main.setSecondQuittingSignInTime(handleTimeTomorrowByRule(date, main.getSecondQuittingSignInTime()));
135 } else { 177 } else {
136 - main.setSecondWorkSignInTime(ConstDateUtil.dateAddition(date.toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getSecondQuittingSignInTime()))); 178 + main.setSecondQuittingSignInTime(ConstDateUtil.dateAddition(date.toString(), ConstDateUtil.formatDate("HH:mm:ss", main.getSecondQuittingSignInTime())));
137 } 179 }
138 } 180 }
139 } 181 }
@@ -176,6 +218,7 @@ public class RuleNumSettingServiceImpl extends ServiceImpl&lt;RuleNumSettingMapper, @@ -176,6 +218,7 @@ public class RuleNumSettingServiceImpl extends ServiceImpl&lt;RuleNumSettingMapper,
176 main.setPosts(attendanceDto.getPosts()); 218 main.setPosts(attendanceDto.getPosts());
177 main.setRuleDictName(ruleDictName); 219 main.setRuleDictName(ruleDictName);
178 main.setSchedulingDate(Date.from(nowDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); 220 main.setSchedulingDate(Date.from(nowDate.atStartOfDay(ZoneId.systemDefault()).toInstant()));
  221 + main.setFleetName(attendanceDto.getFleetName());
179 Date startDate = attendanceDto.getStartDate(); 222 Date startDate = attendanceDto.getStartDate();
180 // 匹配当天应设置的规则 223 // 匹配当天应设置的规则
181 RuleSchedulingDto dto = getNowRuleByFixed(nowDate, startDate, ruleSchedulingDtoList); 224 RuleSchedulingDto dto = getNowRuleByFixed(nowDate, startDate, ruleSchedulingDtoList);
@@ -266,6 +309,74 @@ public class RuleNumSettingServiceImpl extends ServiceImpl&lt;RuleNumSettingMapper, @@ -266,6 +309,74 @@ public class RuleNumSettingServiceImpl extends ServiceImpl&lt;RuleNumSettingMapper,
266 return ruleNumService.selectRuleNumBySettingId(settingList); 309 return ruleNumService.selectRuleNumBySettingId(settingList);
267 } 310 }
268 311
  312 + @Override
  313 + public void manualAddBcCache() {
  314 + List<DriverScheduling> bcList = handleOtherPostsScheduling();
  315 + schedulingMapper.insertRoster(bcList);
  316 + bcList = schedulingMapper.queryToDay(ConstDateUtil.formatDate("yyyy-MM-dd"), null, null, null);
  317 + String date = ConstDateUtil.formatDate(new Date());
  318 + Map<String, List<DriverScheduling>> resultMap = new HashMap<>(800);
  319 + NowSchedulingCache.handlerResultMap(resultMap, bcList);
  320 + Map<String, List<DriverScheduling>> cacheScheduling = nowSchedulingCache.getCacheScheduling(date);
  321 + for (Map.Entry<String, List<DriverScheduling>> entry : cacheScheduling.entrySet()) {
  322 + String key = entry.getKey();
  323 + if (!Objects.isNull(resultMap.get(key))) {
  324 + resultMap.remove(key);
  325 + }
  326 + }
  327 + cacheScheduling.putAll(resultMap);
  328 + }
  329 +
  330 + private List<DriverScheduling> handleOtherPostsScheduling() {
  331 + QueryWrapper<RuleAttendanceMain> qw = new QueryWrapper<>();
  332 + qw.lambda()
  333 + .eq(RuleAttendanceMain::getWorkFlag, WORK_FLAG)
  334 + .eq(RuleAttendanceMain::getSchedulingDate, LocalDate.now());
  335 + List<RuleAttendanceMain> mainList = attendanceMainService.list(qw);
  336 + List<DriverScheduling> bcList = new ArrayList<>(mainList.size() * 2);
  337 + for (RuleAttendanceMain ruleAttendanceMain : mainList) {
  338 + // 第一段
  339 + DriverScheduling scheduling = getDriverScheduling(ruleAttendanceMain);
  340 + scheduling.setFcsjT(ruleAttendanceMain.getFirstWorkSignInTime().getTime());
  341 + scheduling.setBcType(BC_TYPE_OUT);
  342 + scheduling.setZdsjT(ruleAttendanceMain.getFirstWorkSignInTime().getTime());
  343 + scheduling.setScheduleDate(ruleAttendanceMain.getSchedulingDate());
  344 + bcList.add(scheduling);
  345 +
  346 + DriverScheduling scheduling1 = getDriverScheduling(ruleAttendanceMain);
  347 + scheduling1.setBcType(BC_TYPE_IN);
  348 + scheduling1.setZdsjT(ruleAttendanceMain.getFirstQuittingSignInTime().getTime());
  349 + scheduling1.setFcsjT(ruleAttendanceMain.getFirstQuittingSignInTime().getTime());
  350 + scheduling1.setScheduleDate(ruleAttendanceMain.getSchedulingDate());
  351 + bcList.add(scheduling1);
  352 + // 第二段
  353 + if (!Objects.isNull(ruleAttendanceMain.getSecondWorkSignInTime())) {
  354 + DriverScheduling scheduling2 = getDriverScheduling(ruleAttendanceMain);
  355 + scheduling2.setBcType(BC_TYPE_OUT);
  356 + scheduling2.setFcsjT(ruleAttendanceMain.getSecondWorkSignInTime().getTime());
  357 + scheduling2.setZdsjT(ruleAttendanceMain.getSecondWorkSignInTime().getTime());
  358 + scheduling2.setScheduleDate(ruleAttendanceMain.getSchedulingDate());
  359 + bcList.add(scheduling2);
  360 +
  361 + DriverScheduling scheduling3 = getDriverScheduling(ruleAttendanceMain);
  362 + scheduling3.setBcType(BC_TYPE_IN);
  363 + scheduling3.setFcsjT(ruleAttendanceMain.getSecondQuittingSignInTime().getTime());
  364 + scheduling3.setZdsjT(ruleAttendanceMain.getSecondQuittingSignInTime().getTime());
  365 + scheduling3.setScheduleDate(ruleAttendanceMain.getSchedulingDate());
  366 + bcList.add(scheduling3);
  367 + }
  368 + }
  369 + return bcList;
  370 + }
  371 +
  372 + private static DriverScheduling getDriverScheduling(RuleAttendanceMain ruleAttendanceMain) {
  373 + DriverScheduling scheduling = new DriverScheduling();
  374 + scheduling.setPosts(ruleAttendanceMain.getPosts());
  375 + scheduling.setJobCode(ruleAttendanceMain.getJobCode());
  376 + scheduling.setName(ruleAttendanceMain.getName());
  377 + scheduling.setFleetName(ruleAttendanceMain.getFleetName());
  378 + return scheduling;
  379 + }
269 380
270 } 381 }
271 382
ruoyi-admin/src/main/resources/application-druid-prd.yml
@@ -69,8 +69,8 @@ spring: @@ -69,8 +69,8 @@ spring:
69 allow: 69 allow:
70 url-pattern: /druid/* 70 url-pattern: /druid/*
71 # 控制台管理用户名和密码 71 # 控制台管理用户名和密码
72 - login-username: ruoyi  
73 - login-password: 123456 72 + login-username: qpgj
  73 + login-password: 2023#manager@qpgjuse
74 filter: 74 filter:
75 stat: 75 stat:
76 enabled: true 76 enabled: true
ruoyi-admin/src/main/resources/mapper/RuleAttendanceMainHelpMapper.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.RuleAttendanceMainHelpMapper">
  6 +
  7 + <resultMap id="BaseResultMap" type="com.ruoyi.domain.RuleAttendanceMainHelp">
  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="posts" column="posts" jdbcType="VARCHAR"/>
  12 + <result property="dateFlag" column="dateFlag" jdbcType="DATE"/>
  13 + <result property="fleetName" column="fleet_name" jdbcType="VARCHAR"/>
  14 + </resultMap>
  15 +
  16 + <sql id="Base_Column_List">
  17 + id,name,job_code,
  18 + posts,date_flag,fleet_name
  19 + </sql>
  20 + <select id="queryNowMonthPeople" resultMap="BaseResultMap" resultType="com.ruoyi.domain.RuleAttendanceMainHelp">
  21 + SELECT * from rule_attendance_main_help WHERE DATE_FORMAT( date_flag, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )
  22 + <if test="jobCode != null and jobCode != ''">
  23 + and job_code = #{jobCode}
  24 + </if>
  25 + <if test="posts != null and posts != ''">
  26 + and posts = #{posts}
  27 + </if>
  28 + <if test="name != null and name != ''">
  29 + and name = #{name}
  30 + </if>
  31 + </select>
  32 +</mapper>
ruoyi-admin/src/main/resources/mapper/RuleAttendanceMainMapper.xml
@@ -34,18 +34,32 @@ @@ -34,18 +34,32 @@
34 </sql> 34 </sql>
35 <update id="updateByIdTotalQuantity"> 35 <update id="updateByIdTotalQuantity">
36 update rule_attendance_main set 36 update rule_attendance_main set
37 - working_hour_plan = #{workingHourPlan},  
38 - working_hour_type = #{workingHourType},  
39 - first_work_sign_in_time = #{firstWorkSignInTime},  
40 - first_sign_in_working_range = #{firstSignInWorkingRange},  
41 - first_quitting_sign_in_time = #{firstQuittingSignInTime},  
42 - first_sign_in_quitting_range = #{firstSignInQuittingRange},  
43 - sign_in_time_out_range = #{signInTimeOutRange},  
44 - second_work_sign_in_time = #{secondWorkSignInTime},  
45 - second_sign_in_working_range = #{secondSignInWorkingRange},  
46 - second_quitting_sign_in_time = #{secondQuittingSignInTime},  
47 - second_sign_in_quitting_range = #{secondSignInQuittingRange},  
48 - work_flag = #{workFlag}  
49 - where id = #{id} 37 + working_hour_plan = #{main.workingHourPlan},
  38 + working_hour_type = #{main.workingHourType},
  39 + first_work_sign_in_time = #{main.firstWorkSignInTime},
  40 + first_sign_in_working_range = #{main.firstSignInWorkingRange},
  41 + first_quitting_sign_in_time = #{main.firstQuittingSignInTime},
  42 + first_sign_in_quitting_range = #{main.firstSignInQuittingRange},
  43 + sign_in_time_out_range = #{main.signInTimeOutRange},
  44 + second_work_sign_in_time = #{main.secondWorkSignInTime},
  45 + second_sign_in_working_range = #{main.secondSignInWorkingRange},
  46 + second_quitting_sign_in_time = #{main.secondQuittingSignInTime},
  47 + second_sign_in_quitting_range = #{main.secondSignInQuittingRange},
  48 + work_flag = #{main.workFlag}
  49 + where
  50 + job_code IN
  51 + <foreach collection="vo.jobCode" index="index" item="item" open="(" close=")" separator=",">
  52 + #{item}
  53 + </foreach>
  54 + and scheduling_date &gt;= #{vo.startDate} and scheduling_date &lt;= #{vo.endDate}
50 </update> 55 </update>
  56 + <delete id="deleteByJobCodeTotalRecord">
  57 + delete from rule_attendance_main
  58 + where job_code IN
  59 + <foreach collection="jobCode" index="index" item="item" separator="," open="(" close=")">
  60 + #{item}
  61 + </foreach>
  62 + and scheduling_date &gt;= #{startDate}
  63 + and scheduling_date &lt;= #{endDate}
  64 + </delete>
51 </mapper> 65 </mapper>
ruoyi-admin/src/main/resources/mapper/RuleNumSettingMapper.xml
@@ -22,6 +22,7 @@ @@ -22,6 +22,7 @@
22 <result property="name" column="personnel_name" jdbcType="VARCHAR"/> 22 <result property="name" column="personnel_name" jdbcType="VARCHAR"/>
23 <result property="settingId" column="setting_id" jdbcType="INTEGER"/> 23 <result property="settingId" column="setting_id" jdbcType="INTEGER"/>
24 <result property="startDate" column="start_date" jdbcType="DATE"/> 24 <result property="startDate" column="start_date" jdbcType="DATE"/>
  25 + <result property="fleetName" column="fleet_name" jdbcType="VARCHAR"/>
25 <!-- <collection property="ruleList" ofType="com.ruoyi.scheduling.domain.RuleScheduling">--> 26 <!-- <collection property="ruleList" ofType="com.ruoyi.scheduling.domain.RuleScheduling">-->
26 <!-- <result column="working_hour_plan" property="workingHourPlan" jdbcType="INTEGER"/>--> 27 <!-- <result column="working_hour_plan" property="workingHourPlan" jdbcType="INTEGER"/>-->
27 <!-- <result column="working_hour_type" property="workingHourType" jdbcType="INTEGER"/>--> 28 <!-- <result column="working_hour_type" property="workingHourType" jdbcType="INTEGER"/>-->
@@ -71,6 +72,7 @@ @@ -71,6 +72,7 @@
71 SELECT 72 SELECT
72 driver.job_code, 73 driver.job_code,
73 driver.personnel_name, 74 driver.personnel_name,
  75 + driver.fleet_name,
74 driver.posts, 76 driver.posts,
75 rule_setting_driver.setting_id, 77 rule_setting_driver.setting_id,
76 rule_setting_driver.start_date 78 rule_setting_driver.start_date