Переглянути джерело

Merge branch 'question-branch' into bug-branch

chen 4 роки тому
батько
коміт
b7e688e401

+ 3 - 0
ssj-kmt-exercise-api/src/main/java/com/ssj/aijia/kmt/sys/controller/KmtExerciseSysController.java

@@ -1439,6 +1439,8 @@ public class KmtExerciseSysController extends BaseController {
             entityList.add(bookStatusEntity);
             ExcelExportEntity assignedBatchEntity = new ExcelExportEntity("归属批次", "assignedBatch");
             entityList.add(assignedBatchEntity);
+            ExcelExportEntity questionNumEntity = new ExcelExportEntity("题数", "questionNum");
+            entityList.add(questionNumEntity);
 
             // 生成excel工作表
             Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(name, name, ExcelType.XSSF), entityList,
@@ -1499,6 +1501,7 @@ public class KmtExerciseSysController extends BaseController {
             dataMap.put("analysisAccuracy", Optional.ofNullable(exportDistributionExerciseBookDTO.getAnalyserAccuracy()).map(it -> BigDecimal.valueOf(it * 0.01).setScale(2, BigDecimal.ROUND_DOWN).toPlainString() + "%").orElse(""));
             dataMap.put("bookStatus", ExportExerciseBookStatusEnum.getDescriptionByCode(exportDistributionExerciseBookDTO.getBookStatus()));
             dataMap.put("assignedBatch", exportDistributionExerciseBookDTO.getAssignedBatch());
+            dataMap.put("questionNum",exportDistributionExerciseBookDTO.getQuestionNum());
         }
         return dataMapList;
     }

+ 20 - 0
ssj-kmt-exercise-service-impl/src/main/java/com/ssj/service/kmt/exercisesys/KmtExerciseSysServiceImpl.java

@@ -2428,6 +2428,7 @@ public class KmtExerciseSysServiceImpl implements KmtExerciseSysService {
         Integer pageNo = req.getPageNo();
         List<DistributionExerciseBookDTO> distributionExerciseBookDTOList =
                 kmtExerciseMapper.findDistributionExerciseBookList(req, (pageNo - 1) * pageSize, pageSize);
+        this.appendQuestionNum2List(distributionExerciseBookDTOList);
         Map<String, Object> resultMap = new HashMap<>();
         resultMap.put("pageNo", pageNo);
         resultMap.put("pageSize", pageSize);
@@ -2438,6 +2439,25 @@ public class KmtExerciseSysServiceImpl implements KmtExerciseSysService {
         return new ResponseEntity().success(resultMap, "查询成功");
     }
 
+    /**
+     * 增加题数反参
+     * @param list
+     */
+    private void appendQuestionNum2List (List<DistributionExerciseBookDTO> list) {
+        if (CollectionUtils.isNotEmpty(list)){
+            List<String> exerciseBookIds = list.stream().map(DistributionExerciseBookDTO::getExerciseBookId).collect(Collectors.toList());
+            List<DistributionExerciseBookDTO> questionNumList = kmtExerciseMapper.findExerciseQuestionNum(exerciseBookIds);
+            for (DistributionExerciseBookDTO item : list){
+                for (DistributionExerciseBookDTO questionNumItem : questionNumList){
+                    if (questionNumItem.getExerciseBookId().equals(item.getExerciseBookId())){
+                        item.setQuestionNum(questionNumItem.getQuestionNum());
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
     private String getRole(String authority) {
         StringBuilder exerciseTeacherTypeBuilder = new StringBuilder("");
         if (authority.contains("1")) {

+ 25 - 16
ssj-kmt-exercise-service-impl/src/main/java/com/ssj/service/kmt/kmt/service/impl/KmtExerciseQuestionDealServiceImpl.java

@@ -542,26 +542,35 @@ public class KmtExerciseQuestionDealServiceImpl implements KmtExerciseQuestionDe
     @Override
     public ResponseEntity removeQuestionNumMark(String userId, QuestionNumMarkRemoveVo request) {
         ResponseEntity responseEntity = new ResponseEntity();
+
         if (request.getStartX() < 0 || request.getStartY() < 0 || request.getEndX() < 0 || request.getEndY() < 0){
             return  responseEntity.failure("请把坐标定位在图片内");
-        }
-
-        KmtExerciseQuestion kmtExerciseQuestion = kmtExerciseQuestionService.getById(request.getQuestionId());
-        kmtExerciseMapper.updateQuestionStartPointAndEndPoint(request.getStartX(), request.getStartY(),
-                request.getEndX(), request.getEndY(), request.getQuestionId());
-        TbLibManager manager = bookManagerDao.findByUserIdAndType(userId, 18);
-        if (manager != null && kmtExerciseQuestion != null && kmtExerciseQuestion.getDealStatus() > 3 && kmtExerciseQuestion.getDealStatus() != 7) {
-            String path = this.removeQuestionNumMark(request.getStartX(), request.getStartY(), request.getEndX(), request.getEndY(), kmtExerciseQuestion.getImage());
-            String content = JSONFileUtil.readJSONFile(PropertiesUtil.getValue("EXERCISE_JSON_FILE_PATH") + kmtExerciseQuestion.getQuestionPath());
-            if (StringUtil.isNotBlank(content) && StringUtil.isNotBlank(path)) {
-                Map<String, Object> map = JSON.parseObject(content, Map.class);
-                map.put("question_json", Collections.singletonList(ExerciseUtil.getExerciseQuestionAnswerValue(path)));
-                map.put("question", "<img src='" + PropertiesUtil.getValue("STATIC_FILE_URL") + path + "'/>");
-                JSONFileUtil.saveJSONFile(PropertiesUtil.getValue("EXERCISE_JSON_FILE_PATH") + kmtExerciseQuestion.getQuestionPath(), JSON.toJSONString(map));
-                ThreadPool.getInstance().addTask(new SyncSaveExerciseQuestionsTask(kmtExerciseMapper, exerciseQuestionSearchService,  Collections.singletonList(kmtExerciseQuestion.getId())));
+        } else {
+            KmtExerciseQuestion kmtExerciseQuestion = kmtExerciseQuestionService.getById(request.getQuestionId());
+            if (kmtExerciseQuestion != null && StringUtil.isNotBlank(kmtExerciseQuestion.getImage())) {
+                Map<String, Integer> widthAndHeight = ExerciseUtil.getImageWidthAndHeight(kmtExerciseQuestion.getImage());
+                int width = widthAndHeight.get("width");
+                int height = widthAndHeight.get("height");
+                if (request.getStartX() > width || request.getEndX() > width || request.getStartY() > height || request.getEndY() > height){
+                    return responseEntity.failure("请把坐标定位在图片内");
+                }
+                kmtExerciseMapper.updateQuestionStartPointAndEndPoint(request.getStartX(), request.getStartY(),
+                        request.getEndX(), request.getEndY(), request.getQuestionId());
+                TbLibManager manager = bookManagerDao.findByUserIdAndType(userId, 18);
+                if (manager != null && kmtExerciseQuestion.getDealStatus() > 3 && kmtExerciseQuestion.getDealStatus() != 7) {
+                    String path = this.removeQuestionNumMark(request.getStartX(), request.getStartY(), request.getEndX(), request.getEndY(), kmtExerciseQuestion.getImage());
+                    String content = JSONFileUtil.readJSONFile(PropertiesUtil.getValue("EXERCISE_JSON_FILE_PATH") + kmtExerciseQuestion.getQuestionPath());
+                    if (StringUtil.isNotBlank(content) && StringUtil.isNotBlank(path)) {
+                        Map<String, Object> map = JSON.parseObject(content, Map.class);
+                        map.put("question_json", Collections.singletonList(ExerciseUtil.getExerciseQuestionAnswerValue(path)));
+                        map.put("question", "<img src='" + PropertiesUtil.getValue("STATIC_FILE_URL") + path + "'/>");
+                        JSONFileUtil.saveJSONFile(PropertiesUtil.getValue("EXERCISE_JSON_FILE_PATH") + kmtExerciseQuestion.getQuestionPath(), JSON.toJSONString(map));
+                        ThreadPool.getInstance().addTask(new SyncSaveExerciseQuestionsTask(kmtExerciseMapper, exerciseQuestionSearchService,  Collections.singletonList(kmtExerciseQuestion.getId())));
+                    }
+                }
             }
+            return responseEntity.success("成功");
         }
-        return responseEntity.success("成功");
     }
 
     @Override

+ 35 - 0
ssj-kmt-exercise-service-impl/src/main/java/com/ssj/utils/ExerciseUtil.java

@@ -13,6 +13,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @author yrf
@@ -25,6 +27,39 @@ public class ExerciseUtil {
     private ExerciseUtil() {
     }
 
+    /**
+     * 获取图片宽高
+     * @param imageUrl
+     * @return
+     */
+    public static Map<String, Integer> getImageWidthAndHeight (String imageUrl){
+        Map<String, Integer> result = new HashMap<>();
+        try {
+            HttpResponse response = HttpUtils.doGet(PropertiesUtil.getValue("OSS_INTERNAL_PATH"), imageUrl ,
+                    "Get",
+                    Collections.emptyMap(),
+                    Collections.singletonMap("x-oss-process", "image/info")
+            );
+            if(response.getStatusLine().getStatusCode() != 200){
+                return null;
+            }
+            String imageInfo = EntityUtils.toString(response.getEntity());
+            if("Error".equals(imageInfo)){
+                return null;
+            }
+            if (StringUtil.isNotBlank(imageInfo)){
+                JSONObject jsonObject = JSON.parseObject(imageInfo);
+                result.put("height", jsonObject.getJSONObject("ImageHeight").getInteger("value"));
+                result.put("width", jsonObject.getJSONObject("ImageWidth").getInteger("value"));
+                return result;
+            }
+            return null;
+        } catch (Exception e) {
+            logger.error("异常", e);
+        }
+        return null;
+    }
+
     public static ExerciseQuestionAnswerValue getExerciseQuestionAnswerValue(String imageUrl) {
         try {
             HttpResponse response = HttpUtils.doGet(PropertiesUtil.getValue("OSS_INTERNAL_PATH"), imageUrl ,

+ 9 - 0
ssj-kmt-exercise-service/src/main/java/com/ssj/service/kmt/exercisesys/dto/DistributionExerciseBookDTO.java

@@ -35,6 +35,7 @@ public class DistributionExerciseBookDTO implements Serializable {
     private String halfBook;
     private Integer unitNum;
     private Integer courseNum;
+    private Integer questionNum;
 
     @JSONField(serialize = false)
     private Integer intHandleAccuracy;
@@ -257,4 +258,12 @@ public class DistributionExerciseBookDTO implements Serializable {
     public void setAssignedBatch(String assignedBatch) {
         this.assignedBatch = assignedBatch;
     }
+
+    public Integer getQuestionNum() {
+        return questionNum;
+    }
+
+    public void setQuestionNum(Integer questionNum) {
+        this.questionNum = questionNum;
+    }
 }

+ 9 - 0
ssj-kmt-exercise-service/src/main/java/com/ssj/service/kmt/exercisesys/dto/ExportDistributionExerciseBookDTO.java

@@ -29,6 +29,7 @@ public class ExportDistributionExerciseBookDTO implements Serializable {
     private String halfBook;
     private Integer unitCount;
     private Integer courseCount;
+    private Integer questionNum;
 
     private String handlerName;
     private Date handlerLastSubmitTime;
@@ -316,4 +317,12 @@ public class ExportDistributionExerciseBookDTO implements Serializable {
     public void setAssignedBatch(String assignedBatch) {
         this.assignedBatch = assignedBatch;
     }
+
+    public Integer getQuestionNum() {
+        return questionNum;
+    }
+
+    public void setQuestionNum(Integer questionNum) {
+        this.questionNum = questionNum;
+    }
 }

+ 2 - 0
ssj-mybatis-service-impl/src/main/java/com/ssj/service/mapper/KmtExerciseMapper.java

@@ -1271,4 +1271,6 @@ public interface KmtExerciseMapper {
                                              @Param("endX") int endX,
                                              @Param("endY") int endY,
                                              @Param("questionId") String questionId);
+
+    List<DistributionExerciseBookDTO> findExerciseQuestionNum (@Param("exerciseBookIds") List<String> exerciseBookIds);
 }

+ 11 - 1
ssj-mybatis-service-impl/src/main/resources/mybatis/mapper/KmtExerciseMapper.xml

@@ -1906,8 +1906,9 @@
     </update>
 
     <select id="findExportDistributionExerciseBookList" resultType="com.ssj.service.kmt.exercisesys.dto.ExportDistributionExerciseBookDTO">
-        select ebdc.*, eb.assigned_batch
+        select ebdc.*, eb.assigned_batch, count(eq.id) question_num
         from kmt_exercise_book_distribution_count ebdc join kmt_exercise_book eb on ebdc.exercise_book_id=eb.id
+        join kmt_exercise_questions eq on eb.id=eq.exercise_book_id
         <where>
           <if test="req.startTime != null and req.startTime != ''">
               and ebdc.import_date > #{req.startTime}
@@ -1916,6 +1917,7 @@
               and '${req.endTime} 23:59:59' > ebdc.import_date
           </if>
         </where>
+        group by ebdc.exercise_book_id
         order by ebdc.import_date desc
         limit #{offset}
     </select>
@@ -2092,4 +2094,12 @@
         </if>
         order by eb.book_name
     </select>
+
+    <select id="findExerciseQuestionNum" resultType="com.ssj.service.kmt.exercisesys.dto.DistributionExerciseBookDTO">
+        select exercise_book_id, count(1) question_num from kmt_exercise_questions where exercise_book_id in
+        <foreach collection="exerciseBookIds" item="id" index="index" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+        group by exercise_book_id
+    </select>
 </mapper>