QuestionController.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. package com.zhongzheng.controller.bank;
  2. import java.time.LocalDateTime;
  3. import java.time.format.DateTimeFormatter;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import java.util.Arrays;
  7. import java.util.Map;
  8. import cn.hutool.core.bean.BeanUtil;
  9. import cn.hutool.core.lang.Validator;
  10. import cn.hutool.http.HttpStatus;
  11. import com.alibaba.fastjson.JSON;
  12. import com.github.pagehelper.PageInfo;
  13. import com.zhongzheng.common.core.domain.entity.SysUser;
  14. import com.zhongzheng.common.core.domain.model.LoginUser;
  15. import com.zhongzheng.common.core.page.TableDataInfo;
  16. import com.zhongzheng.common.utils.ServletUtils;
  17. import com.zhongzheng.common.utils.poi.EasyPoiUtil;
  18. import com.zhongzheng.common.utils.poi.ExcelUtil;
  19. import com.zhongzheng.framework.web.service.TokenService;
  20. import com.zhongzheng.modules.bank.bo.*;
  21. import com.zhongzheng.modules.bank.domain.Exam;
  22. import com.zhongzheng.modules.bank.domain.Question;
  23. import com.zhongzheng.modules.bank.domain.QuestionBusiness;
  24. import com.zhongzheng.modules.bank.service.IQuestionBusinessService;
  25. import com.zhongzheng.modules.bank.service.IQuestionService;
  26. import com.zhongzheng.modules.bank.vo.*;
  27. import com.zhongzheng.modules.course.bo.CourseSectionBusinessAddBo;
  28. import com.zhongzheng.modules.course.vo.CourseSectionImport;
  29. import com.zhongzheng.modules.goods.vo.GoodsVo;
  30. import com.zhongzheng.modules.user.vo.UserSubscribeErrorImport;
  31. import lombok.RequiredArgsConstructor;
  32. import org.springframework.security.access.prepost.PreAuthorize;
  33. import org.springframework.beans.factory.annotation.Autowired;
  34. import org.springframework.web.bind.annotation.GetMapping;
  35. import org.springframework.web.bind.annotation.PostMapping;
  36. import org.springframework.web.bind.annotation.PutMapping;
  37. import org.springframework.web.bind.annotation.DeleteMapping;
  38. import org.springframework.web.bind.annotation.PathVariable;
  39. import org.springframework.web.bind.annotation.RequestBody;
  40. import org.springframework.web.bind.annotation.RequestMapping;
  41. import org.springframework.web.bind.annotation.RestController;
  42. import com.zhongzheng.common.annotation.Log;
  43. import com.zhongzheng.common.core.controller.BaseController;
  44. import com.zhongzheng.common.core.domain.AjaxResult;
  45. import com.zhongzheng.common.enums.BusinessType;
  46. import io.swagger.annotations.Api;
  47. import io.swagger.annotations.ApiOperation;
  48. import org.springframework.web.multipart.MultipartFile;
  49. /**
  50. * 题库题目Controller
  51. *
  52. * @author hjl
  53. * @date 2021-10-21
  54. */
  55. @Api(value = "题库题目控制器", tags = {"题库题目管理"})
  56. @RequiredArgsConstructor(onConstructor_ = @Autowired)
  57. @RestController
  58. @RequestMapping("/bank/question")
  59. public class QuestionController extends BaseController {
  60. private final IQuestionService iQuestionService;
  61. private final IQuestionBusinessService iQuestionBusinessService;
  62. @Autowired
  63. private TokenService tokenService;
  64. /**
  65. * 查询题库题目列表
  66. */
  67. @ApiOperation("查询题库题目列表")
  68. @PreAuthorize("@ss.hasPermi('system:question:list')")
  69. @GetMapping("/list")
  70. public TableDataInfo<QuestionVo> list(QuestionQueryBo bo) {
  71. startPage();
  72. List<QuestionVo> list = iQuestionService.selectListByBo(bo);
  73. return getDataTable(list);
  74. }
  75. /**
  76. * 题目批量删除
  77. */
  78. @ApiOperation("题目批量删除")
  79. @PostMapping("/batch/del")
  80. public AjaxResult<Void> batchDelQuestion(@RequestBody QuestionBatchDelBo bo) {
  81. return toAjax(iQuestionService.batchDelQuestion(bo) ? 1 : 0);
  82. }
  83. /**
  84. * 导出题库题目列表
  85. */
  86. /* @ApiOperation("导出题库题目列表")
  87. @PreAuthorize("@ss.hasPermi('system:question:export')")
  88. @Log(title = "题库题目", businessType = BusinessType.EXPORT)
  89. @GetMapping("/export")
  90. public AjaxResult<QuestionVo> export(QuestionQueryBo bo) {
  91. List<QuestionVo> list = iQuestionService.queryList(bo);
  92. ExcelUtil<QuestionVo> util = new ExcelUtil<QuestionVo>(QuestionVo.class);
  93. return util.exportExcel(list, "题库题目");
  94. }*/
  95. /**
  96. * 获取题库题目详细信息
  97. */
  98. @ApiOperation("获取题库题目详细信息")
  99. @PreAuthorize("@ss.hasPermi('system:question:query')")
  100. @GetMapping("/{questionId}")
  101. public AjaxResult<QuestionVo> getInfo(@PathVariable("questionId" ) Long questionId) {
  102. return AjaxResult.success(iQuestionService.queryById(questionId));
  103. }
  104. /**
  105. * 新增题库题目
  106. */
  107. @ApiOperation("新增题库题目")
  108. @PreAuthorize("@ss.hasPermi('system:question:add')")
  109. @Log(title = "题库题目", businessType = BusinessType.INSERT)
  110. @PostMapping()
  111. public AjaxResult<Question> add(@RequestBody QuestionAddBo bo) {
  112. return AjaxResult.success(iQuestionService.insertByAddBo(bo));
  113. }
  114. /**
  115. * 修改题库题目
  116. */
  117. @ApiOperation("修改题库题目")
  118. @PreAuthorize("@ss.hasPermi('system:question:edit')")
  119. @Log(title = "题库题目", businessType = BusinessType.UPDATE)
  120. @PostMapping("/edit")
  121. public AjaxResult<Void> edit(@RequestBody QuestionEditBo bo) {
  122. return toAjax(iQuestionService.updateByEditBo(bo) ? 1 : 0);
  123. }
  124. /**
  125. * 删除题库题目
  126. */
  127. /*@ApiOperation("删除题库题目")
  128. @PreAuthorize("@ss.hasPermi('system:question:remove')")
  129. @Log(title = "题库题目" , businessType = BusinessType.DELETE)
  130. @DeleteMapping("/{questionIds}")
  131. public AjaxResult<Void> remove(@PathVariable Long[] questionIds) {
  132. return toAjax(iQuestionService.deleteWithValidByIds(Arrays.asList(questionIds), true) ? 1 : 0);
  133. }*/
  134. /**
  135. * 查询题目业务层次关系列表
  136. */
  137. @ApiOperation("查询题目业务层次关系列表")
  138. @PreAuthorize("@ss.hasPermi('system:business:list')")
  139. @GetMapping("/business/list")
  140. public TableDataInfo<QuestionBusiness> businessList(QuestionBusinessQueryBo bo) {
  141. startPage();
  142. bo.setType(QuestionBusiness.TYPE_QUESTION);
  143. List<QuestionBusiness> list = iQuestionBusinessService.getListById(bo);
  144. return getDataTable(list);
  145. }
  146. @Log(title = "题目管理", businessType = BusinessType.IMPORT)
  147. @ApiOperation("导入题目模板")
  148. @PreAuthorize("@ss.hasPermi('system:question:import')")
  149. @PostMapping("/importData")
  150. public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
  151. {
  152. List<QuestionImportV2> questionList2 =EasyPoiUtil.importExcel(file,0,2,QuestionImportV2.class);
  153. ExcelUtil<QuestionImportV2> util = new ExcelUtil<QuestionImportV2>(QuestionImportV2.class);
  154. LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
  155. String operName = loginUser.getUsername();
  156. List<QuestionImport> questionList = new ArrayList<>();
  157. List<QuestionImportV2> errorList = iQuestionService.importExcelQuestionV2(questionList2, updateSupport, operName);
  158. if(Validator.isNotEmpty(errorList)&&errorList.size()>0){
  159. List<QuestionImportV2> errorListExport = new ArrayList<>();
  160. for(QuestionImportV2 qi : errorList){
  161. QuestionImportV2 item = BeanUtil.toBean(qi, QuestionImportV2.class);
  162. errorListExport.add(item);
  163. }
  164. ExcelUtil<QuestionImportV2> util1 = new ExcelUtil<QuestionImportV2>(QuestionImportV2.class);
  165. String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
  166. return util.exportEasyExcel(util1.exportEasyData(errorListExport), "导出错误数据"+timeStr);
  167. }else{
  168. return AjaxResult.success();
  169. }
  170. }
  171. @Log(title = "题目管理", businessType = BusinessType.IMPORT)
  172. @ApiOperation("导入题目模板返回数组")
  173. @PreAuthorize("@ss.hasPermi('system:question:import')")
  174. @PostMapping("/importDataBackList")
  175. public AjaxResult<Map<String, Object>> importDataBackList(MultipartFile file) throws Exception
  176. {
  177. List<QuestionImportV2> questionList2 =EasyPoiUtil.importExcel(file,0,2,QuestionImportV2.class);
  178. ExcelUtil<QuestionImportV2> util = new ExcelUtil<QuestionImportV2>(QuestionImportV2.class);
  179. LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
  180. String operName = loginUser.getUsername();
  181. //只返回数据不插入数据库
  182. Map<String, Object> rs = iQuestionService.importExcelQuestionV2NotInBank(questionList2, false, operName);
  183. List<QuestionImportV2> errorList = (List<QuestionImportV2>)rs.get("errorList");
  184. List<QuestionAddBo> nqList = (List<QuestionAddBo>)rs.get("questionList");
  185. if(Validator.isNotEmpty(errorList)&&errorList.size()>0){
  186. List<QuestionImportV2> errorListExport = new ArrayList<>();
  187. for(QuestionImportV2 qi : errorList){
  188. QuestionImportV2 item = BeanUtil.toBean(qi, QuestionImportV2.class);
  189. errorListExport.add(item);
  190. }
  191. ExcelUtil<QuestionImportV2> util1 = new ExcelUtil<QuestionImportV2>(QuestionImportV2.class);
  192. String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
  193. rs.put("errorExcel",util.exportEasyExcel(util1.exportEasyData(errorListExport), "导出错误数据"+timeStr));
  194. rs.remove("errorList");
  195. }
  196. if(questionList2.size()>0&&questionList2.size()>nqList.size()&&nqList.size()>0){
  197. rs.put("fullStatus","部分成功");
  198. }
  199. else if(questionList2.size()==nqList.size()){
  200. rs.put("fullStatus","全部成功");
  201. }
  202. else{
  203. rs.put("fullStatus","失败");
  204. }
  205. return AjaxResult.success(rs);
  206. }
  207. @Log(title = "题目管理", businessType = BusinessType.IMPORT)
  208. @ApiOperation("导入旧系统题目模板返回数组")
  209. @PreAuthorize("@ss.hasPermi('system:question:import')")
  210. @PostMapping("/importDataBackFromOldList")
  211. public AjaxResult<Map<String, Object>> importDataBackFromOldList(MultipartFile file) throws Exception
  212. {
  213. List<QuestionImportV3> questionList2 =EasyPoiUtil.importExcel(file,0,1,QuestionImportV3.class);
  214. ExcelUtil<QuestionImportV3> util = new ExcelUtil<QuestionImportV3>(QuestionImportV3.class);
  215. LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
  216. String operName = loginUser.getUsername();
  217. //只返回数据不插入数据库
  218. Map<String, Object> rs = iQuestionService.importExcelQuestionV3NotInBankFromOld(questionList2, false, operName);
  219. List<QuestionImportV3> errorList = (List<QuestionImportV3>)rs.get("errorList");
  220. List<QuestionAddBo> nqList = (List<QuestionAddBo>)rs.get("questionList");
  221. if(Validator.isNotEmpty(errorList)&&errorList.size()>0){
  222. List<QuestionImportV3> errorListExport = new ArrayList<>();
  223. for(QuestionImportV3 qi : errorList){
  224. QuestionImportV3 item = BeanUtil.toBean(qi, QuestionImportV3.class);
  225. errorListExport.add(item);
  226. }
  227. ExcelUtil<QuestionImportV3> util1 = new ExcelUtil<QuestionImportV3>(QuestionImportV3.class);
  228. String timeStr= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
  229. rs.put("errorExcel",util.exportEasyExcel(util1.exportEasyData(errorListExport), "导出错误数据"+timeStr));
  230. rs.remove("errorList");
  231. }
  232. if(errorList.size()>0&&nqList.size()>0){
  233. rs.put("fullStatus","部分成功");
  234. }
  235. else if(errorList.size()==0){
  236. rs.put("fullStatus","全部成功");
  237. }
  238. else{
  239. rs.put("fullStatus","失败");
  240. }
  241. return AjaxResult.success(rs);
  242. }
  243. @Log(title = "导入题目Word模板", businessType = BusinessType.IMPORT)
  244. @ApiOperation("导入题目Word模板")
  245. @PreAuthorize("@ss.hasPermi('system:question:import')")
  246. @PostMapping("/importWordData")
  247. public AjaxResult importWordData(MultipartFile file, Long eduId, Long projectId, Long businessId, Long subjectId) throws Exception
  248. {
  249. String errorLog = iQuestionService.importWordQuestion(file, eduId, projectId, businessId, subjectId);
  250. return AjaxResult.success(errorLog);
  251. }
  252. @Log(title = "" +"", businessType = BusinessType.IMPORT)
  253. @ApiOperation("导入题目Word模板列表")
  254. @PreAuthorize("@ss.hasPermi('system:question:import')")
  255. @PostMapping("/importWordQuestionList")
  256. public AjaxResult<Map<String,Object>> importWordQuestionList(MultipartFile file, Long eduId, Long projectId, Long businessId, Long subjectId) throws Exception
  257. {
  258. Map<String,Object> result = iQuestionService.importWordQuestionList(file, eduId, projectId, businessId, subjectId);
  259. return AjaxResult.success(result);
  260. }
  261. }