完善细节,修复日报补卡消息
This commit is contained in:
		@ -27,6 +27,7 @@ import com.ruoyi.common.enums.RecruitStatus;
 | 
			
		||||
import com.ruoyi.common.exception.BaseException;
 | 
			
		||||
import com.ruoyi.common.service.IAnnexService;
 | 
			
		||||
import com.ruoyi.common.service.IAsyncService;
 | 
			
		||||
import com.ruoyi.common.service.IWgzService;
 | 
			
		||||
import com.ruoyi.common.utils.PageUtils;
 | 
			
		||||
import com.ruoyi.common.utils.SecurityUtils;
 | 
			
		||||
import com.ruoyi.system.service.ISysDictTypeService;
 | 
			
		||||
@ -89,6 +90,9 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
 | 
			
		||||
	@Autowired
 | 
			
		||||
	private IAsyncService iAsyncService;
 | 
			
		||||
 | 
			
		||||
	@Autowired
 | 
			
		||||
	private IWgzService iWgzService;
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public BgtProjectRecruitApply queryById(Long id) {
 | 
			
		||||
		return getById(id);
 | 
			
		||||
@ -559,9 +563,10 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
 | 
			
		||||
		//2、当前申请报名的工地信息
 | 
			
		||||
		BgtProjectRecruitApply recruitApply = queryById(req.getRecruitApplyId());
 | 
			
		||||
		BgtProjectRecruit recruit = iBgtProjectRecruitService.getAppById(recruitApply.getRecruitId());
 | 
			
		||||
		//数据库行级锁
 | 
			
		||||
		String s = iWgzMessageService.JudgingRecruitment(recruit.getId(), recruit.getRecruitStaffNum(), recruit.getRecruitEndTime());
 | 
			
		||||
		switch (s) {
 | 
			
		||||
		//数据库行级锁(判断是否满员或失效 )
 | 
			
		||||
		Map<String, Object> judMp = iWgzMessageService.JudgingRecruitment(recruit.getId(), recruit.getRecruitStaffNum(), recruit.getRecruitEndTime());
 | 
			
		||||
		String status = judMp.get("status").toString();
 | 
			
		||||
		switch (status) {
 | 
			
		||||
			case "1":
 | 
			
		||||
				//异步修改状态为已招满
 | 
			
		||||
				iAsyncService.updateRecruitStatus(recruit);
 | 
			
		||||
@ -569,6 +574,15 @@ public class BgtProjectRecruitApplyServiceImpl extends ServicePlusImpl<BgtProjec
 | 
			
		||||
			case "2":
 | 
			
		||||
				throw new RuntimeException("已失效!");
 | 
			
		||||
		}
 | 
			
		||||
//		int count = ((Number) judMp.get("count")).intValue();
 | 
			
		||||
//		if (count > 0){
 | 
			
		||||
//			throw new RuntimeException("您已在其他工地!");
 | 
			
		||||
//		}
 | 
			
		||||
		//数据库行级锁(是否进入其他工地)
 | 
			
		||||
		Integer i = iWgzService.QueryWhetherTheCurrentUserHasAnOngoingProject(byUserId.getUserId());
 | 
			
		||||
		if (i>0) {
 | 
			
		||||
			throw new RuntimeException("您已在其他工地!");
 | 
			
		||||
		}
 | 
			
		||||
		//3、更新报名状态、及更新消息的操作状态(用户同意更新进场时间、状态;用户拒绝更新状态)
 | 
			
		||||
		BgtProjectRecruitApply apply = new BgtProjectRecruitApply();
 | 
			
		||||
		apply.setId(req.getRecruitApplyId());
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,25 @@
 | 
			
		||||
package com.ruoyi.common.mapper;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.bgt.domain.BgtProjectRecruitApply;
 | 
			
		||||
import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache;
 | 
			
		||||
import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
 | 
			
		||||
import com.ruoyi.common.domain.Annex;
 | 
			
		||||
import org.apache.ibatis.annotations.CacheNamespace;
 | 
			
		||||
import org.apache.ibatis.annotations.Options;
 | 
			
		||||
import org.apache.ibatis.annotations.Param;
 | 
			
		||||
import org.apache.ibatis.annotations.Select;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 务工者Mapper接口
 | 
			
		||||
 *
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 * @date 2025-02-14
 | 
			
		||||
 */
 | 
			
		||||
// 如使需切换数据源 请勿使用缓存 会造成数据不一致现象
 | 
			
		||||
@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class)
 | 
			
		||||
public interface WgzMapper extends BaseMapperPlus<BgtProjectRecruitApply> {
 | 
			
		||||
 | 
			
		||||
	@Select("SELECT count(1)  FROM bgt_project_recruit_apply WHERE user_id = #{userId} and status in ('3','5')  FOR UPDATE")
 | 
			
		||||
	@Options(useCache = false)  // 禁用 MyBatis 缓存
 | 
			
		||||
	Integer QueryWhetherTheCurrentUserHasAnOngoingProject(@Param("userId") Long userId);
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,9 @@
 | 
			
		||||
package com.ruoyi.common.service;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.bgt.domain.BgtProjectRecruitApply;
 | 
			
		||||
import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
 | 
			
		||||
 | 
			
		||||
public interface IWgzService extends IServicePlus<BgtProjectRecruitApply> {
 | 
			
		||||
	//行级锁-查询当前用户是否已有进行中项目
 | 
			
		||||
	Integer QueryWhetherTheCurrentUserHasAnOngoingProject(Long userId);
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,16 @@
 | 
			
		||||
package com.ruoyi.common.service.impl;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.bgt.domain.BgtProjectRecruitApply;
 | 
			
		||||
import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
 | 
			
		||||
import com.ruoyi.common.mapper.WgzMapper;
 | 
			
		||||
import com.ruoyi.common.service.IWgzService;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
@Service
 | 
			
		||||
public class WgzServiceImpl extends ServicePlusImpl<WgzMapper, BgtProjectRecruitApply> implements IWgzService {
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public Integer QueryWhetherTheCurrentUserHasAnOngoingProject(Long userId) {
 | 
			
		||||
		return baseMapper.QueryWhetherTheCurrentUserHasAnOngoingProject(userId);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -31,6 +31,7 @@ public class WgzAppRegisteredProjectRes implements Serializable {
 | 
			
		||||
	private String recruitName;
 | 
			
		||||
 | 
			
		||||
	@ApiModelProperty("创建时间/报名时间")
 | 
			
		||||
	@JsonFormat(pattern = "yyyy-MM-dd", shape = JsonFormat.Shape.STRING)
 | 
			
		||||
	private LocalDateTime createTime;
 | 
			
		||||
 | 
			
		||||
	@ApiModelProperty("封面图(多个逗号分隔)")
 | 
			
		||||
 | 
			
		||||
@ -15,6 +15,7 @@ import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import java.time.LocalDate;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 消息Service接口
 | 
			
		||||
@ -91,7 +92,7 @@ public interface IWgzMessageService extends IServicePlus<WgzMessage> {
 | 
			
		||||
	/**
 | 
			
		||||
	 * 判断招工是否已招满或已过期
 | 
			
		||||
	 */
 | 
			
		||||
	String JudgingRecruitment(Long recruitId, int num, LocalDate recruitEndTime);
 | 
			
		||||
	Map<String, Object> JudgingRecruitment(Long recruitId, int num, LocalDate recruitEndTime);
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 修改已读未读状态
 | 
			
		||||
 | 
			
		||||
@ -251,6 +251,7 @@ public class WgzDailyClockServiceImpl extends ServicePlusImpl<WgzDailyClockMappe
 | 
			
		||||
		if ( insert > 0 && req.getStatus().equals("1")){
 | 
			
		||||
			WgzUser byId = wgzUserService.findByUserId(appUserId);
 | 
			
		||||
			Map<String, String> mp = new HashMap<>();
 | 
			
		||||
			mp.put("userName",byId.getUsername());
 | 
			
		||||
			mp.put("data",String.valueOf(LocalDate.now()));
 | 
			
		||||
			WgzMessage wgzMessage = new WgzMessage().
 | 
			
		||||
				setSenderType(USERTYPE_SYSTEM).
 | 
			
		||||
 | 
			
		||||
@ -212,7 +212,8 @@ public class WgzMessageServiceImpl extends ServicePlusImpl<WgzMessageMapper, Wgz
 | 
			
		||||
		//2、根据招工ID得到招工信息及附件
 | 
			
		||||
		WgzAppRegistrationInformationRes byRecruitIdData = baseMapper.findByRecruitIdData(byId.getTableId());
 | 
			
		||||
		byRecruitIdData.setMessageId(byId.getId()).setIsOperation(byId.getIsOperation());
 | 
			
		||||
		byRecruitIdData.setFull(JudgingRecruitment(byId.getTableId(), Integer.parseInt(byRecruitIdData.getRecruitStaffNum()), byRecruitIdData.getRecruitEndTime()));
 | 
			
		||||
		Map<String, Object> stringObjectMap = JudgingRecruitment(byId.getTableId(), Integer.parseInt(byRecruitIdData.getRecruitStaffNum()), byRecruitIdData.getRecruitEndTime());
 | 
			
		||||
		byRecruitIdData.setFull(stringObjectMap.get("status").toString());
 | 
			
		||||
		return byRecruitIdData;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -231,15 +232,20 @@ public class WgzMessageServiceImpl extends ServicePlusImpl<WgzMessageMapper, Wgz
 | 
			
		||||
	 * @return
 | 
			
		||||
	 */
 | 
			
		||||
	@Override
 | 
			
		||||
	public String JudgingRecruitment(Long recruitId,int num,LocalDate recruitEndTime) {
 | 
			
		||||
	public Map<String, Object> JudgingRecruitment(Long recruitId,int num,LocalDate recruitEndTime) {
 | 
			
		||||
		Map<String, Object> mp = new HashMap<>();
 | 
			
		||||
		//使用数据库行级锁
 | 
			
		||||
		int count = baseMapper.countRecruitApply(recruitId);
 | 
			
		||||
		if(count == num){
 | 
			
		||||
			return "1"; //已招满
 | 
			
		||||
		}
 | 
			
		||||
		mp.put("count", count);
 | 
			
		||||
		if (LocalDate.now().isAfter(recruitEndTime)){
 | 
			
		||||
			return "2"; //已失效
 | 
			
		||||
			mp.put("status", "2");
 | 
			
		||||
			return mp; //已失效
 | 
			
		||||
		}
 | 
			
		||||
		return "0";
 | 
			
		||||
		if(count == num){
 | 
			
		||||
			mp.put("status", "1");
 | 
			
		||||
			return mp; //已招满
 | 
			
		||||
		}
 | 
			
		||||
		mp.put("status", "0");
 | 
			
		||||
		return mp;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user