From dcd478c8b1da50279fe9074e63f6db88ad592f12 Mon Sep 17 00:00:00 2001 From: luogw <3132758203@qq.com> Date: Thu, 19 Mar 2026 09:38:56 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appeal/domain/param/AppealParam.java | 1 + .../Impl/SearchAppealDomainServiceImpl.java | 4 +- .../QuestionInventoryDomainService.java | 4 ++ .../QuestionInventoryDomainServiceImpl.java | 52 +++++++++++++++++++ .../task/controller/TaskController.java | 9 ++++ .../com/project/task/mapper/TaskMapper.java | 9 +++- src/main/resources/application-test.yml | 2 +- 7 files changed, 77 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/project/appeal/domain/param/AppealParam.java b/src/main/java/com/project/appeal/domain/param/AppealParam.java index 08e93b6..5a65c8e 100644 --- a/src/main/java/com/project/appeal/domain/param/AppealParam.java +++ b/src/main/java/com/project/appeal/domain/param/AppealParam.java @@ -8,4 +8,5 @@ public class AppealParam extends BaseParam { public Long subLineId; public Long lineId; public Long businessId; + public String subLineName; } diff --git a/src/main/java/com/project/appeal/domain/service/Impl/SearchAppealDomainServiceImpl.java b/src/main/java/com/project/appeal/domain/service/Impl/SearchAppealDomainServiceImpl.java index 14178e6..d94fd26 100644 --- a/src/main/java/com/project/appeal/domain/service/Impl/SearchAppealDomainServiceImpl.java +++ b/src/main/java/com/project/appeal/domain/service/Impl/SearchAppealDomainServiceImpl.java @@ -52,7 +52,7 @@ public class SearchAppealDomainServiceImpl implements SearchAppealDomainService IPage appealDTOIPage = new Page<>(); Map taskIdToSubLineNameMap = new HashMap<>(); appealEntityQueryWrapper.orderByDesc("create_time"); - if (appealParam.getBusinessId() == null && appealParam.getLineId() == null && appealParam.getSubLineId() == null) { + if (appealParam.getBusinessId() == null && appealParam.getLineId() == null && appealParam.getSubLineId() == null && StringUtils.isBlank(appealParam.getSubLineName())) { Page appealEntityPage = appealMapper.selectPage(PageConverter.toMpPage(appealParam), appealEntityQueryWrapper); appealDTOIPage = appealEntityPage.convert(entity -> entity.toDTO(AppealDTO::new)); @@ -64,7 +64,7 @@ public class SearchAppealDomainServiceImpl implements SearchAppealDomainService } }else{ //查询产品线相关的考试任务 - List taskByAppealParam = taskMapper.getTaskByAppealParam(appealParam.getSubLineId(),appealParam.getLineId(),appealParam.getBusinessId()); + List taskByAppealParam = taskMapper.getTaskByAppealParam(appealParam.getSubLineId(),appealParam.getLineId(),appealParam.getBusinessId(),appealParam.getSubLineName()); taskIdToSubLineNameMap = taskByAppealParam.stream().collect(Collectors.toMap(TaskDTO::getId, TaskDTO::getSubLineName)); if (!CollectionUtils.isEmpty(taskByAppealParam)){ diff --git a/src/main/java/com/project/question/domain/service/QuestionInventoryDomainService.java b/src/main/java/com/project/question/domain/service/QuestionInventoryDomainService.java index f740349..229e41b 100644 --- a/src/main/java/com/project/question/domain/service/QuestionInventoryDomainService.java +++ b/src/main/java/com/project/question/domain/service/QuestionInventoryDomainService.java @@ -1,5 +1,9 @@ package com.project.question.domain.service; +import com.project.base.domain.result.Result; + public interface QuestionInventoryDomainService { void checkAndReplenish(Long taskId) throws Exception; + + Result checkAndReplenishBoolean(Long taskId); } diff --git a/src/main/java/com/project/question/domain/service/impl/QuestionInventoryDomainServiceImpl.java b/src/main/java/com/project/question/domain/service/impl/QuestionInventoryDomainServiceImpl.java index b57818c..95b07fe 100644 --- a/src/main/java/com/project/question/domain/service/impl/QuestionInventoryDomainServiceImpl.java +++ b/src/main/java/com/project/question/domain/service/impl/QuestionInventoryDomainServiceImpl.java @@ -1,6 +1,7 @@ package com.project.question.domain.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.project.base.domain.result.Result; import com.project.question.domain.entity.TaskKnowledgeClusterEntity; import com.project.question.domain.entity.TaskKnowledgePointEntity; import com.project.question.domain.enums.QuestionSourceTypeEnum; @@ -75,6 +76,57 @@ public class QuestionInventoryDomainServiceImpl implements QuestionInventoryDoma } + @Override + public Result checkAndReplenishBoolean(Long taskId) { + //标记是否生成完成 + Boolean flage = true; + + TaskEntity task = taskMapper.selectById(taskId); + if (task == null || task.getEndTime().before(new Date())) { + return Result.success("题目生成完成"); + } + int u = (task.getParticipantNum() == null ? 0 : task.getParticipantNum()) + - (task.getPassNum() == null ? 0 : task.getPassNum()); + if (u <= 0) { + return Result.success("题目生成完成"); + } + int watermark = (int) Math.ceil(1.0 * u); + int targetLine = (int) Math.ceil(1.2 * u); + // 针对每个知识点遍历每种题型 + List kpList = taskKpMapper.selectList( + new LambdaQueryWrapper().eq(TaskKnowledgePointEntity::getTaskId , taskId)); + for (TaskKnowledgePointEntity kp : kpList) { + for (QuestionTypeEnum questionType : QuestionTypeEnum.values()) { + int currentStock = questionKpMapper.countAvailableByKp(kp.getId(), questionType.getValue()); + if (currentStock < watermark){ + flage = false; + break; + } + } + } + // 针对每一个簇 + List clusterList = clusterMapper.selectList( + new LambdaQueryWrapper().eq(TaskKnowledgeClusterEntity::getTaskId, taskId)); + + for (TaskKnowledgeClusterEntity cluster : clusterList) { + int w = cluster.getClusterSize(); + // 簇水位线: 1.0 * U * W + int clusterWatermark = watermark * w; + + int currentStock = questionKpMapper.countAvailableByCluster(cluster.getId()); + if (currentStock < clusterWatermark){ + flage = false; + break; + } + } + + if (flage){ + return Result.success("题目生成完成"); + }else{ + return Result.success("题目未生成完成"); + } + } + /** * 单知识点补货判定 */ diff --git a/src/main/java/com/project/task/controller/TaskController.java b/src/main/java/com/project/task/controller/TaskController.java index 32cc636..edd6ba4 100644 --- a/src/main/java/com/project/task/controller/TaskController.java +++ b/src/main/java/com/project/task/controller/TaskController.java @@ -5,12 +5,14 @@ import com.project.base.domain.result.PageResult; import com.project.base.domain.result.Result; import com.project.operation.annotation.OperationLog; import com.project.operation.domain.enums.ModuleEnum; +import com.project.question.domain.service.QuestionInventoryDomainService; import com.project.task.application.TaskApplicationService; import com.project.task.domain.dto.TaskDTO; import com.project.task.domain.entity.TaskEntity; import com.project.task.domain.param.TaskParam; import com.project.task.domain.service.InitTaskDomainService; import com.project.task.mapper.TaskMapper; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -24,6 +26,8 @@ import java.util.List; public class TaskController { @Autowired private TaskApplicationService taskApplicationService; + @Resource + private QuestionInventoryDomainService questionInventoryDomainService; @GetMapping("/search") public Result> search(TaskParam param) throws Exception { @@ -41,6 +45,11 @@ public class TaskController { return taskApplicationService.saveOrUpdate(dto); } + @GetMapping("/checkAndReplenish") + public Result checkAndReplenish(Long taskId) { + return questionInventoryDomainService.checkAndReplenishBoolean(taskId); + } + @PostMapping("/batchDelete") @OperationLog(module = "考试任务") diff --git a/src/main/java/com/project/task/mapper/TaskMapper.java b/src/main/java/com/project/task/mapper/TaskMapper.java index f2f24e1..e09106c 100644 --- a/src/main/java/com/project/task/mapper/TaskMapper.java +++ b/src/main/java/com/project/task/mapper/TaskMapper.java @@ -44,8 +44,15 @@ public interface TaskMapper extends BaseMapper { "", " AND e.business_id = #{businessId} ", "", + "", + " AND l.name LIKE CONCAT('%', #{subLineName}, '%') ", + "", "", "" }) - List getTaskByAppealParam(@Param("subLineId") Long subLineId,@Param("lineId") Long lineId,@Param("businessId") Long businessId); + List getTaskByAppealParam( + @Param("subLineId") Long subLineId, + @Param("lineId") Long lineId, + @Param("businessId") Long businessId, + @Param("subLineName") String subLineName); } diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index 4e1316b..496714e 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -84,7 +84,7 @@ question: generation: # 限流速率:每秒允许的API请求数 rate-limit: 20 - downgrade: true + downgrade: false scheduled-task: owner: test \ No newline at end of file