package com.mindskip.xzs.service.impl; import com.alibaba.fastjson.JSON; import com.mindskip.xzs.context.WebContext; import com.mindskip.xzs.domain.PracticeQuestionCondition; import com.mindskip.xzs.repository.PracticeQuestionConditionMapper; import com.mindskip.xzs.service.PracticeQuestionConditionService; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; /** * @author:xp * @date:2024/5/14 17:26 */ @Service @RequiredArgsConstructor public class PracticeQuestionConditionServiceImpl implements PracticeQuestionConditionService { private final PracticeQuestionConditionMapper mapper; private final WebContext webContext; @Override @Transactional(rollbackFor = Exception.class) public void save(PracticeQuestionCondition entity) { // 如果做错了,加入错题集 if (! entity.getQuestionCondition().getRight()) { } PracticeQuestionCondition old = mapper.selectByPracticeId(entity.getPracticeId()); if (Objects.isNull(old)) { old = new PracticeQuestionCondition(); old.setUserId(webContext.getCurrentUser().getId()); old.setPracticeId(entity.getPracticeId()); ArrayList objects = new ArrayList<>(1); objects.add(entity.getQuestionCondition()); old.setContent(JSON.toJSONString(objects)); old.setLatestTime(new Date()); mapper.save(old); } else { // 更新内容 List list = JSON.parseArray(old.getContent(), PracticeQuestionCondition.QuestionFinishCondition.class); if (list.stream().anyMatch(item -> item.getQuestionId().equals(entity.getQuestionCondition().getQuestionId()))) { for (PracticeQuestionCondition.QuestionFinishCondition item : list) { if (item.getQuestionId().equals(entity.getQuestionCondition().getQuestionId())) { BeanUtils.copyProperties(entity.getQuestionCondition(), item); break; } } } else { list.add(entity.getQuestionCondition()); } mapper.updateContentById(JSON.toJSONString(list), old.getId(), new Date()); } } @Override public PracticeQuestionCondition selectByPracticeId(Integer practiceId) { PracticeQuestionCondition old = mapper.selectByPracticeId(practiceId); return old; } }