package com.smartor.service.impl; import com.google.gson.JsonObject; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.smartor.domain.*; import com.smartor.mapper.SvyTopicMapper; import com.smartor.mapper.SvyTopicoptionMapper; import com.smartor.service.ISvyTopicService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.util.*; import java.util.stream.Collectors; /** * 题目Service业务层处理 * * @author ruoyi * @date 2023-06-26 */ @Service public class SvyTopicServiceImpl implements ISvyTopicService { @Autowired private SvyTopicMapper svyTopicMapper; @Autowired private SvyTopicoptionMapper svyTopicoptionMapper; /** * 查询题目 * * @param topicid 题目主键 * @return 题目 */ @Override public SvyTopic selectSvyTopicByTopicid(Long topicid) { return svyTopicMapper.selectSvyTopicByTopicid(topicid); } /** * 查询题目列表 * * @param svyTopic 题目 * @return 题目 */ @Override public List selectSvyTopicList(SvyTopic svyTopic) { return svyTopicMapper.selectSvyTopicList(svyTopic); } /** * 新增题目 * * @param svyTopic 题目 * @return 结果 */ @Override public int insertSvyTopic(SvyTopic svyTopic) { svyTopic.setCreateTime(DateUtils.getNowDate()); return svyTopicMapper.insertSvyTopic(svyTopic); } /** * 修改题目 * * @param svyTopic 题目 * @return 结果 */ @Override public int updateSvyTopic(SvyTopic svyTopic) { svyTopic.setUpdateTime(DateUtils.getNowDate()); return svyTopicMapper.updateSvyTopic(svyTopic); } /** * 批量删除题目 * * @param topicids 需要删除的题目主键 * @return 结果 */ @Override public int deleteSvyTopicByTopicids(Long[] topicids) { return svyTopicMapper.deleteSvyTopicByTopicids(topicids); } /** * 删除题目信息 * * @param topicid 题目主键 * @return 结果 */ @Override public int deleteSvyTopicByTopicid(Long topicid) { return svyTopicMapper.deleteSvyTopicByTopicid(topicid); } /** * 批量导入问问题目 * * @param multipartFile * @return */ @Override @Transactional public List importLitTopic(SysUser user, MultipartFile multipartFile) { List svyLibTopicErrors = new ArrayList<>(); try { Workbook workbook = new XSSFWorkbook(multipartFile.getInputStream()); Sheet sheet = workbook.getSheetAt(0); //问卷题目对象 SvyTopic svyTopic = new SvyTopic(); for (int i = sheet.getFirstRowNum() + 1; i < sheet.getLastRowNum(); i++) { SvyLibScriptRes svyLibTopicRes = new SvyLibScriptRes(); Row row = sheet.getRow(i); //如果行为空,进行下一次循环 if (ObjectUtils.isEmpty(row.getCell(0)) && ObjectUtils.isEmpty(row.getCell(1)) && ObjectUtils.isEmpty(row.getCell(2))) { continue; } //判断数据是否有问题 svyLibTopicRes.setTopic(row.getCell(0).toString()); if (ObjectUtils.isEmpty(row.getCell(0)) || StringUtils.isEmpty(row.getCell(0).toString())) { svyLibTopicRes.setRemark("题目为空,"); } else { //判断一下该题是否已经在表里出现 SvyTopic svyLibTopic1 = new SvyTopic(); svyLibTopic1.setTopic(row.getCell(0).toString()); List svyLibTopics = svyTopicMapper.selectSvyTopicList(svyLibTopic1); if (svyLibTopics.size() > 0) { //已经存在了,就不存了 continue; } } svyLibTopicRes.setTag(row.getCell(1).toString()); if (ObjectUtils.isEmpty(row.getCell(1)) || StringUtils.isEmpty(row.getCell(1).toString())) { svyLibTopicRes.setRemark(StringUtils.isNotEmpty(svyLibTopicRes.getRemark()) ? svyLibTopicRes.getRemark() : "" + "类别为空,"); } svyLibTopicRes.setTopictype(row.getCell(2).toString()); if (ObjectUtils.isEmpty(row.getCell(2)) || StringUtils.isEmpty(row.getCell(2).toString())) { svyLibTopicRes.setRemark(StringUtils.isNotEmpty(svyLibTopicRes.getRemark()) ? svyLibTopicRes.getRemark() : "" + "题目类型为空,"); } if (ObjectUtils.isNotEmpty(row.getCell(3))) { svyLibTopicRes.setAnswer(row.getCell(3).toString()); } if (ObjectUtils.isNotEmpty(row.getCell(4))) { svyLibTopicRes.setOptionA(row.getCell(4).toString()); } if (ObjectUtils.isNotEmpty(row.getCell(5))) { svyLibTopicRes.setOptionB(row.getCell(5).toString()); } if (ObjectUtils.isNotEmpty(row.getCell(6))) { svyLibTopicRes.setOptionC(row.getCell(6).toString()); } if (ObjectUtils.isNotEmpty(row.getCell(7))) { svyLibTopicRes.setOptionD(row.getCell(7).toString()); } if (ObjectUtils.isNotEmpty(row.getCell(8))) { svyLibTopicRes.setScore(row.getCell(8).toString()); } if (ObjectUtils.isNotEmpty(row.getCell(9))) { svyLibTopicRes.setScore(row.getCell(9).toString()); } if (ObjectUtils.isNotEmpty(row.getCell(10))) { svyLibTopicRes.setScore(row.getCell(10).toString()); } if (ObjectUtils.isNotEmpty(row.getCell(11))) { svyLibTopicRes.setScore(row.getCell(11).toString()); } if (ObjectUtils.isNotEmpty(row.getCell(12))) { svyLibTopicRes.setScore(row.getCell(12).toString()); } if (StringUtils.isNotEmpty(svyLibTopicRes.getRemark())) { //说明该行数据有问题 svyLibTopicErrors.add(svyLibTopicRes); continue; } //数据没有问题,开始插表 svyTopic.setTopic(row.getCell(0).toString()); if (row.getCell(2).toString().equals("单选") || row.getCell(2).toString().equals("1") || row.getCell(2).toString().equals("1.0")) { svyTopic.setTopictype(1L); } else if (row.getCell(2).toString().equals("多选") || row.getCell(2).toString().equals("2") || row.getCell(2).toString().equals("2.0")) { svyTopic.setTopictype(2L); } else { svyTopic.setTopictype(3L); } svyTopic.setTopiccode(UUID.randomUUID().toString().replace("-", "")); //题目类别 svyTopic.setTag(row.getCell(1).toString()); svyTopic.setCreateBy(user.getUserName()); svyTopic.setOrgid(user.getDeptId().toString()); svyTopic.setUpdateBy(user.getUserName()); svyTopic.setUpdateTime(new Date()); svyTopic.setCreateTime(new Date()); svyTopic.setDelFlag("0"); svyTopic.setAnswer(row.getCell(3).toString()); //新增题目表 svyTopicMapper.insertSvyTopic(svyTopic); //新增题目选项表 SvyTopicoption svyTopicoption = new SvyTopicoption(); svyTopicoption.setTopicid(svyTopic.getTopicid()); svyTopicoption.setTopictype(svyTopic.getTopictype()); svyTopicoption.setOptioncode(UUID.randomUUID().toString().replace("-", "")); svyTopicoption.setCreateBy(user.getUserName()); svyTopicoption.setCreateTime(new Date()); svyTopicoption.setUpdateBy(user.getUserName()); svyTopicoption.setUpdateTime(new Date()); svyTopicoption.setDelFlag("0"); if (svyTopicoption.getTopictype() == 3) { //解答题,不需要再设置选项 svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption); } else { if (ObjectUtils.isNotEmpty(row.getCell(4))) { if (StringUtils.isNotEmpty(row.getCell(4).toString())) { svyTopicoption.setOptioncode("A"); svyTopicoption.setOptioncontent(row.getCell(4).toString()); svyTopicoption.setOptionid(null); svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption); } } if (ObjectUtils.isNotEmpty(row.getCell(5))) { if (StringUtils.isNotEmpty(row.getCell(5).toString())) { svyTopicoption.setOptioncode("B"); svyTopicoption.setOptioncontent(row.getCell(5).toString()); svyTopicoption.setOptionid(null); svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption); } } if (ObjectUtils.isNotEmpty(row.getCell(6))) { if (StringUtils.isNotEmpty(row.getCell(6).toString())) { svyTopicoption.setOptioncode("C"); svyTopicoption.setOptioncontent(row.getCell(6).toString()); svyTopicoption.setOptionid(null); svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption); } } if (ObjectUtils.isNotEmpty(row.getCell(7))) { if (StringUtils.isNotEmpty(row.getCell(7).toString())) { svyTopicoption.setOptioncode("D"); svyTopicoption.setOptioncontent(row.getCell(7).toString()); svyTopicoption.setOptionid(null); svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption); } } if (ObjectUtils.isNotEmpty(row.getCell(8))) { if (StringUtils.isNotEmpty(row.getCell(8).toString())) { svyTopicoption.setOptioncode("E"); svyTopicoption.setOptioncontent(row.getCell(8).toString()); svyTopicoption.setOptionid(null); svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption); } } if (ObjectUtils.isNotEmpty(row.getCell(9))) { if (StringUtils.isNotEmpty(row.getCell(9).toString())) { svyTopicoption.setOptioncode("F"); svyTopicoption.setOptioncontent(row.getCell(9).toString()); svyTopicoption.setOptionid(null); svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption); } } if (ObjectUtils.isNotEmpty(row.getCell(10))) { if (StringUtils.isNotEmpty(row.getCell(10).toString())) { svyTopicoption.setOptioncode("G"); svyTopicoption.setOptioncontent(row.getCell(10).toString()); svyTopicoption.setOptionid(null); svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption); } } if (ObjectUtils.isNotEmpty(row.getCell(11))) { if (StringUtils.isNotEmpty(row.getCell(11).toString())) { svyTopicoption.setOptioncode("H"); svyTopicoption.setOptioncontent(row.getCell(11).toString()); svyTopicoption.setOptionid(null); svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption); } } } } if (CollectionUtils.isNotEmpty(svyLibTopicErrors)) { return svyLibTopicErrors; } } catch (Exception e) { e.printStackTrace(); } return null; } @Override public Map> showTopic(SvyTopicReq svyTopicReq) { List svyLibTopicAndOptionRes = svyTopicMapper.showTopic(svyTopicReq); Map> groupByAge = svyLibTopicAndOptionRes.stream().collect(Collectors.groupingBy(SvyLibTopicAndOptionRes::getTopic)); return groupByAge; } }