yangdamao 2 nedēļas atpakaļ
vecāks
revīzija
3a2c40b64d
21 mainītis faili ar 602 papildinājumiem un 7 dzēšanām
  1. 19 4
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/QuestionController.java
  2. 42 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonBusinessController.java
  3. 11 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java
  4. 1 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java
  5. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/IQuestionService.java
  6. 290 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java
  7. 34 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionBusinessImportVo.java
  8. 25 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionImageVo.java
  9. 45 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionImportV4.java
  10. 13 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionOptionVo.java
  11. 23 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/business/bo/CommonBusinessBo.java
  12. 11 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/business/service/ICommonBusinessService.java
  13. 39 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/business/service/impl/CommonBusinessServiceImpl.java
  14. 19 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/business/vo/CommonBusinessVo.java
  15. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseSubjectMapper.java
  16. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseSubjectProjectMapper.java
  17. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseSubjectProjectService.java
  18. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseSubjectService.java
  19. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseSubjectProjectServiceImpl.java
  20. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseSubjectServiceImpl.java
  21. 13 0
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseSubjectMapper.xml

+ 19 - 4
zhongzheng-admin/src/main/java/com/zhongzheng/controller/bank/QuestionController.java

@@ -2,10 +2,7 @@ package com.zhongzheng.controller.bank;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Arrays;
-import java.util.Map;
+import java.util.*;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
@@ -299,5 +296,23 @@ public class QuestionController extends BaseController {
         return AjaxResult.success(result);
     }
 
+    @ApiOperation("导入学监题目Word模板列表")
+    @PostMapping("/importXlsx")
+    public AjaxResult<Map<String,Object>> importXlsxQuestionList(MultipartFile file,String param) throws Exception
+    {
+        List<QuestionImportV4> questionList2 =EasyPoiUtil.importExcel(file,0,1,QuestionImportV4.class);
+        Map<String,Object> result = iQuestionService.importXlsxQuestionList(questionList2,param);
+        return AjaxResult.success(result);
+    }
+
+
+    @ApiOperation("补充题库图片")
+    @PostMapping("/importImage")
+    public AjaxResult<Map<String,Object>> importImage(MultipartFile file) throws Exception
+    {
+        List<QuestionImageVo> questionList2 =EasyPoiUtil.importExcel(file,0,1,QuestionImageVo.class);
+        Map<String,Object> result = iQuestionService.importImage(questionList2);
+        return AjaxResult.success(result);
+    }
 
 }

+ 42 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonBusinessController.java

@@ -0,0 +1,42 @@
+package com.zhongzheng.controller.common;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.ToolsUtils;
+import com.zhongzheng.modules.business.bo.CommonBusinessBo;
+import com.zhongzheng.modules.business.service.ICommonBusinessService;
+import com.zhongzheng.modules.business.vo.CommonBusinessVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 对外业务系统接口
+ *
+ * @author zhongzheng
+ */
+@RestController
+@RequestMapping("/common/business")
+public class CommonBusinessController extends BaseController {
+
+    @Autowired
+    private ICommonBusinessService commonBusinessService;
+
+
+    @ApiOperation("获取机构列表")
+    @PostMapping("/tenant/list")
+    public AjaxResult<List<CommonBusinessVo>> getTenantList(@RequestBody CommonBusinessBo bo) {
+        if (!ToolsUtils.checkSignFromBusiness(bo.getStamp().toString(), bo.getSign())) {
+            throw new CustomException("签名错误!");
+        }
+        return AjaxResult.success(commonBusinessService.getTenantList(bo));
+    }
+}

+ 11 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java

@@ -328,6 +328,17 @@ public class ToolsUtils {
         return true;
     }
 
+    public static Boolean checkSignFromBusiness(String stamp,String sign) {
+        String newSign = stamp+"business2025";
+        if(!sign.equals(ToolsUtils.EncoderByMd5(newSign))){
+            return false;
+        }
+        if((Long.parseLong(stamp)+10L>(DateUtils.getNowTime().longValue()))&&(Long.parseLong(stamp)<(DateUtils.getNowTime().longValue()-10L))){
+            return false;
+        }
+        return true;
+    }
+
     public static Boolean checkOrderSignFromOldSys(String orderSn,String stamp,String sign) {
         String newSign = orderSn+stamp+"pubilc2022";
         if(!sign.equals(ToolsUtils.EncoderByMd5(newSign))){

+ 1 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java

@@ -169,6 +169,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/swagger-ui.html").anonymous()
                 .antMatchers("/swagger-resources/**").anonymous()
                 .antMatchers("/webjars/**").anonymous()
+                .antMatchers("/common/business/**").anonymous()
 //                .antMatchers("/*/api-docs").anonymous()
                 .antMatchers("/druid/**").anonymous()
                 // Spring Boot Admin Server 的安全配置

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/IQuestionService.java

@@ -117,4 +117,8 @@ public interface IQuestionService extends IService<Question> {
 	String getMeasureList();
 
 	String getTopicList(String topParam);
+
+	Map<String, Object> importXlsxQuestionList(List<QuestionImportV4> questionList2,String param);
+
+	Map<String, Object> importImage(List<QuestionImageVo> questionList2);
 }

+ 290 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java

@@ -20,7 +20,6 @@ import com.github.pagehelper.PageInfo;
 import com.zhongzheng.common.core.page.TableDataInfo;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
-import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.common.utils.ServletUtils;
@@ -40,7 +39,6 @@ import com.zhongzheng.modules.exam.bo.ExamKnowledgeAddBo;
 import com.zhongzheng.modules.exam.bo.ExamKnowledgeBusinessAddBo;
 import com.zhongzheng.modules.exam.domain.ExamKnowledge;
 import com.zhongzheng.modules.exam.domain.ExamPaper;
-import com.zhongzheng.modules.exam.service.IExamApplyService;
 import com.zhongzheng.modules.exam.service.IExamKnowledgeService;
 import com.zhongzheng.modules.exam.service.IExamPaperService;
 import com.zhongzheng.modules.goods.bo.*;
@@ -77,6 +75,8 @@ import org.w3c.dom.NodeList;
 
 import java.io.*;
 import java.math.BigDecimal;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.text.NumberFormat;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
@@ -4241,6 +4241,292 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
         return HttpUtils.sendGet(QUESTION_DETAIL, topParam);
     }
 
+    @Override
+    public Map<String, Object> importXlsxQuestionList( List<QuestionImportV4> questionList2,String param) {
+        if (CollectionUtils.isEmpty(questionList2)){
+            return new HashMap<>();
+        }
+
+        for (int i = 0; i < questionList2.size(); i++) {
+            QuestionImportV4 questionImportV4 = questionList2.get(i);
+            Integer a = 0;
+            Question question = new Question();
+            question.setStatus(1);
+            question.setPublishStatus(1);
+            question.setCode(ServletUtils.getEncoded("TM"));
+            question.setFromPlat(1);
+            if (questionImportV4.getAnalysisContent().equals("单选题") && questionImportV4.getType().equals("否")){
+                //单选向下取4格
+                a = 4;
+                List<QuestionImportV4> questionImportV = questionList2.subList(i, i + a);
+                //第一个是内容
+                QuestionImportV4 v4 = questionImportV.get(0);
+                question.setContent(v4.getQuestionName());
+                question.setType(1);
+                question.setAnswerQuestion(v4.getDescribe());
+                question.setCode(ServletUtils.getEncoded("TM"));
+                //正确选项
+                Integer index = 0;
+                //转换单选选项
+                List<QuestionOptionVo> vos = new ArrayList<>();
+                for (int i1 = 0; i1 < questionImportV.size(); i1++) {
+                    QuestionImportV4 questionImportV41 = questionImportV.get(i1);
+                    QuestionOptionVo vo = new QuestionOptionVo();
+                    vo.setContent(questionImportV41.getOption());
+                    vo.setOptionsId(i1+1);
+                    if (questionImportV41.getCorrect().equals("是")){
+                        index = i1 +1;
+                    }
+                    vos.add(vo);
+                }
+                question.setAnswerQuestion(index.toString());
+                question.setJsonStr(JSONArray.toJSONString(vos));
+            }else if (questionImportV4.getAnalysisContent().equals("多选题") && questionImportV4.getType().equals("否")){
+                a = 5;
+                List<QuestionImportV4> questionImportV1 = questionList2.subList(i, i + a);
+                //第一个是内容
+                QuestionImportV4 v41 = questionImportV1.get(0);
+                question.setContent(v41.getQuestionName());
+                question.setType(2);
+                question.setAnswerQuestion(v41.getDescribe());
+                //正确选项
+                List<Integer> index1 = new ArrayList<>();
+                //转换单选选项
+                List<QuestionOptionVo> vos1 = new ArrayList<>();
+                for (int i1 = 0; i1 < questionImportV1.size(); i1++) {
+                    QuestionImportV4 questionImportV41 = questionImportV1.get(i1);
+                    QuestionOptionVo vo = new QuestionOptionVo();
+                    vo.setContent(questionImportV41.getOption());
+                    vo.setOptionsId(i1+1);
+                    if (questionImportV41.getCorrect().equals("是")){
+                        index1.add(i1+1);
+                    }
+                    vos1.add(vo);
+                }
+                question.setAnswerQuestion(index1.stream().map(x -> x.toString()).collect(Collectors.joining(",")));
+                question.setJsonStr(JSONArray.toJSONString(vos1));
+            }else if (questionImportV4.getAnalysisContent().equals("判断题") && questionImportV4.getType().equals("否")){
+                a = 2;
+                List<QuestionImportV4> questionImportV2 = questionList2.subList(i, i + a);
+                //第一个是内容
+                QuestionImportV4 v42 = questionImportV2.get(0);
+                question.setContent(v42.getQuestionName());
+                question.setType(3);
+                question.setAnswerQuestion(v42.getDescribe());
+                //正确选项
+                Integer index2 = 0;
+                //转换单选选项
+                for (QuestionImportV4 importV4 : questionImportV2) {
+                    if (importV4.getCorrect().equals("是")){
+                        index2 = importV4.getOption().equals("正确")?1:0;
+                    }
+                }
+                question.setAnswerQuestion(index2.toString());
+
+            }else if (questionImportV4.getAnalysisContent().equals("案例题")){
+                a = 1;
+                List<QuestionImportV4> questionImportV3 = questionList2.subList(i, i + a);
+                //第一个是内容
+                QuestionImportV4 v42 = questionImportV3.get(0);
+                question.setContent(v42.getQuestionName());
+                question.setType(4);
+                question.setAnswerQuestion(v42.getDescribe());
+                //截取案例题小题
+                List<QuestionImportV4> vv = new ArrayList<>();
+                for (int i1 = i+1; i1 < questionList2.size(); i1++) {
+                    QuestionImportV4 questionImportV41 = questionList2.get(i1);
+                    if (StringUtils.isNotBlank(questionImportV41.getAnalysisContent()) && questionImportV41.getAnalysisContent().equals("案例题")){
+                        //碰到下一个案例题停止循环
+                        break ;
+                    }
+                    vv.add(questionImportV41);
+                }
+                if (CollectionUtils.isNotEmpty(vv)){
+                    List<QuestionInfoVo> vv1 = new ArrayList<>();
+                    for (int i1 = 0; i1 < vv.size(); i1++) {
+                        QuestionImportV4 questionImportV41 = vv.get(i1);
+                        Integer y = 0;
+                        if (questionImportV41.getAnalysisContent().equals("单选题")){
+                            //单选向下取4格
+                            y = 4;
+                            List<QuestionImportV4> questionImportV5 = vv.subList(i1, i1 + y);
+                            QuestionImportV4 questionImportV42 = questionImportV5.get(0);
+                            QuestionInfoVo questionInfoVo = new QuestionInfoVo();
+                            questionInfoVo.setContent(questionImportV42.getQuestionName());
+                            questionInfoVo.setType(1);
+                            //正确选项
+                            Integer index = 0;
+                            //转换单选选项
+                            List<QuestionDetailVo> vos = new ArrayList<>();
+                            for (int i2 = 0; i2 < questionImportV5.size(); i2++) {
+                                QuestionImportV4 questionImportV43 = questionImportV5.get(i2);
+                                QuestionDetailVo vo = new QuestionDetailVo();
+                                vo.setContent(questionImportV43.getOption());
+                                vo.setOptionsId(i2+1);
+                                if (questionImportV43.getCorrect().equals("是")){
+                                    index = i2 +1;
+                                }
+                                vos.add(vo);
+                            }
+                            questionInfoVo.setAnswerQuestion(index.toString());
+                            questionInfoVo.setOptionsList(vos);
+                            vv1.add(questionInfoVo);
+                            a = a+y;
+                        }else if (questionImportV41.getAnalysisContent().equals("多选题")){
+                            //单选向下取5格
+                            y = 5;
+                            List<QuestionImportV4> questionImportV6 = vv.subList(i1, i1 + y);
+                            QuestionImportV4 questionImportV42 = questionImportV6.get(0);
+                            QuestionInfoVo questionInfoVo = new QuestionInfoVo();
+                            questionInfoVo.setContent(questionImportV42.getQuestionName());
+                            questionInfoVo.setType(2);
+                            //正确选项
+                            List<Integer> index = new ArrayList<>();
+                            //转换单选选项
+                            List<QuestionDetailVo> vos = new ArrayList<>();
+                            for (int i2 = 0; i2 < questionImportV6.size(); i2++) {
+                                QuestionImportV4 questionImportV43 = questionImportV6.get(i2);
+                                QuestionDetailVo vo = new QuestionDetailVo();
+                                vo.setContent(questionImportV43.getOption());
+                                vo.setOptionsId(i2+1);
+                                if (questionImportV43.getCorrect().equals("是")){
+                                    index.add(i2 +1);
+                                }
+                                vos.add(vo);
+                            }
+                            questionInfoVo.setAnswerQuestion(index.stream().map(x -> x.toString()).collect(Collectors.joining(",")));
+                            questionInfoVo.setOptionsList(vos);
+                            vv1.add(questionInfoVo);
+                            a = a+y;
+                        }else if (questionImportV41.getAnalysisContent().equals("判断题")){
+                            //单选向下取2格
+                            y = 2;
+                            List<QuestionImportV4> questionImportV7 = vv.subList(i1, i1 + y);
+                            QuestionImportV4 questionImportV42 = questionImportV7.get(0);
+                            QuestionInfoVo questionInfoVo = new QuestionInfoVo();
+                            questionInfoVo.setContent(questionImportV42.getQuestionName());
+                            questionInfoVo.setType(3);
+                            //正确选项
+                            Integer index2 = 0;
+                            //转换单选选项
+                            for (QuestionImportV4 importV4 : questionImportV7) {
+                                if (importV4.getCorrect().equals("是")){
+                                    index2 = importV4.getOption().equals("正确")?1:0;
+                                }
+                            }
+                            questionInfoVo.setAnswerQuestion(index2.toString());
+                            vv1.add(questionInfoVo);
+                            a = a+y;
+                        }
+                        i1 = i1+y-1;
+                    }
+                    question.setJsonStr(JSONArray.toJSONString(vv1));
+                }
+            }
+
+            question.setCreateTime(DateUtils.getNowTime());
+            question.setUpdateTime(DateUtils.getNowTime());
+            save(question);
+            //题目业务层次
+            QuestionBusinessImportVo importVo = JSON.parseObject(param, QuestionBusinessImportVo.class);
+            CourseEducationType educationType = iCourseEducationTypeService
+                    .getOne(new LambdaQueryWrapper<CourseEducationType>()
+                    .eq(CourseEducationType::getEducationName, importVo.getEducationName())
+                    .eq(CourseEducationType::getStatus, 1)
+                    .last("limit 1"));
+            CourseProjectType projectType = iCourseProjectTypeService.getOne(new LambdaUpdateWrapper<CourseProjectType>()
+                    .eq(CourseProjectType::getEducationId, educationType.getId())
+                    .eq(CourseProjectType::getProjectName, importVo.getProjectName())
+                    .eq(CourseProjectType::getStatus, 1)
+                    .last("limit 1"));
+            CourseBusiness business = iCourseBusinessService.getOne(new LambdaUpdateWrapper<CourseBusiness>()
+                    .eq(CourseBusiness::getProjectId, projectType.getId())
+                    .eq(CourseBusiness::getBusinessName, importVo.getBusinessName())
+                    .eq(CourseBusiness::getStatus, 1)
+                    .last("limit 1"));
+            CourseSubject courseSubject = iCourseSubjectService.getOneByName(importVo.getSubjectName(),projectType.getId());
+            QuestionBusiness business1 = new QuestionBusiness();
+            business1.setEducationTypeId(educationType.getId());
+            business1.setProjectId(projectType.getId());
+            business1.setBusinessId(business.getId());
+            business1.setSubjectId(courseSubject.getId());
+            business1.setMajorId(question.getQuestionId());
+            business1.setType(1);
+            iQuestionBusinessService.save(business1);
+
+            //重置索引
+            i = i+a-1;
+        }
+
+        return Collections.emptyMap();
+    }
+
+    @Override
+    public Map<String, Object> importImage(List<QuestionImageVo> questionList2) {
+        if (CollectionUtils.isEmpty(questionList2)){
+            return Collections.emptyMap();
+        }
+        String path = "https://www.xyyxt.net";
+        for (QuestionImageVo imageVo : questionList2) {
+            String imageUrl = imageVo.getImageUrl();
+            // 使用正则表达式匹配图片路径
+            Pattern pattern = Pattern.compile("src=\"([^\"]+)\"");
+            Matcher matcher = pattern.matcher(imageUrl);
+            String imagePath = "";
+            if (matcher.find()) {
+                imagePath = path + matcher.group(1);
+            } else {
+                continue;
+            }
+
+            // 提取单引号内的中文内容
+            // 匹配单引号内的中文字符(包括中文标点)
+            Pattern pattern1 = Pattern.compile("Title='([^']+[\\u4e00-\\u9fa5]+[^']*)'");
+            Matcher matcher1 = pattern1.matcher(imageUrl);
+            String chineseText = "";
+            if (matcher1.find()) {
+                chineseText = matcher1.group(1);
+            }else {
+                continue;
+            }
+
+            Question question = getOne(new LambdaQueryWrapper<Question>().eq(Question::getStatus, 1).eq(Question::getContent, chineseText).last("limit 1"));
+            if (ObjectUtils.isNull(question)){
+                continue;
+            }
+            String ossPath = "";
+            //上传oss图片
+            try {
+                URL url = new URL(imagePath);
+                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+                connection.setRequestMethod("GET");
+                connection.setConnectTimeout(5000);
+                connection.setReadTimeout(5000);
+
+                // 检查响应码
+                int responseCode = connection.getResponseCode();
+                if (responseCode == HttpURLConnection.HTTP_OK) {
+                    try (InputStream inputStream = connection.getInputStream()) {
+                        String s = ossService.uploadInputStream(inputStream, 6);
+                        ossPath = ossHost + "/" + s;
+
+                    }
+                }
+                connection.disconnect();
+            } catch (Exception e) {
+                throw new CustomException("oss图片上传失败");
+            }
+            if (StringUtils.isNotBlank(ossPath)){
+                String format = String.format("<p>%s<img src=\"%s\"></p>", question.getContent(), ossPath);
+                question.setContent(format);
+                updateById(question);
+            }
+        }
+
+        return Collections.emptyMap();
+    }
+
+
     private void handlePhoto(List<ExternalQuestionDetailVo> questionDetailVos) {
         String prefix = "\\Uploads\\qdytopic\\";
         String upStr = OSS_PREFIX + "/web/Uploads/qdytopic/";
@@ -4531,4 +4817,6 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
         }
         return String.join(",", list);
     }
+
+
 }

+ 34 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionBusinessImportVo.java

@@ -0,0 +1,34 @@
+package com.zhongzheng.modules.bank.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+/**
+ * 题目业务层次关系视图对象 mall_package
+ *
+ * @author hjl
+ * @date 2021-10-25
+ */
+@Data
+@ApiModel("题目业务层次关系视图对象")
+public class QuestionBusinessImportVo implements Serializable {
+
+	/** 教育类型id */
+	@ApiModelProperty("教育类型id")
+	private String educationName;
+	/** 业务层次id */
+	@ApiModelProperty("业务层次id")
+	private String businessName;
+	/** 项目ID */
+	@ApiModelProperty("项目ID")
+	private String projectName;
+	/** 科目id */
+	@ApiModelProperty("科目id")
+	private String subjectName;
+	@ApiModelProperty("$column.columnComment")
+	private String majorName;
+}

+ 25 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionImageVo.java

@@ -0,0 +1,25 @@
+package com.zhongzheng.modules.bank.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+
+/**
+ * 题库题目添加对象 question
+ *
+ * @author hjl
+ * @date 2021-10-22
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+public class QuestionImageVo implements Serializable {
+
+    @Excel(name = "图片路径")
+    private String imageUrl;
+
+}

+ 45 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionImportV4.java

@@ -0,0 +1,45 @@
+package com.zhongzheng.modules.bank.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.zhongzheng.modules.bank.bo.QuestionBusinessAddBo;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+ * 题库题目添加对象 question
+ *
+ * @author hjl
+ * @date 2021-10-22
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+public class QuestionImportV4 implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 前缀名称 */
+    @Excel(name = "*题目内容")
+    private String questionName;
+
+    /** 题目正文 */
+    @Excel(name = "*题目选项")
+    private String option;
+
+    @Excel(name = "*是否正确选项")
+    private String correct;
+
+    @Excel(name = "*题型")
+    private String analysisContent;
+
+    @Excel(name = "是否案例小题")
+    private String type;
+
+    @Excel(name = "描述")
+    private String describe;
+}

+ 13 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/vo/QuestionOptionVo.java

@@ -0,0 +1,13 @@
+package com.zhongzheng.modules.bank.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class QuestionOptionVo implements Serializable {
+
+    private String content;
+
+    private Integer optionsId;
+}

+ 23 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/business/bo/CommonBusinessBo.java

@@ -0,0 +1,23 @@
+package com.zhongzheng.modules.business.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class CommonBusinessBo implements Serializable {
+
+    @ApiModelProperty("当前时间戳")
+    @NotBlank(message = "当前时间戳不能为空")
+    private Long stamp;
+
+    @ApiModelProperty("签名")
+    @NotBlank(message = "签名不能为空")
+    private String sign;
+
+    @ApiModelProperty("机构ID集合")
+    private List<Long> tenantIds;
+}

+ 11 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/business/service/ICommonBusinessService.java

@@ -0,0 +1,11 @@
+package com.zhongzheng.modules.business.service;
+
+import com.zhongzheng.modules.business.bo.CommonBusinessBo;
+import com.zhongzheng.modules.business.vo.CommonBusinessVo;
+
+import java.util.List;
+
+public interface ICommonBusinessService {
+
+    List<CommonBusinessVo> getTenantList(CommonBusinessBo bo);
+}

+ 39 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/business/service/impl/CommonBusinessServiceImpl.java

@@ -0,0 +1,39 @@
+package com.zhongzheng.modules.business.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.zhongzheng.modules.business.bo.CommonBusinessBo;
+import com.zhongzheng.modules.business.service.ICommonBusinessService;
+import com.zhongzheng.modules.business.vo.CommonBusinessVo;
+import com.zhongzheng.modules.system.domain.SysTenant;
+import com.zhongzheng.modules.system.service.ISysTenantService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 对外业务系统接口
+ *
+ */
+@Service
+public class CommonBusinessServiceImpl implements ICommonBusinessService {
+
+    @Autowired
+    private ISysTenantService sysTenantService;
+
+    @Override
+    public List<CommonBusinessVo> getTenantList(CommonBusinessBo bo) {
+        List<SysTenant> sysTenants = sysTenantService.listByIds(bo.getTenantIds());
+        if (CollectionUtils.isEmpty(sysTenants)) {
+            return new ArrayList<>();
+        }
+        return sysTenants.stream().map(x -> {
+            CommonBusinessVo vo = new CommonBusinessVo();
+            vo.setTenantId(x.getTenantId());
+            vo.setTenantName(x.getTenantName());
+            return vo;
+        }).collect(Collectors.toList());
+    }
+}

+ 19 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/business/vo/CommonBusinessVo.java

@@ -0,0 +1,19 @@
+package com.zhongzheng.modules.business.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class CommonBusinessVo implements Serializable {
+
+    @ApiModelProperty("机构ID")
+    private Long tenantId;
+
+    @ApiModelProperty("机构名称")
+    private String tenantName;
+
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseSubjectMapper.java

@@ -41,4 +41,6 @@ public interface CourseSubjectMapper extends BaseMapper<CourseSubject> {
 
     @InterceptorIgnore(tenantLine = "true")
     List<CourseSubject> getListByIDs(@Param("ids") List<Long> ids);
+
+    CourseSubject getOneByName(@Param("subjectName") String subjectName,@Param("proId") Long proId);
 }

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseSubjectProjectMapper.java

@@ -1,5 +1,6 @@
 package com.zhongzheng.modules.course.mapper;
 
+import com.zhongzheng.modules.course.domain.CourseSubject;
 import com.zhongzheng.modules.course.domain.CourseSubjectProject;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -10,5 +11,4 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @date 2021-10-09
  */
 public interface CourseSubjectProjectMapper extends BaseMapper<CourseSubjectProject> {
-
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseSubjectProjectService.java

@@ -1,5 +1,6 @@
 package com.zhongzheng.modules.course.service;
 
+import com.zhongzheng.modules.course.domain.CourseSubject;
 import com.zhongzheng.modules.course.domain.CourseSubjectProject;
 import com.zhongzheng.modules.course.vo.CourseSubjectProjectVo;
 import com.zhongzheng.modules.course.bo.CourseSubjectProjectQueryBo;

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseSubjectService.java

@@ -20,6 +20,7 @@ import java.util.List;
  * @date 2021-10-09
  */
 public interface ICourseSubjectService extends IService<CourseSubject> {
+
 	/**
 	 * 查询单个
 	 * @return
@@ -62,4 +63,6 @@ public interface ICourseSubjectService extends IService<CourseSubject> {
 	List<CourseSubject> listByIdsTenant(ClassGradeListBo bgListBo);
 
     List<CourseSubject> getListByIDs(List<Long> ids);
+
+	CourseSubject getOneByName(String subjectName, Long id);
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseSubjectProjectServiceImpl.java

@@ -10,6 +10,7 @@ import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.modules.course.bo.CourseSubjectProjectAddBo;
 import com.zhongzheng.modules.course.bo.CourseSubjectProjectEditBo;
 import com.zhongzheng.modules.course.bo.CourseSubjectProjectQueryBo;
+import com.zhongzheng.modules.course.domain.CourseSubject;
 import com.zhongzheng.modules.course.domain.CourseSubjectProject;
 import com.zhongzheng.modules.course.mapper.CourseSubjectProjectMapper;
 import com.zhongzheng.modules.course.service.ICourseSubjectProjectService;

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseSubjectServiceImpl.java

@@ -193,4 +193,9 @@ public class CourseSubjectServiceImpl extends ServiceImpl<CourseSubjectMapper, C
     public List<CourseSubject> getListByIDs(List<Long> ids) {
         return baseMapper.getListByIDs(ids);
     }
+
+    @Override
+    public CourseSubject getOneByName(String subjectName, Long proId) {
+        return baseMapper.getOneByName(subjectName,proId);
+    }
 }

+ 13 - 0
zhongzheng-system/src/main/resources/mapper/modules/course/CourseSubjectMapper.xml

@@ -164,4 +164,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             </foreach>
         </if>
     </select>
+
+    <select id="getOneByName"  resultType="com.zhongzheng.modules.course.domain.CourseSubject">
+        SELECT
+            cs.*
+        FROM
+            course_subject cs
+                LEFT JOIN course_subject_project csp ON cs.id = csp.subject_id
+        WHERE
+            csp.project_id = #{proId}
+          AND cs.subject_name = #{subjectName}
+          AND cs.`status` = 1
+            LIMIT 1
+    </select>
 </mapper>