package com.doumee.service.business.impl; 
 | 
  
 | 
import cn.hutool.core.bean.BeanUtil; 
 | 
import com.alibaba.fastjson.JSON; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 
 | 
import com.doumee.core.model.LoginUserInfo; 
 | 
import com.doumee.core.model.PageData; 
 | 
import com.doumee.core.model.PageWrap; 
 | 
import com.doumee.core.utils.Constants; 
 | 
import com.doumee.core.utils.Utils; 
 | 
import com.doumee.dao.admin.request.OptionsObject; 
 | 
import com.doumee.dao.admin.response.ProblemDTO; 
 | 
import com.doumee.dao.business.ProblemsMapper; 
 | 
import com.doumee.dao.business.model.Member; 
 | 
import com.doumee.dao.business.model.Problems; 
 | 
import com.doumee.dao.web.response.ProblemsVO; 
 | 
import com.doumee.service.business.ProblemsService; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 
 | 
import com.baomidou.mybatisplus.core.metadata.IPage; 
 | 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.springframework.beans.BeanUtils; 
 | 
import org.apache.shiro.SecurityUtils; 
 | 
import org.springframework.beans.BeanUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
/** 
 | 
 * 试题信息表Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2023/11/30 15:33 
 | 
 */ 
 | 
@Service 
 | 
public class ProblemsServiceImpl implements ProblemsService { 
 | 
  
 | 
    @Autowired 
 | 
    private ProblemsMapper problemsMapper; 
 | 
  
 | 
    @Override 
 | 
    public Integer create(Problems problems) { 
 | 
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(loginUserInfo == null){ 
 | 
            loginUserInfo=problems.getLoginUserInfo(); 
 | 
        } 
 | 
        Problems newProblems = new Problems(); 
 | 
  
 | 
        newProblems.setCreator(loginUserInfo.getId()); 
 | 
        newProblems.setCreateDate(new Date()); 
 | 
        newProblems.setEditor(loginUserInfo.getId()); 
 | 
        newProblems.setEditDate(new Date()); 
 | 
        newProblems.setIsdeleted(Constants.ZERO); 
 | 
        newProblems.setRemark(problems.getRemark()); 
 | 
        newProblems.setTitle(problems.getTitle()); 
 | 
        if(null != problems.getObjectList() && problems.getObjectList().size() > 0) { 
 | 
            newProblems.setOptions(JSON.toJSONString(problems.getObjectList())); 
 | 
        } 
 | 
        newProblems.setAnswer(problems.getAnswer()); 
 | 
        newProblems.setSortnu(problems.getSortnu()); 
 | 
        newProblems.setType(problems.getType()); 
 | 
        newProblems.setScore(problems.getScore()); 
 | 
        newProblems.setUseType(problems.getUseType()); 
 | 
        problemsMapper.insert(newProblems); 
 | 
        return newProblems.getId(); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteById(Integer id) { 
 | 
        problemsMapper.deleteById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void delete(Problems problems) { 
 | 
        UpdateWrapper<Problems> deleteWrapper = new UpdateWrapper<>(problems); 
 | 
        problemsMapper.delete(deleteWrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteByIdInBatch(List<Integer> ids) { 
 | 
        if (CollectionUtils.isEmpty(ids)) { 
 | 
            return; 
 | 
        } 
 | 
        problemsMapper.deleteBatchIds(ids); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateById(Problems problems) { 
 | 
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(loginUserInfo == null){ 
 | 
            loginUserInfo=problems.getLoginUserInfo(); 
 | 
        } 
 | 
        Problems update = new Problems(); 
 | 
        update.setId(problems.getId()); 
 | 
        update.setEditor(loginUserInfo.getId()); 
 | 
        update.setEditDate(new Date()); 
 | 
        update.setTitle(problems.getTitle()); 
 | 
        if(null != problems.getObjectList() && problems.getObjectList().size() > 0) { 
 | 
            update.setOptions(JSON.toJSONString(problems.getObjectList())); 
 | 
        } 
 | 
        update.setAnswer(problems.getAnswer()); 
 | 
        update.setSortnu(problems.getSortnu()); 
 | 
        update.setScore(problems.getScore()); 
 | 
        update.setType(problems.getType()); 
 | 
        update.setScore(problems.getScore()); 
 | 
        update.setUseType(problems.getUseType()); 
 | 
        problemsMapper.updateById(update); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateByIdInBatch(List<Problems> problemss) { 
 | 
        if (CollectionUtils.isEmpty(problemss)) { 
 | 
            return; 
 | 
        } 
 | 
        for (Problems problems: problemss) { 
 | 
            this.updateById(problems); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Problems findById(Integer id) { 
 | 
        Problems problems = problemsMapper.selectById(id); 
 | 
        if(null != problems && StringUtils.isNotBlank(problems.getOptions())) { 
 | 
            problems.setObjectList(JSON.parseArray(problems.getOptions(), OptionsObject.class)); 
 | 
        } 
 | 
        return problems; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Problems findOne(Problems problems) { 
 | 
        QueryWrapper<Problems> wrapper = new QueryWrapper<>(problems); 
 | 
        return problemsMapper.selectOne(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<Problems> findList(Problems problems) { 
 | 
        QueryWrapper<Problems> wrapper = new QueryWrapper<>(problems); 
 | 
        return problemsMapper.selectList(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public PageData<Problems> findPage(PageWrap<Problems> pageWrap) { 
 | 
        IPage<Problems> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        QueryWrapper<Problems> queryWrapper = new QueryWrapper<>(); 
 | 
        Utils.MP.blankToNull(pageWrap.getModel()); 
 | 
        if (pageWrap.getModel().getId() != null) { 
 | 
            queryWrapper.lambda().eq(Problems::getId, pageWrap.getModel().getId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCreator() != null) { 
 | 
            queryWrapper.lambda().eq(Problems::getCreator, pageWrap.getModel().getCreator()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCreateDate() != null) { 
 | 
            queryWrapper.lambda().ge(Problems::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); 
 | 
            queryWrapper.lambda().le(Problems::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); 
 | 
        } 
 | 
        if (pageWrap.getModel().getEditor() != null) { 
 | 
            queryWrapper.lambda().eq(Problems::getEditor, pageWrap.getModel().getEditor()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getEditDate() != null) { 
 | 
            queryWrapper.lambda().ge(Problems::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); 
 | 
            queryWrapper.lambda().le(Problems::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); 
 | 
        } 
 | 
        if (pageWrap.getModel().getIsdeleted() != null) { 
 | 
            queryWrapper.lambda().eq(Problems::getIsdeleted, pageWrap.getModel().getIsdeleted()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getRemark() != null) { 
 | 
            queryWrapper.lambda().eq(Problems::getRemark, pageWrap.getModel().getRemark()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getTitle() != null) { 
 | 
            queryWrapper.lambda().like(Problems::getTitle, pageWrap.getModel().getTitle()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getOptions() != null) { 
 | 
            queryWrapper.lambda().eq(Problems::getOptions, pageWrap.getModel().getOptions()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getAnswer() != null) { 
 | 
            queryWrapper.lambda().eq(Problems::getAnswer, pageWrap.getModel().getAnswer()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getSortnu() != null) { 
 | 
            queryWrapper.lambda().eq(Problems::getSortnu, pageWrap.getModel().getSortnu()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getType() != null) { 
 | 
            queryWrapper.lambda().in(Problems::getType, pageWrap.getModel().getType()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getScore() != null) { 
 | 
            queryWrapper.lambda().eq(Problems::getScore, pageWrap.getModel().getScore()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getUseType() != null) { 
 | 
            queryWrapper.lambda().eq(Problems::getUseType, pageWrap.getModel().getUseType()); 
 | 
        } 
 | 
        queryWrapper.lambda().orderByAsc(Problems::getSortnu); 
 | 
        queryWrapper.select("problems.*, (select REALNAME from system_user where system_user.id = problems.CREATOR) as creatorName"); 
 | 
        IPage<Problems> problemsIPage = problemsMapper.selectPage(page, queryWrapper); 
 | 
        if(null != problemsIPage && problemsIPage.getRecords().size() > 0) { 
 | 
            List<Problems> newProblems = new ArrayList<>(); 
 | 
            List<Problems> newDatas = problemsIPage.getRecords(); 
 | 
            for (Problems dto:newDatas) { 
 | 
                dto.setObjectList(JSON.parseArray(dto.getOptions(), OptionsObject.class)); 
 | 
                newProblems.add(dto); 
 | 
            } 
 | 
            problemsIPage.setRecords(newProblems); 
 | 
        } 
 | 
        return PageData.from(problemsIPage); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public long count(Problems problems) { 
 | 
        QueryWrapper<Problems> wrapper = new QueryWrapper<>(problems); 
 | 
        return problemsMapper.selectCount(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<ProblemDTO> findListByUseType(Integer useType) { 
 | 
        LambdaQueryWrapper<Problems> wrapper = new LambdaQueryWrapper<>(); 
 | 
  
 | 
        wrapper.eq(Problems::getIsdeleted, Constants.ZERO) 
 | 
                .eq(Problems::getUseType, useType) 
 | 
                .orderByAsc(Problems::getSortnu); 
 | 
        List<Problems> problems = problemsMapper.selectList(wrapper); 
 | 
  
 | 
        List<ProblemDTO> collect = problems.stream().map(s -> { 
 | 
            ProblemDTO dto = new ProblemDTO(); 
 | 
            BeanUtils.copyProperties(dto, s); 
 | 
            return dto; 
 | 
        }).collect(Collectors.toList()); 
 | 
  
 | 
        return collect; 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 获取题目信息 
 | 
     * @param useType 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public List<ProblemsVO> getProblemsVO(Integer useType){ 
 | 
        List<Problems> problemsList = problemsMapper.selectList(new QueryWrapper<Problems>().lambda() 
 | 
                .and(ms->ms.eq(Problems::getUseType,useType).or().eq(Problems::getUseType,Constants.ZERO)) 
 | 
                .eq(Problems::getIsdeleted, Constants.ZERO).orderByAsc(Problems::getSortnu)); 
 | 
        List<ProblemsVO> problemsVOList = new ArrayList<>(); 
 | 
        for (Problems problems:problemsList) { 
 | 
            ProblemsVO problemsVO = new ProblemsVO(); 
 | 
            BeanUtils.copyProperties(problems,problemsVO); 
 | 
            problemsVOList.add(problemsVO); 
 | 
        } 
 | 
        return problemsVOList; 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
} 
 |