完善细节,修复日报补卡消息
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; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -65,6 +65,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||||
|             c.task_name, | ||||
|             c.task_address, | ||||
|             c.task_img, | ||||
|             c.create_time as taskCreateTime, | ||||
|             d.dict_label AS typeOfWorkLabel, | ||||
|             (SELECT count(1) FROM bgt_project_recruit_apply WHERE recruit_id = b.id) as numberOfRegistered | ||||
|         FROM | ||||
|  | ||||
							
								
								
									
										10
									
								
								ruoyi-system/src/main/resources/mapper/common/WgzMapper.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								ruoyi-system/src/main/resources/mapper/common/WgzMapper.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" ?> | ||||
| <!DOCTYPE mapper | ||||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
| <mapper namespace="com.ruoyi.common.mapper.WgzMapper"> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| </mapper> | ||||
		Reference in New Issue
	
	Block a user