完善细节,修复日报补卡消息

This commit is contained in:
2025-03-13 11:13:20 +08:00
parent 29b14e4c1f
commit 4a1f10e488
10 changed files with 95 additions and 11 deletions

View File

@ -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());

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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("封面图(多个逗号分隔)")

View File

@ -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);
/**
* 修改已读未读状态

View File

@ -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).

View File

@ -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;
}
}

View File

@ -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

View 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>