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 e0ed675..3387f74 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 @@ -283,7 +283,7 @@ public class WgzAppController { /** * 【考勤打卡】【打卡日历】 打卡日历记录 */ - @ApiOperation("【考勤打卡】【打卡日历】 打卡日历记录)") + @ApiOperation("【考勤打卡】【打卡日历】 打卡日历记录") //@PreAuthorize("@ss.hasPermi('wgzApp:user:userPunchTheCalendarRecord')") @GetMapping("/WgzAppUserPunchTheCalendarRecord") public AjaxResult userPunchTheCalendarRecord() { diff --git a/ruoyi-system/src/main/java/com/ruoyi/bgt/mapper/BgtProjectRecruitApplyMapper.java b/ruoyi-system/src/main/java/com/ruoyi/bgt/mapper/BgtProjectRecruitApplyMapper.java index 4ec42db..896c7eb 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/bgt/mapper/BgtProjectRecruitApplyMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/bgt/mapper/BgtProjectRecruitApplyMapper.java @@ -31,5 +31,6 @@ public interface BgtProjectRecruitApplyMapper extends BaseMapperPlus todayAttendanceList(@Param("dto") BgtAttendanceDayDTO dto); // 获取指定项目下的所有成员(分页) - Page underwayPage (@Param("page") Page page); + Page underwayPage (@Param("page") Page page,@Param("req") WgzAppUnderwayReq req); + } 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 24351e1..2e3290c 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 @@ -326,14 +326,13 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl userUnderway(WgzAppUnderwayReq req) { req.setUserId(SecurityUtils.getAppUserId()); Page pe = new Page<>(); pe.setCurrent(req.getPageNum()); pe.setSize(req.getPageSize()); - return PageUtils.buildDataInfo(baseMapper.underwayPage(pe)); + return PageUtils.buildDataInfo(baseMapper.underwayPage(pe,req)); } @Override diff --git a/ruoyi-system/src/main/java/com/ruoyi/common/constants/WgzAndBgtMessageConstant.java b/ruoyi-system/src/main/java/com/ruoyi/common/constants/WgzAndBgtMessageConstant.java index afe78d3..7e4c5f9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/common/constants/WgzAndBgtMessageConstant.java +++ b/ruoyi-system/src/main/java/com/ruoyi/common/constants/WgzAndBgtMessageConstant.java @@ -14,6 +14,7 @@ public class WgzAndBgtMessageConstant { public static final String LARGE_OTHER = "2"; //大类型-其它 public static final String SMALL_CARD = "0"; //小类型-补卡 public static final String SMALL_SYSTEM = "1"; //小类型-系统 + public static final String SMALL_EXIT = "2"; //小类型-退场 /** @@ -43,6 +44,12 @@ public class WgzAndBgtMessageConstant { //【工资结算】11-12 public static final String WGZ_SYSTEM_HEADLINE_PAYCALCULATION = "您正在申请【%s】项目,为期【%s】天的工资结算操作!"; public static final String WGZ_SYSTEM_SUBHEADING_PAYCALCULATION = "您已成功发起为期【%s】天,金额为【%s】的工资结算操作,请耐心等待回复!"; + //【上班缺卡】13-14 + public static final String WGZ_SYSTEM_HEADLINE_GOONDUTY = "您在【%s】有一次上班缺卡!"; + public static final String WGZ_SYSTEM_SUBHEADING_GOONDUTY = "您在【%s】当天有一条上班缺卡,请注意核对!"; + //【下班缺卡】15-16 + public static final String WGZ_SYSTEM_HEADLINE_OFFDUTY = "您在【%s】有一次下班缺卡!"; + public static final String WGZ_SYSTEM_SUBHEADING_OFFDUTY = "您在【%s】当天有一条下班缺卡,请注意核对!"; /** * 务工者给包工头提示 */ @@ -94,7 +101,15 @@ public class WgzAndBgtMessageConstant { case "111": return String.format(WGZ_SYSTEM_HEADLINE_PAYCALCULATION,mp.get("projectName"), mp.get("num")); case "112": - return String.format(WGZ_SYSTEM_SUBHEADING_PAYCALCULATION, mp.get("num"),mp.get("money")); + return String.format(WGZ_SYSTEM_SUBHEADING_PAYCALCULATION, mp.get("num"),mp.get("money")); //系统工资结算申请提示 + case "113": + return String.format(WGZ_SYSTEM_HEADLINE_GOONDUTY,mp.get("data")); + case "114": + return String.format(WGZ_SYSTEM_SUBHEADING_GOONDUTY, mp.get("data")); + case "115": + return String.format(WGZ_SYSTEM_HEADLINE_OFFDUTY,mp.get("data")); + case "116": + return String.format(WGZ_SYSTEM_SUBHEADING_OFFDUTY, mp.get("data")); //务工者向包工头申请报名 case "201": return String.format(WGZ_HEADLINE_APPLY, mp.get("userName"), mp.get("post")); diff --git a/ruoyi-system/src/main/java/com/ruoyi/fbs/service/IFbsProjectTaskService.java b/ruoyi-system/src/main/java/com/ruoyi/fbs/service/IFbsProjectTaskService.java index 6764362..2071d64 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/fbs/service/IFbsProjectTaskService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/fbs/service/IFbsProjectTaskService.java @@ -88,4 +88,9 @@ public interface IFbsProjectTaskService extends IServicePlus { * 任务详情-务工人员 */ AppTaskDetailRecruitVO recruit(Long id); + + /** + * 查询所有在进行中的任务 + */ + List findOngoingTask(); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsProjectTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsProjectTaskServiceImpl.java index 59c1bf1..9377b2b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsProjectTaskServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsProjectTaskServiceImpl.java @@ -264,4 +264,11 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl findOngoingTask() { + LambdaQueryWrapper wra = new LambdaQueryWrapper().eq(FbsProjectTask::getStatus, "1"); + return baseMapper.selectList(wra); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/task/BusinessTask.java b/ruoyi-system/src/main/java/com/ruoyi/task/BusinessTask.java index 27de408..e9f64de 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/task/BusinessTask.java +++ b/ruoyi-system/src/main/java/com/ruoyi/task/BusinessTask.java @@ -3,24 +3,35 @@ package com.ruoyi.task; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Console; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.ruoyi.bgt.domain.BgtProjectRecruit; import com.ruoyi.bgt.domain.BgtProjectRecruitApply; import com.ruoyi.bgt.service.IBgtProjectRecruitApplyService; import com.ruoyi.bgt.service.IBgtProjectRecruitService; +import com.ruoyi.common.constants.WgzAndBgtMessageConstant; import com.ruoyi.common.enums.RecruitApplyStatus; +import com.ruoyi.fbs.domain.FbsProjectTask; +import com.ruoyi.fbs.service.IFbsProjectTaskService; +import com.ruoyi.wgz.domain.WgzAttendance; +import com.ruoyi.wgz.domain.WgzMessage; +import com.ruoyi.wgz.service.IWgzAttendanceService; +import com.ruoyi.wgz.service.IWgzMessageService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.time.LocalDate; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; +import static com.ruoyi.common.constants.WgzAndBgtMessageConstant.*; + /** * 业务定时任务 * * @author ruoyi */ +@Slf4j @Component("businessTask") public class BusinessTask { @@ -29,6 +40,19 @@ public class BusinessTask @Autowired private IBgtProjectRecruitApplyService recruitApplyService; + + @Autowired + private IBgtProjectRecruitApplyService iBgtProjectRecruitApplyService; + + @Autowired + private IFbsProjectTaskService iFbsProjectTaskService; + + @Autowired + private IWgzMessageService iWgzMessageService; + + @Autowired + private IWgzAttendanceService iWgzAttendanceService; + /** * 招工任务招工时间结束自动拒绝未选择的务工者 */ @@ -49,4 +73,148 @@ public class BusinessTask Console.log("招工拒绝任务结束,此次拒绝任务个数:"+recruitList.size()); } + + /** + * 上班缺卡 + */ + public void workCardShortage(){ + //1、获取所有正在进行中的任务 + List ongoingTask = iFbsProjectTaskService.findOngoingTask(); + //2、获取所有招工信息 + List taskIds = new ArrayList<>(); + for (FbsProjectTask fbsProjectTask : ongoingTask) { + taskIds.add(fbsProjectTask.getId()); + } + List applyList = recruitService.list( + Wrappers.lambdaQuery() + .in(BgtProjectRecruit::getTaskId, taskIds) + ); + //3、获取每个招工下面的员工,然后判断他们是否上班缺卡 + LocalDate now = LocalDate.now(); + List lists = new ArrayList<>(); + List messages = new ArrayList<>(); + Map mp = new HashMap<>(); + mp.put("data",now.toString()); + for (BgtProjectRecruit recruit : applyList) { + List recruitApply = iBgtProjectRecruitApplyService.list( + Wrappers.lambdaQuery() + .eq(BgtProjectRecruitApply::getRecruitId, recruit.getId()) + ); + for (BgtProjectRecruitApply by : recruitApply) { + int count = iWgzAttendanceService.count( + Wrappers.lambdaQuery() + .eq(WgzAttendance::getUserId, by.getUserId()) + .eq(WgzAttendance::getRecruitId, by.getRecruitId()) + .eq(WgzAttendance::getDate, now) + ); + //表示有上班缺卡,添加缺卡信息 + if (count == 0) { + //添加缺卡信息 + WgzAttendance attendance = new WgzAttendance() + .setRecruitId(by.getRecruitId()) + .setUserId(by.getUserId()) + .setDailyWage(recruit.getRecruitAmount()) + .setDate(now) + .setMissedIn(1) + .setExceptionType("3,"); + lists.add(attendance); + //添加消息提醒 + WgzMessage wgzMessage = new WgzMessage(). + setSenderType(USERTYPE_SYSTEM). + setRecipientType(USERTYPE_WGZ). + setRecipientId(by.getUserId()). + setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"113")). + setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"114")). +// setTableId(apply.getId()). +// setTableName(SqlHelper.table(BgtProjectRecruitApply.class).getTableName()). + setMessageLargeType(LARGE_OTHER). + setMessageSmallType(SMALL_SYSTEM); + messages.add(wgzMessage); + } + } + } + //4、批量添加缺卡信息 + Boolean b = iWgzAttendanceService.addAMissingCardRecord(lists); + if (!b){ + log.error("批量添加上班缺卡信息失败!"); + } + //5、批量添加缺卡消息 + boolean b1 = iWgzMessageService.saveBatch(messages); + if (!b1){ + log.error("批量添加上班缺卡消息失败!"); + } + } + + + /** + * 下班缺卡 + */ + public void missingCard(){ + //1、获取所有正在进行中的任务 + List ongoingTask = iFbsProjectTaskService.findOngoingTask(); + //2、获取所有招工信息 + List taskIds = new ArrayList<>(); + for (FbsProjectTask fbsProjectTask : ongoingTask) { + taskIds.add(fbsProjectTask.getId()); + } + List applyList = recruitService.list( + Wrappers.lambdaQuery() + .in(BgtProjectRecruit::getTaskId, taskIds) + ); + //3、获取每个招工下面的员工,然后判断他们是否上班缺卡 + LocalDate now = LocalDate.now(); + List lists = new ArrayList<>(); + List messages = new ArrayList<>(); + Map mp = new HashMap<>(); + mp.put("data",now.toString()); + for (BgtProjectRecruit recruit : applyList) { + List recruitApply = iBgtProjectRecruitApplyService.list( + Wrappers.lambdaQuery() + .eq(BgtProjectRecruitApply::getRecruitId, recruit.getId()) + ); + for (BgtProjectRecruitApply by : recruitApply) { + WgzAttendance one = iWgzAttendanceService.getOne( + Wrappers.lambdaQuery() + .eq(WgzAttendance::getUserId, by.getUserId()) + .eq(WgzAttendance::getRecruitId, by.getRecruitId()) + .eq(WgzAttendance::getDate, now) + .isNull(WgzAttendance::getLeaveMarkId) + .isNull(WgzAttendance::getClockOutTime) + ); + //表示有下班缺卡,添加缺卡信息 + if (one != null) { + //添加缺卡信息 + WgzAttendance attendance = new WgzAttendance() + .setId(one.getId()) + .setMissedOut(1) + .setExceptionType("4,"); + lists.add(attendance); + //添加消息提醒 + WgzMessage wgzMessage = new WgzMessage(). + setSenderType(USERTYPE_SYSTEM). + setRecipientType(USERTYPE_WGZ). + setRecipientId(by.getUserId()). + setHeadline(WgzAndBgtMessageConstant.wgzMessage(mp,"115")). + setSubheading(WgzAndBgtMessageConstant.wgzMessage(mp,"116")). +// setTableId(apply.getId()). +// setTableName(SqlHelper.table(BgtProjectRecruitApply.class).getTableName()). + setMessageLargeType(LARGE_OTHER). + setMessageSmallType(SMALL_SYSTEM); + messages.add(wgzMessage); + } + + } + } + //4、批量添加缺卡信息 + boolean b = iWgzAttendanceService.updateBatchById(lists); + if (!b){ + log.error("批量修改下班缺卡消息失败!"); + } + //5、批量添加缺卡消息 + boolean b1 = iWgzMessageService.saveBatch(messages); + if (!b1){ + log.error("批量添加下班缺卡消息失败!"); + } + } + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzAppUnderwayReq.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzAppUnderwayReq.java index 6353711..dd43cd4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzAppUnderwayReq.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/bo/req/WgzAppUnderwayReq.java @@ -4,6 +4,8 @@ import com.ruoyi.common.bo.PageReq; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import io.swagger.v3.oas.annotations.Hidden; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; @@ -16,11 +18,11 @@ import java.time.LocalDateTime; @NoArgsConstructor @Accessors(chain = true) @ApiModel("项目进行中请求对象") -public class WgzAppUnderwayReq extends PageReq { + +public class WgzAppUnderwayReq extends PageReq implements Serializable { @ApiModelProperty("1进行中 2已完成") private String type; - @ApiModelProperty(value = "务工者唯一标识",hidden = true) private Long userId; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzAttendanceService.java b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzAttendanceService.java index 9f2a37f..be320b3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzAttendanceService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/wgz/service/IWgzAttendanceService.java @@ -123,4 +123,9 @@ public interface IWgzAttendanceService extends IServicePlus { */ BgtAttendanceDetailVO bgtAttendanceDetail(BgtAttendanceDetailDTO dto); + /** + * 添加缺卡记录 + */ + Boolean addAMissingCardRecord (List list); + } 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 e84315b..1672701 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 @@ -631,4 +631,10 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl list) { + return super.saveBatch(list); + } } diff --git a/ruoyi-system/src/main/resources/mapper/bgt/BgtProjectRecruitApplyMapper.xml b/ruoyi-system/src/main/resources/mapper/bgt/BgtProjectRecruitApplyMapper.xml index ba91b5d..65ac516 100644 --- a/ruoyi-system/src/main/resources/mapper/bgt/BgtProjectRecruitApplyMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/bgt/BgtProjectRecruitApplyMapper.xml @@ -92,14 +92,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" LEFT JOIN bgt_project_recruit as b on(a.recruit_id = b.id and b.del_flag = 0 ) LEFT JOIN fbs_project_task as c ON (b.task_id = c.id AND c.del_flag = 0) - - a.user_id = #{page.userId} AND + + a.user_id = #{req.userId} AND - + a.status IN ('3', '5') AND - + a.status IN ('6') AND diff --git a/ruoyi-system/src/main/resources/mapper/wgz/WgzMessageMapper.xml b/ruoyi-system/src/main/resources/mapper/wgz/WgzMessageMapper.xml index 8acd957..af30261 100644 --- a/ruoyi-system/src/main/resources/mapper/wgz/WgzMessageMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/wgz/WgzMessageMapper.xml @@ -63,6 +63,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" LEFT JOIN wgz_reissueacard as e ON e.id = a.table_id LEFT JOIN wgz_user as f ON f.id = e.user_id + + LEFT JOIN wgz_reissueacard as e ON e.id = a.table_id + LEFT JOIN wgz_user as f ON f.id = e.user_id + + + LEFT JOIN wgz_reissueacard as e ON e.id = a.table_id + LEFT JOIN wgz_user as f ON f.id = e.user_id + a.recipient_type = "1" AND a.recipient_id = #{page.recipientId} AND diff --git a/ruoyi/uploadPath/upload/2025/02/26/7dc5c1c6-ee91-47f4-b77d-62d7a98da4a0.png b/ruoyi/uploadPath/upload/2025/02/26/7dc5c1c6-ee91-47f4-b77d-62d7a98da4a0.png new file mode 100644 index 0000000..9b5574b Binary files /dev/null and b/ruoyi/uploadPath/upload/2025/02/26/7dc5c1c6-ee91-47f4-b77d-62d7a98da4a0.png differ