diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzAppController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzAppController.java index df1ed50..730c65b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzAppController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/wgz/controller/WgzAppController.java @@ -6,6 +6,7 @@ import com.ruoyi.bgt.service.IBgtProjectRecruitApplyService; import com.ruoyi.bgt.service.IBgtProjectRecruitService; import com.ruoyi.bgt.service.IBgtUserService; + import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.bo.AnnexQueryBo; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.BgtUser; @@ -105,6 +106,7 @@ */ @ApiOperation("【务工者账号注册】") @PostMapping("/wgzRegister") + @RepeatSubmit public AjaxResult userRegister(@Validated @RequestBody WgzAppRegisterReq bo) { return AjaxResult.success(iWgzUserService.userRegister(bo)); } @@ -124,6 +126,7 @@ */ @ApiOperation("【我的】修改用户头像") // //@PreAuthorize("@ss.hasPermi('wgzApp:user:userModifyingUserProfilePicture')") + @RepeatSubmit @PutMapping("/wgzUserModifyingUserProfilePicture") public AjaxResult userModifyingUserProfilePicture(@Validated @RequestBody WgzAppModifyingUserProfilePictureReq req) { return AjaxResult.success(iWgzUserService.userModifyingUserProfilePicture(req)); @@ -144,6 +147,7 @@ */ @ApiOperation("【我的】实名认证") //@PreAuthorize("@ss.hasPermi('wgzApp:user:userRealNameAuthentication')") + @RepeatSubmit @PutMapping("/wgzUserRealNameAuthentication") public AjaxResult userRealNameAuthentication(@Validated @RequestBody WgzAppRealNameAuthenticationReq req) { return AjaxResult.success(iWgzUserService.userRealNameAuthentication(req)); @@ -183,6 +187,7 @@ */ @ApiOperation("【我的】【岗前培训】岗前培训·提交试卷") //@PreAuthorize("@ss.hasPermi('wgzApp:user:userSubmitATestPaper')") + @RepeatSubmit @PostMapping("/WgzUserSubmitATestPaper") public AjaxResult userSubmitATestPaper(@Validated @RequestBody WgzAppSubmitATestPaperReq req) { return AjaxResult.success(iWgzQuestionSaveService.userSubmitATestPaper(req)); @@ -203,6 +208,7 @@ */ @ApiOperation("【我的】【请假】请假·提交请假(上下班的时间需要等待zt创建好mysql字段)") //@PreAuthorize("@ss.hasPermi('wgzApp:user:userSubmitLeave')") + @RepeatSubmit @PostMapping("/WgzAppSubmitLeave") public AjaxResult userSubmitLeave(@Validated @RequestBody WgzAppSubmitLeaveReq req) { return AjaxResult.success(iWgzLeaveService.userSubmitLeave(req)); @@ -213,6 +219,7 @@ */ @ApiOperation("【我的】【请假】请假·取消请假") //@PreAuthorize("@ss.hasPermi('wgzApp:user:userCancelLeave')") + @RepeatSubmit @PutMapping("/WgzAppUserCancelLeave") public AjaxResult userCancelLeave(@Validated @RequestBody WgzAppCancelLeaveReq req) { return AjaxResult.success(iWgzLeaveService.userCancelLeave(req)); @@ -274,6 +281,7 @@ */ @ApiOperation("【考勤打卡】【打卡】 提交上下班打卡)") //@PreAuthorize("@ss.hasPermi('wgzApp:user:userSubmitTheClock')") + @RepeatSubmit @PostMapping("/WgzAppUserSubmitTheClock") public AjaxResult userSubmitTheClock(@Validated @RequestBody WgzAppSubmitTheClockReq req) { return AjaxResult.success(iWgzAttendanceService.userSubmitTheClock(req)); @@ -304,6 +312,7 @@ */ @ApiOperation("【考勤打卡】【打卡日历】 补卡申请)") //@PreAuthorize("@ss.hasPermi('wgzApp:user:userCardReplacementApplication')") + @RepeatSubmit @PostMapping("/WgzAppUserCardReplacementApplication") public AjaxResult userCardReplacementApplication(@Validated @RequestBody WgzAppCardReplacementApplicationReq req) { return AjaxResult.success(iWgzReissueacardService.userCardReplacementApplication(req)); @@ -364,6 +373,7 @@ */ @ApiOperation("【首页】【已报名项目】 已报名项目·取消报名)") //@PreAuthorize("@ss.hasPermi('wgzApp:user:userCancelRegistration')") + @RepeatSubmit @DeleteMapping("/WgzAppUserCancelRegistration/{recruitApplyId}") public AjaxResult userCancelRegistration(@NotEmpty(message = "招工主键不能为空") @PathVariable Long recruitApplyId) { return AjaxResult.success(iBgtProjectRecruitApplyService.userCancelRegistration(recruitApplyId)); @@ -447,6 +457,7 @@ */ @ApiOperation("【首页】【项目进行中|已完成项目】 申请工资结算(新增)") //@PreAuthorize("@ss.hasPermi('wgzApp:user:userApplyForPayrollSettlementAdd')") + @RepeatSubmit @PostMapping("/WgzAppUserApplyForPayrollSettlementAdd") public AjaxResult userApplyForPayrollSettlementAdd(@Validated @RequestBody WgzApplyForPayrollSettlementAddReq req) { return AjaxResult.success(iWgzPayCalculationService.userApplyForPayrollSettlementAdd(req)); @@ -498,6 +509,7 @@ */ @ApiOperation("【消息】【报名消息】 报名消息·确认|拒绝报名") //@PreAuthorize("@ss.hasPermi('wgzApp:user:userConfirmRegistration')") + @RepeatSubmit @PutMapping("/WgzAppUserConfirmRegistration") public AjaxResult userConfirmRegistration(@Validated @RequestBody WgzAppConfirmRegistrationReq req) { return AjaxResult.success(iBgtProjectRecruitApplyService.userConfirmRegistration(req)); @@ -597,6 +609,7 @@ */ @ApiOperation("【通用】修改已读未读状态") //@PreAuthorize("@ss.hasPermi('wgzApp:user:userReadUnread')") + @RepeatSubmit @PutMapping("/WgzAppUserReadUnread") public AjaxResult userReadUnread(@Validated @RequestBody WgzAppReadUnreadReq req) { return AjaxResult.success(iWgzMessageService.userReadUnread(req)); diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index 83a5a8c..e0b970f 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -12,9 +12,9 @@ spring: # 主库数据源 master: driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/work_platform?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true - username: work_platform - password: work_platform + url: jdbc:mysql://localhost:3386/lhyg?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true + username: root2 + password: CQyj20200808! # 从库数据源 # slave: # driverClassName: com.mysql.cj.jdbc.Driver @@ -72,7 +72,7 @@ spring: # 数据库索引 database: 15 # 密码 - password: 123456 +# password: 123456 # 连接超时时间 timeout: 10s # 是否开启ssl diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index acc6bdc..5b16d9e 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -68,7 +68,7 @@ spring: messages: # 国际化资源文件路径 basename: i18n/messages - # dev 开发环境 pord 正式环境 + # dev 开发环境 prod 正式环境 profiles: active: dev # 文件上传 diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/service/impl/BgtProjectRecruitApplyServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/service/impl/BgtProjectRecruitApplyServiceImpl.java index a139ee8..88d3b44 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/service/impl/BgtProjectRecruitApplyServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/service/impl/BgtProjectRecruitApplyServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; +import com.google.errorprone.annotations.Var; import com.ruoyi.bgt.bo.BgtProjectRecruitApplyQueryBo; import com.ruoyi.bgt.domain.BgtMessage; import com.ruoyi.bgt.domain.BgtProjectRecruit; @@ -41,6 +42,7 @@ import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import springfox.documentation.builders.ValidationResult; import java.text.DecimalFormat; import java.time.LocalDate; @@ -193,7 +195,6 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl list = baseMapper.selectList(Wrappers.lambdaQuery() .eq(BgtProjectRecruitApply::getUserId, recruitApply.getUserId()) @@ -270,7 +271,7 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl(). eq(BgtProjectRecruitApply::getUserId, appUserId). @@ -283,22 +284,26 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl 0) { throw new RuntimeException("已有工地!不可再次申请!"); } + //3-3、是否重复申请同一工地(先检查最后一次是否离场或取消,如果是就还能再次申请这个项目,否则无法申请) + BgtProjectRecruitApply oneApply = baseMapper.selectOne( + new LambdaQueryWrapper(). + eq(BgtProjectRecruitApply::getUserId, appUserId). + eq(BgtProjectRecruitApply::getRecruitId, id). + last("limit 1") + ); + if (oneApply!=null && !(oneApply.getStatus().equals("6") || oneApply.getStatus().equals("7"))) { + throw new RuntimeException("已申请过当前项目,如若再次申请请发起退场或者取消操作!"); + } + //3-4、检查当前用户是否满足对应工种 List list = Arrays.asList(byId.getTypeOfWork().split(",")); if (!list.contains(appById.getTypeOfWork())){ throw new RuntimeException("工种不匹配!"); } - //4、判断当前用户是否已经申请过了,如果已经申请过了,就不能再次申请了 - Integer integer = baseMapper.selectCount( - new LambdaQueryWrapper(). - eq(BgtProjectRecruitApply::getUserId, appUserId). - eq(BgtProjectRecruitApply::getRecruitId, id) - ); - if (integer > 0) { - throw new RuntimeException("已申请过了!不可再次申请!"); - } + //3、插入数据 BgtProjectRecruitApply bgtProjectRecruitApply = new BgtProjectRecruitApply(); bgtProjectRecruitApply.setTaskId(appById.getTaskId()); @@ -478,15 +483,16 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl 0) { + bgtProjectRecruitApply.setStatus("7"); + if (baseMapper.updateById(bgtProjectRecruitApply) > 0) { Long appUserId = SecurityUtils.getAppUserId(); + BgtProjectRecruitApply by = baseMapper.selectById(recruitApplyId); BgtProjectRecruit appById = iBgtProjectRecruitService.getAppById(by.getRecruitId()); Map mp = new HashMap<>(); mp.put("projectName", appById.getRecruitName()); @@ -497,8 +503,8 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl wgzAppRegisteredProjectResTableDataInfo = PageUtils.buildDataInfo(baseMapper.userRegisteredProject(pe, userId)); - wgzAppRegisteredProjectResTableDataInfo.getRows().forEach(registeredProjectRes -> { - //1、获取当前用户的取消、满员、失效、同意、拒绝状态 - //1、获取当前项目下的成员 - List wgzUser = baseMapper.GetsTheMembersUnderTheCurrentProject(registeredProjectRes.getId()); - }); +// wgzAppRegisteredProjectResTableDataInfo.getRows().forEach(registeredProjectRes -> { +// //1、获取当前用户的取消、满员、失效、同意、拒绝状态 +// //1、获取当前项目下的成员 +// List wgzUser = baseMapper.GetsTheMembersUnderTheCurrentProject(registeredProjectRes.getId()); +// }); return wgzAppRegisteredProjectResTableDataInfo; } @@ -264,7 +264,9 @@ public class BgtProjectRecruitServiceImpl extends ServicePlusImpl0){ BgtDayAttendanceCountVO bgtDayAttendanceCountVO = bgtDayAttendanceCountVOS.get(bgtDayAttendanceCountVOS.size() - 1); int rate = new BigDecimal(bgtDayAttendanceCountVO.getReportToDutyNum()).divide(new BigDecimal(totalNum), 2, RoundingMode.HALF_UP) .multiply(new BigDecimal(100)).intValue(); diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzAppDailyClockReq.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzAppDailyClockReq.java index 74acda5..37507e6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzAppDailyClockReq.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzAppDailyClockReq.java @@ -12,6 +12,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.io.Serializable; +import java.time.LocalDate; import java.time.LocalDateTime; @Data @@ -22,6 +23,9 @@ public class WgzAppDailyClockReq implements Serializable { @ApiModelProperty("日报状态(0正常 1补卡)") private String status; + @ApiModelProperty("status为1时,补卡日期") + private LocalDateTime rqData; + @ApiModelProperty("今日完成工作") private String finishToday; diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzAttendanceServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzAttendanceServiceImpl.java index 3b39f32..de2f986 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzAttendanceServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzAttendanceServiceImpl.java @@ -188,6 +188,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl 3; + public boolean isMinutesDifferenceGreaterThanThree(LocalDateTime startTime, LocalDateTime endTime) { + // 计算两个时间之间的持续时间(秒级精度) + long seconds = Duration.between(startTime, endTime).getSeconds(); + // 超过 180 秒(3 分钟)则返回 true + return Math.abs(seconds) > 180; } @Override diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzDailyClockServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzDailyClockServiceImpl.java index 8fc3f1a..8bfa094 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzDailyClockServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzDailyClockServiceImpl.java @@ -178,9 +178,9 @@ public class WgzDailyClockServiceImpl extends ServicePlusImpl queryWrapper = new QueryWrapper<>(); - queryWrapper.apply("DATE_FORMAT(dily_time, '%Y-%m') = {0}", req.getYearMonth()); // 使用 apply 方法添加自定义 SQL 条件 - List wgzDailyClocks = baseMapper.selectList(queryWrapper); + Long appUserId = SecurityUtils.getAppUserId(); + LambdaQueryWrapper apply = new LambdaQueryWrapper().eq(WgzDailyClock::getUserId, appUserId).apply("DATE_FORMAT(dily_time, '%Y-%m') = {0}", req.getYearMonth()); + List wgzDailyClocks = baseMapper.selectList(apply); //3、查看当前人、当前项目、当前月是否有请假 Map ll = iWgzLeaveService.selectByUserCancelLeave(req.getYearMonth()); //4、将获取的年月与数据库中的日期进行比对,然后填充数据 @@ -195,7 +195,6 @@ public class WgzDailyClockServiceImpl extends ServicePlusImpl apply = new LambdaQueryWrapper() +// .eq(WgzDailyClock::getUserId, appUserId) +// .eq(WgzDailyClock::getRecruitId, appById.getId()) +// .eq(WgzDailyClock::getDilyTime, now); +// List wgzDailyClocks = baseMapper.selectList(apply); //1、组装数据 WgzDailyClock dc = new WgzDailyClock(); BeanUtils.copyProperties(req,dc); dc.setStatus(req.getStatus()); dc.setRecruitId(appUserId); dc.setUserId(appUserId); - dc.setDilyTime(LocalDateTime.now()); + dc.setDilyTime(now); dc.setAuditorUserId(appById.getUserId()); int insert = baseMapper.insert(dc); //2、插入成功,且状态为1,那么就需要发送消息给【补日报】的人和上级【招工】 diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzMessageServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzMessageServiceImpl.java index 60ccccd..871175b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzMessageServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/impl/WgzMessageServiceImpl.java @@ -237,7 +237,7 @@ public class WgzMessageServiceImpl extends ServicePlusImpl +