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 6162397..14178e6 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 @@ -44,6 +44,8 @@ public class SearchAppealDomainServiceImpl implements SearchAppealDomainService @Autowired private ProductLineMapper productLineMapper; + private static final String KEY_VALUE_PATTERN = "\\{([^}]*)\\}\\:\\{([^}]*)\\}"; + @Override public Result> list(AppealParam appealParam) { QueryWrapper appealEntityQueryWrapper = new QueryWrapper<>(); @@ -145,6 +147,7 @@ public class SearchAppealDomainServiceImpl implements SearchAppealDomainService .filter(kpId -> kpIdToEntityMap.containsKey(kpId)) .map(kpId -> kpIdToEntityMap.get(kpId).getContent()) .filter(StringUtils::isNotBlank) + .map(content -> content.replaceAll(KEY_VALUE_PATTERN, "$1:$2")) .collect(Collectors.joining(",")); appealDTO.setKpContentsStr(kpContentStr); diff --git a/src/main/java/com/project/task/domain/service/impl/SaveOrUpdateTaskDomainServiceImpl.java b/src/main/java/com/project/task/domain/service/impl/SaveOrUpdateTaskDomainServiceImpl.java index 15a34fb..55cd70a 100644 --- a/src/main/java/com/project/task/domain/service/impl/SaveOrUpdateTaskDomainServiceImpl.java +++ b/src/main/java/com/project/task/domain/service/impl/SaveOrUpdateTaskDomainServiceImpl.java @@ -8,8 +8,10 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.project.base.domain.exception.BusinessErrorException; import com.project.base.domain.result.Result; +import com.project.ding.domain.dto.UserDTO; import com.project.ding.domain.entity.UserEntity; import com.project.ding.domain.service.UserBaseService; +import com.project.ding.utils.DingUtil; import com.project.information.domain.dto.KnowledgePointStatisticsDTO; import com.project.information.domain.entity.ProductLineEntity; import com.project.information.domain.service.GetStatisticsKnowledgePointDomainService; @@ -47,6 +49,9 @@ public class SaveOrUpdateTaskDomainServiceImpl implements SaveOrUpdateTaskDomain @Autowired private TaskBaseService taskBaseService; + @Autowired + private DingUtil dingUtil; + @Autowired private UserBaseService userBaseService; @@ -114,7 +119,16 @@ public class SaveOrUpdateTaskDomainServiceImpl implements SaveOrUpdateTaskDomain .stream() .collect(Collectors.toMap(UserEntity::getId, UserEntity::getName)); - for (String userId : dto.getParticipantUserIdList()) { + // 处理用户ID在系统中不存在的情况 + List nonExistentUserIds = participantUserIdList.stream() + .filter(userId -> !userMap.containsKey(userId)) + .collect(Collectors.toList()); + if (!nonExistentUserIds.isEmpty()) { + //查询钉钉用户信息 + dingGetUserInfo(nonExistentUserIds,userMap); + } + + for (String userId : participantUserIdList) { TaskUserEntity taskUserEntity = new TaskUserEntity(); taskUserEntity.setTaskId(saveEntity.getId()); taskUserEntity.setUserId(userId); @@ -125,6 +139,20 @@ public class SaveOrUpdateTaskDomainServiceImpl implements SaveOrUpdateTaskDomain return Result.success(saveEntity.toDTO(TaskDTO::new)); } + private void dingGetUserInfo(List nonExistentUserIds, Map userMap) { + for (String nonExistentUserId : nonExistentUserIds) { + UserDTO user = dingUtil.getUserById(nonExistentUserId); + if (Objects.nonNull(user)) { + userMap.put(user.getId(), user.getName()); + // 同步到本地数据库 + UserEntity userEntity = user.toEntity(UserEntity::new); + userBaseService.saveOrUpdate(userEntity); + } else { + throw new BusinessErrorException("用户ID " + nonExistentUserId + " 在系统中不存在,且无法从钉钉获取到用户信息,请核实后重试"); + } + } + } + private void checkDTO(TaskDTO dto) throws Exception { if (StrUtil.isBlank(dto.getName())) { throw new BusinessErrorException("考试任务名称不能为空"); diff --git a/src/main/java/com/project/task/domain/service/impl/SearchTaskDomainServiceImpl.java b/src/main/java/com/project/task/domain/service/impl/SearchTaskDomainServiceImpl.java index 17a329f..8e198cc 100644 --- a/src/main/java/com/project/task/domain/service/impl/SearchTaskDomainServiceImpl.java +++ b/src/main/java/com/project/task/domain/service/impl/SearchTaskDomainServiceImpl.java @@ -8,6 +8,8 @@ import com.project.base.domain.result.PageResult; import com.project.base.domain.result.Result; import com.project.base.domain.utils.PageConverter; import com.project.ding.domain.dto.UserDTO; +import com.project.information.domain.entity.ProductLineEntity; +import com.project.information.domain.service.ProductLineBaseService; import com.project.task.domain.dto.TaskDTO; import com.project.task.domain.entity.TaskEntity; import com.project.task.domain.entity.TaskUserEntity; @@ -31,6 +33,9 @@ public class SearchTaskDomainServiceImpl implements SearchTaskDomainService { private TaskMapper taskMapper; @Autowired private TaskUserBaseService taskUserBaseService; + @Autowired + private ProductLineBaseService productLineBaseService; + @Override public Result> search(TaskParam param) throws Exception { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -78,6 +83,17 @@ public class SearchTaskDomainServiceImpl implements SearchTaskDomainService { userDTO.setName(taskUserEntity.getUserName()); return userDTO; }).toList(); + + //获取子产品线名称 + String subLineName = productLineBaseService.lambdaQuery() + .eq(ProductLineEntity::getId , dto.getSubLineId()) + .select(ProductLineEntity::getName) + .oneOpt() + .map(ProductLineEntity::getName) + .orElse(""); + dto.setSubLineName(subLineName); + + dto.setParticipantUserDTOList(participantUserDTOList); dto.setParticipantUserIdList(participantUserDTOList.stream().map(UserDTO::getId).toList()); dto.setTotalQuestionNum(dto.getSingleChoiceNum() + dto.getMultipleChoiceNum() + dto.getTrueFalseNum()); diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index 81e25da..3ffc312 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -48,7 +48,7 @@ spring: generator: write-numbers-as-strings: true minio: - endpoint: ${MINIO_ENDPOINT:http://8.129.84.155:9000} + endpoint: ${MINIO_ENDPOINT:http://localhost:9000} accessKey: ${MINIO_ASSESSKEY:DTKYZDZM1i31XOvd24SP} secretKey: ${MINIO_SECRETKEY:PnfLPcJbvaUboZIwYZAADPB0pDtPZgbi0QiLSs3C} bucket: ${MINIO_BUCKET:ai-evaluator}