上下班缺卡定时任务
This commit is contained in:
		@ -31,5 +31,6 @@ public interface BgtProjectRecruitApplyMapper extends BaseMapperPlus<BgtProjectR
 | 
			
		||||
	List<BgtProjectRecruitApplyVO> todayAttendanceList(@Param("dto") BgtAttendanceDayDTO dto);
 | 
			
		||||
 | 
			
		||||
	// 获取指定项目下的所有成员(分页)
 | 
			
		||||
	Page<WgzAppUnderwayRes> underwayPage (@Param("page") Page<WgzAppUnderwayReq> page);
 | 
			
		||||
	Page<WgzAppUnderwayRes> underwayPage (@Param("page") Page<WgzAppUnderwayReq> page,@Param("req") WgzAppUnderwayReq req);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -326,14 +326,13 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public TableDataInfo<WgzAppUnderwayRes> userUnderway(WgzAppUnderwayReq req) {
 | 
			
		||||
		req.setUserId(SecurityUtils.getAppUserId());
 | 
			
		||||
		Page<WgzAppUnderwayReq> 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
 | 
			
		||||
 | 
			
		||||
@ -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"));
 | 
			
		||||
 | 
			
		||||
@ -88,4 +88,9 @@ public interface IFbsProjectTaskService extends IServicePlus<FbsProjectTask> {
 | 
			
		||||
	 * 任务详情-务工人员
 | 
			
		||||
	 */
 | 
			
		||||
	AppTaskDetailRecruitVO recruit(Long id);
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 查询所有在进行中的任务
 | 
			
		||||
	 */
 | 
			
		||||
	List<FbsProjectTask> findOngoingTask();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -264,4 +264,11 @@ public class FbsProjectTaskServiceImpl extends ServicePlusImpl<FbsProjectTaskMap
 | 
			
		||||
		appTaskDetailVO.setApplyList(recruitApplyService.appQueryList(bgtProjectRecruitApplyQueryDTO));
 | 
			
		||||
		return appTaskDetailVO;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public List<FbsProjectTask> findOngoingTask() {
 | 
			
		||||
		LambdaQueryWrapper<FbsProjectTask> wra = new LambdaQueryWrapper<FbsProjectTask>().eq(FbsProjectTask::getStatus, "1");
 | 
			
		||||
		return baseMapper.selectList(wra);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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<FbsProjectTask> ongoingTask = iFbsProjectTaskService.findOngoingTask();
 | 
			
		||||
		//2、获取所有招工信息
 | 
			
		||||
		List<Long> taskIds = new ArrayList<>();
 | 
			
		||||
		for (FbsProjectTask fbsProjectTask : ongoingTask) {
 | 
			
		||||
			taskIds.add(fbsProjectTask.getId());
 | 
			
		||||
		}
 | 
			
		||||
		List<BgtProjectRecruit> applyList = recruitService.list(
 | 
			
		||||
			Wrappers.<BgtProjectRecruit>lambdaQuery()
 | 
			
		||||
				.in(BgtProjectRecruit::getTaskId, taskIds)
 | 
			
		||||
		);
 | 
			
		||||
		//3、获取每个招工下面的员工,然后判断他们是否上班缺卡
 | 
			
		||||
		LocalDate now = LocalDate.now();
 | 
			
		||||
		List<WgzAttendance> lists = new ArrayList<>();
 | 
			
		||||
		List<WgzMessage> messages = new ArrayList<>();
 | 
			
		||||
		Map<String, String> mp = new HashMap<>();
 | 
			
		||||
		mp.put("data",now.toString());
 | 
			
		||||
		for (BgtProjectRecruit recruit : applyList) {
 | 
			
		||||
			List<BgtProjectRecruitApply> recruitApply = iBgtProjectRecruitApplyService.list(
 | 
			
		||||
				Wrappers.<BgtProjectRecruitApply>lambdaQuery()
 | 
			
		||||
					.eq(BgtProjectRecruitApply::getRecruitId, recruit.getId())
 | 
			
		||||
			);
 | 
			
		||||
			for (BgtProjectRecruitApply by : recruitApply) {
 | 
			
		||||
				int count = iWgzAttendanceService.count(
 | 
			
		||||
					Wrappers.<WgzAttendance>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<FbsProjectTask> ongoingTask = iFbsProjectTaskService.findOngoingTask();
 | 
			
		||||
		//2、获取所有招工信息
 | 
			
		||||
		List<Long> taskIds = new ArrayList<>();
 | 
			
		||||
		for (FbsProjectTask fbsProjectTask : ongoingTask) {
 | 
			
		||||
			taskIds.add(fbsProjectTask.getId());
 | 
			
		||||
		}
 | 
			
		||||
		List<BgtProjectRecruit> applyList = recruitService.list(
 | 
			
		||||
			Wrappers.<BgtProjectRecruit>lambdaQuery()
 | 
			
		||||
				.in(BgtProjectRecruit::getTaskId, taskIds)
 | 
			
		||||
		);
 | 
			
		||||
		//3、获取每个招工下面的员工,然后判断他们是否上班缺卡
 | 
			
		||||
		LocalDate now = LocalDate.now();
 | 
			
		||||
		List<WgzAttendance> lists = new ArrayList<>();
 | 
			
		||||
		List<WgzMessage> messages = new ArrayList<>();
 | 
			
		||||
		Map<String, String> mp = new HashMap<>();
 | 
			
		||||
		mp.put("data",now.toString());
 | 
			
		||||
		for (BgtProjectRecruit recruit : applyList) {
 | 
			
		||||
			List<BgtProjectRecruitApply> recruitApply = iBgtProjectRecruitApplyService.list(
 | 
			
		||||
				Wrappers.<BgtProjectRecruitApply>lambdaQuery()
 | 
			
		||||
					.eq(BgtProjectRecruitApply::getRecruitId, recruit.getId())
 | 
			
		||||
			);
 | 
			
		||||
			for (BgtProjectRecruitApply by : recruitApply) {
 | 
			
		||||
				WgzAttendance one = iWgzAttendanceService.getOne(
 | 
			
		||||
					Wrappers.<WgzAttendance>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("批量添加下班缺卡消息失败!");
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -123,4 +123,9 @@ public interface IWgzAttendanceService extends IServicePlus<WgzAttendance> {
 | 
			
		||||
	 */
 | 
			
		||||
	BgtAttendanceDetailVO bgtAttendanceDetail(BgtAttendanceDetailDTO dto);
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 添加缺卡记录
 | 
			
		||||
	 */
 | 
			
		||||
	Boolean addAMissingCardRecord (List<WgzAttendance> list);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -631,4 +631,10 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public Boolean addAMissingCardRecord(List<WgzAttendance> list) {
 | 
			
		||||
		return super.saveBatch(list);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user