Browse Source

错题列表查看答案

shenhao 4 years ago
parent
commit
4cab5ebdda

+ 5 - 0
src/main/java/com/ssj/dao/sys/jxy/dao/JxyQueryDao.java

@@ -4,6 +4,7 @@ import com.ssj.sys.model.ErrorModel;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
+import java.util.List;
 import java.util.Map;
 
 public interface JxyQueryDao {
@@ -21,4 +22,8 @@ public interface JxyQueryDao {
      * @return
      */
     Page<Map<String,Object>> activityList(Map<String, Object> params, Pageable initPage);
+
+    Map<String, Object> findWorkbook(String bookId);
+
+    List<Map<String, Object>> findAnswerList(String questionIds);
 }

+ 26 - 1
src/main/java/com/ssj/dao/sys/jxy/dao/impl/JxyQueryDaoImpl.java

@@ -9,6 +9,7 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Repository;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -57,7 +58,7 @@ public class JxyQueryDaoImpl implements JxyQueryDao {
 	public Page<ErrorModel> errorList(Map<String, Object> params, Pageable initPage) {
 		StringBuilder selSQL = new StringBuilder();
 		List<Object> queryParams = new ArrayList<Object>();
-		selSQL.append("SELECT t12.child_name,t13.league_name,t.create_time,t.error_reason_code,t11.file_key,t11.`subject`,t11.create_time as upload_time \n");
+		selSQL.append("SELECT t.homework_picture_id as id,t12.child_name,t13.league_name,t.create_time,t.error_reason_code,t11.file_key,t11.`subject`,t11.create_time as upload_time \n");
 		selSQL.append("from scon_homework_idetify_error t \n");
 		selSQL.append("left join scon_homework_picture t11 on t.homework_picture_id = t11.id\n");
 		selSQL.append("left join tb_lib_vip t12 on t.vip_id = t12.id\n");
@@ -101,5 +102,29 @@ public class JxyQueryDaoImpl implements JxyQueryDao {
 		return dao.findPage(selSQL.toString(),queryParams.toArray(),initPage);
 	}
 
+	@Override
+	public Map<String, Object> findWorkbook(String bookId) {
+		StringBuilder selSQL = new StringBuilder();
+		List<Object> queryParams = new ArrayList<Object>();
+		selSQL.append("SELECT book_name,book_subject,version_name,book_grade,book_year,case when semester =1 then '上册' else '下册' end semester from q_workbook where id=? \n");
+		queryParams.add(bookId);
+		List<Map<String, Object>> list = dao.findMap(selSQL.toString(),queryParams.toArray());
+		return list.isEmpty()?new HashMap<>():list.get(0);
+	}
+
+	@Override
+	public List<Map<String, Object>> findAnswerList(String questionIds) {
+		StringBuilder sb = new StringBuilder();
+		sb.append(" select  t2.id question_id, t2.big_question_index, t2.small_question_name small_question_index,")
+				.append(" t3.answer option_answer, t3.answer_json,t2.book_course_id, t2.num")
+				.append(" from  kmt_exercise_questions t2 ")
+				.append(" LEFT JOIN q_question_info t3 ON t2.id = t3.id   where t2.id in (")
+				.append(questionIds.replace("[","").replace("]","").replace("\"","'"))
+				.append(") ")
+				.append("order by  t2.num");
+		List<Object> params = new ArrayList<>();
+		return  dao.findMap(sb.toString(),params.toArray());
+	}
+
 
 }

+ 15 - 0
src/main/java/com/ssj/service/sys/jxy/service/JxyService.java

@@ -6,6 +6,7 @@ import com.ssj.sys.model.ErrorModel;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
+import java.util.List;
 import java.util.Map;
 
 public interface JxyService extends BaseService<Jxy, String> {
@@ -62,4 +63,18 @@ public interface JxyService extends BaseService<Jxy, String> {
 	 * @return
 	 */
     Page<Map<String,Object>> activityList(Map<String, Object> params, Pageable initPage);
+
+    /**
+	 * 查询图片答案
+     */
+    Map<String, Object> searchAnswer(String homeworkPictureId);
+
+    Map<String, Object> findWorkbook(String bookId);
+
+	/**
+	 *
+	 * @param questionIds
+	 * @return
+	 */
+	List<Map<String, Object>> findAnswerList(String questionIds);
 }

+ 43 - 0
src/main/java/com/ssj/service/sys/jxy/service/impl/JxyServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.google.gson.JsonObject;
 import com.ssj.bean.sys.jxy.domain.Jxy;
+import com.ssj.bean.sys.picturepredeal.domain.PicturePreDeal;
 import com.ssj.bean.weixin.download.domain.DownloadFile;
 import com.ssj.dao.sys.jxy.dao.JxyDao;
 import com.ssj.dao.sys.jxy.dao.JxyQueryDao;
@@ -14,6 +15,7 @@ import com.ssj.framework.core.persistence.SearchFilter;
 import com.ssj.framework.core.util.SystemResourceLocator;
 import com.ssj.framework.weixin.util.BarcodeFactory;
 import com.ssj.service.sys.jxy.service.JxyService;
+import com.ssj.service.sys.picturepredeal.service.PicturePreDealService;
 import com.ssj.service.weixin.download.service.DownloadFileService;
 import com.ssj.sys.model.ErrorModel;
 import com.ssj.sys.model.SignUpBase;
@@ -40,6 +42,10 @@ public class JxyServiceImpl extends BaseServiceImpl<Jxy, String> implements JxyS
     
     @Autowired
 	private DownloadFileService downloadFileService;
+
+    @Autowired
+	private PicturePreDealService picturePreDealService;
+
 	@Override
 	public Page<Map<String, Object>> findTeacherIdForPage(
 			Map<String, Object> searchParams, Pageable pageable) {
@@ -140,4 +146,41 @@ public class JxyServiceImpl extends BaseServiceImpl<Jxy, String> implements JxyS
 		}
 		return page;
 	}
+
+	@Override
+	public Map<String, Object> searchAnswer(String homeworkPictureId) {
+
+		Map<String, Object> data = new HashMap<>();
+		//查询图片答案
+		PicturePreDeal deal = picturePreDealService.findPreDealByHomeworkPictureId(homeworkPictureId);
+		if(Objects.isNull(deal)){
+			//未识别到答案
+			data.put("state",1);
+			return  data;
+		}
+		if(deal.getDealFlag() == 0){
+			//未识别到答案
+			data.put("state",1);
+			return  data;
+		}
+		data.put("state",2);
+		//查询练习册
+		Map<String, Object> workbook = jxyQueryDao.findWorkbook(deal.getBookId());
+		data.putAll(workbook);
+
+		//查询题目答案
+		List<Map<String, Object>> answerList = jxyQueryDao.findAnswerList(deal.getQuestionIds());
+		data.put("answerList", answerList);
+		return data;
+	}
+
+	@Override
+	public Map<String, Object> findWorkbook(String bookId) {
+		return jxyQueryDao.findWorkbook(bookId);
+	}
+
+	@Override
+	public List<Map<String, Object>> findAnswerList(String questionIds) {
+		return jxyQueryDao.findAnswerList(questionIds);
+	}
 }

+ 50 - 5
src/main/java/com/ssj/sys/controller/ErrorController.java

@@ -4,10 +4,15 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil;
 import cn.afterturn.easypoi.excel.entity.ExportParams;
 import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
 import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
+import com.ssj.bean.sys.homework.domain.HomeworkPicture;
+import com.ssj.bean.sys.picturepredeal.domain.PicturePreDeal;
 import com.ssj.framework.basic.common.bean.SplitPage;
 import com.ssj.framework.core.common.controller.BaseController;
 import com.ssj.framework.core.util.PropertiesUtil;
+import com.ssj.framework.core.util.ResponseEntity;
+import com.ssj.service.sys.homework.service.HomeworkPictureService;
 import com.ssj.service.sys.jxy.service.JxyService;
+import com.ssj.service.sys.picturepredeal.service.PicturePreDealService;
 import com.ssj.service.sys.sort.service.SortService;
 import com.ssj.sys.model.ErrorModel;
 import org.apache.poi.ss.usermodel.Workbook;
@@ -24,10 +29,7 @@ import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @author sh
@@ -45,6 +47,12 @@ public class ErrorController extends BaseController {
     @Autowired
     private SortService sortService;
 
+    @Autowired
+    private PicturePreDealService picturePreDealService;
+
+    @Autowired
+    private HomeworkPictureService homeworkPictureService;
+
     @RequestMapping("/errorList")
     public String errorList(Model model,
                             @RequestParam(required = false, defaultValue = "10") int pageSize,
@@ -160,7 +168,7 @@ public class ErrorController extends BaseController {
             entity.add(e2);
             ExcelExportEntity e3 =  new ExcelExportEntity("来源","type",20);
             e3.setNeedMerge(true);
-            e3.setReplace(new String[]{"其他渠道_1","推广_2","19.9电梯广告1_3","19.9电梯广告2_4","19.9电梯广告3_5","19.9元地推_6","19.9元书店_7","19.9元其他渠道_8"});
+            e3.setReplace(new String[]{"其他渠道_1","推广_2","19.9电梯广告1_3","19.9电梯广告2_4","19.9电梯广告3_5","19.9元地推_6","19.9元书店_7","19.9元其他渠道_8","19.9电梯广告4_9","19.9电梯广告5_10","19.9电梯广告6_11","19.9电梯广告7_12"});
             entity.add(e3);
 
             ExcelExportEntity e4 =  new ExcelExportEntity("","list");
@@ -188,4 +196,41 @@ public class ErrorController extends BaseController {
             }
         }
     }
+
+    @RequestMapping(value = "/searchAnswer")
+    public String searchAnswer(String homeworkPictureId,Model model) {
+        try{
+            PicturePreDeal deal = picturePreDealService.findPreDealByHomeworkPictureId(homeworkPictureId);
+            HomeworkPicture picture = homeworkPictureService.getById(homeworkPictureId);
+            //查询练习册
+            if(Objects.isNull(deal)){
+                //未识别到答案
+                model.addAttribute("state",1);
+            }else{
+                model.addAttribute("state",2);
+            }
+            if(deal.getDealFlag() == 0){
+                //未识别到答案
+                model.addAttribute("state",1);
+            }else{
+                model.addAttribute("state",2);
+            }
+
+            if(deal.getDealFlag()>0){
+                Map<String, Object> workbook = jxyService.findWorkbook(deal.getBookId());
+                List<Map<String, Object>> answerList = jxyService.findAnswerList(deal.getQuestionIds());
+                model.addAttribute("workbook",workbook);
+                model.addAttribute("answerList",answerList);
+            }else{
+                model.addAttribute("workbook",null);
+                model.addAttribute("answerList",new ArrayList<>());
+            }
+
+            model.addAttribute("picture",picture);
+
+        }catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "sys/error/answerInfo";
+    }
 }

+ 10 - 0
src/main/java/com/ssj/sys/model/ErrorModel.java

@@ -29,6 +29,8 @@ public class ErrorModel implements Serializable {
     @Excel(name="上传时间",format ="yyyy-MM-dd HH:mm:ss",width = 20,orderNum = "6")
     private Date uploadTime;
 
+    private String id;
+
     public String getChildName() {
         return childName;
     }
@@ -84,4 +86,12 @@ public class ErrorModel implements Serializable {
     public void setUploadTime(Date uploadTime) {
         this.uploadTime = uploadTime;
     }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
 }

+ 177 - 0
src/main/resources/templates/sys/error/answerInfo.html

@@ -0,0 +1,177 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org">
+<head>
+	<title>私塾家</title>
+	
+	<script type="text/javascript" th:src="@{/static/js/echarts.min.js}"></script>
+	<script type="text/javascript" th:src="@{/static/sys/js/meun/jquery/jquery-1.9.1.min.js}"></script>
+
+	<!-- bootstrap-css -->
+	<link rel="stylesheet" th:href="@{/static/sys/css/counter/bootstrap.min.css}" >
+	<link th:href="@{/static/sys/css/counter/style.css}" rel='stylesheet' type='text/css' />
+	<link th:href="@{/static/sys/css/counter/styletop.css}" rel='stylesheet' type='text/css' />
+
+	<link rel="stylesheet" th:href="@{/static/sys/css/counter/font-awesome.min.css}">
+	<link rel="stylesheet" th:href="@{/static/sys/css/counter/bootstrapDatepickr-1.0.0.css}">
+	<script th:src="@{/static/sys/js/counter/bootstrapDatepickr-1.0.0.min.js}"></script>
+	
+	<script th:include="sys/common/metaJS" th:remove="tag"></script>
+	
+	
+	<style type="text/css">
+		.s-index-side {
+    		width: 99%;
+    		margin-top: 10px
+    	}
+    	.s-index-side .weekly-list li{
+    		height: 120px;
+    		width: 120px;
+    		float: left;
+    		margin: 10px;
+    	}
+    	.s-index-side .weekly-list li img{
+    		height: 120px;
+    		width: 120px;
+    	}
+    	.weekly-list-li{
+    		min-height: 100px
+    	}
+    	
+    	.weekly-list-li li{
+    		line-height: 39px;
+    		border-bottom: 1px dotted #d8d8d8;
+    		overflow: hidden;
+    		padding: 0px 10px 2px 17px;
+    	}
+    	.weekly-list-li .p1{
+    		line-height: 30px;
+    		font-weight: bold;
+    	}
+    	.weekly-list-li .p1 span{
+   		    color: red;
+		    border: 1px solid;
+		    padding: 2px 10px 1px 10px;
+		    border-radius: 300px;
+		    font-weight: 300;
+    	}
+    	.weekly-list-li .p2{
+    		line-height: 30px;
+    		font-weight: bold;
+    		font-size: 13px;
+    		padding-left: 10px;
+    	}
+    	.tablelink{margin-right:10px;}
+		.stylecss{
+		      color: red;
+		}
+		.select_width{
+		     width: 70px;
+		}
+		.date_width{
+		     width: 100px;
+		}
+		td div{
+	     word-break:break-all;
+		}
+		.imgtd{
+			width:60%;
+			height: 60%;
+			margin-top: 10px;
+			margin-left:10px;
+			align-content: center;
+		}
+		.imgshow{
+			width:100%;
+			margin-top: 10px;
+			margin-left:10px;
+		}
+		.scbtn {
+		    width: 85px;
+		    height: 35px;
+		    background: url(/ssj//static/sys/images/btnbg.png) no-repeat center;
+		    font-size: 14px;
+		    font-weight: bold;
+		    color: #fff;
+		    cursor: pointer;
+		    border-radius: 3px;
+		    border: 0;
+		    margin: 0;
+		    padding: 0;
+		}
+	</style>
+
+</head>
+<body>
+<section class="wrapper">
+	<!-- //market-->
+	
+    <div style="text-align: center">
+    	<h1>作业匹配答案</h1>
+    </div>
+     <div style="text-align: center" th:if="${workbook}">
+    	<h3>[[${workbook.get('version_name')}]]·[[${workbook.get('book_subject')}]]·[[${workbook.get('book_grade')}]]·[[${workbook.get('semester')}]]·[[${workbook.get('book_year')}]]·[[${workbook.get('book_name')}]]</h3>
+    </div>
+    
+    <div style="width: 100%; padding-left: 10px;">
+    	<p style="text-align: right;margin-right: 1%;">
+<!--    		<a href="javascript:;" th:href="@{/sys/admin/curator/homeworkIndex.html(libId=${param.libId},queryDate=${param.queryDate})}"><input type="button" class="scbtn" value="返回" /></a>-->
+    	</p>
+		<div class="s-index-side">
+			<div class="title">
+				<h3 style="color: #FF4E00;font-weight: bold;font-size: 15px;padding-left:17px">作业原图 </h3>
+			</div>
+			<ul class="weekly-list cls" >
+				<li>
+					<img alt="" th:src="${imgUrl+picture.fileKey}" th:onclick="'updateById(\''+${picture.fileKey}+'\')'">
+				</li>
+			</ul>
+		</div>
+		
+		<div class="s-index-side" th:if="${state == 1}">
+			<div class="title">
+				<h3 style="color: #FF4E00;font-weight: bold;font-size: 15px;padding-left:17px">答案详情 </h3>
+			</div>
+			<ul class="weekly-list cls"> 
+				<div>无匹配答案</div>
+			</ul>
+		</div> 
+		
+		
+		<div class="s-index-side" th:if="${ #lists.size(answerList)}">
+			<div class="title">
+				<h3 style="color: #FF4E00;font-weight: bold;font-size: 15px;padding-left:17px">作业答案 </h3>
+			</div>
+			<ul class="weekly-list-li" >
+				<li th:each="item:${answerList}">
+					<p class="p2">· 第[[${item.get('big_question_index')}]]大题
+						<span th:if="${(item.get('small_question_index') ne '0' && item.get('small_question_index') ne '(0)') }">(</span>
+						<span th:if="${item.get('small_question_index') ne '0' && item.get('small_question_index') ne '(0)' }">第[[${item.get('small_question_index')}]]小题目)</span>
+						<div th:utext="${item.get('option_answer')}"></div>
+					</p>
+				</li>
+			</ul>
+		</div>
+	</div>
+	
+</section>
+<div id="showDiv" style="text-align: center">
+
+<br/>
+<br/>
+<br/>
+<br/>
+<script type="text/javascript">
+	var myImgUrl  = '[[${imgUrl}]]';
+	function updateById(imgUrls){
+		var content='<div style="text-align: center"><img class="imgshow"  src='+myImgUrl+imgUrls + ''+' /></div>';
+		layer.open({
+			type: 1,
+			title: "图片查看",
+			area: ['60%', '60%'],
+			content: content
+		});
+	}
+</script>
+
+</body>
+</html>

+ 28 - 2
src/main/resources/templates/sys/error/errorList.html

@@ -16,6 +16,11 @@
 	.select_width2{
 		width: 120px;
 	}
+	.imgshow{
+		width:100%;
+		margin-top: 10px;
+		margin-left:10px;
+	}
 </style>
 <body>
 <div class="place">
@@ -71,6 +76,7 @@
 		        <th>报错时间</th>
 		        <th>报错作业原图</th>
 		        <th>上传时间</th>
+		        <th>操作</th>
 		    </tr>
 		</thead>
 		<tbody>
@@ -82,9 +88,12 @@
 				    <td th:utext="${item.errorReasonCode eq '0' } ?'答案识别失败':'答案识别错误'" ></td>
 					<td  th:text="${#calendars.format(item.createTime,'yyyy-MM-dd HH:mm:ss')}" ></td>
 					<td  class="imgtd">
-						<img  th:if="${item.fileKey}!=null" th:src="${imgUrl}+''+${item.fileKey}" style="width: 50px;height: 50px;" />
+						<img th:onclick="'updateById(\''+${item.fileKey}+'\')'"  th:if="${item.fileKey}!=null" th:src="${imgUrl}+''+${item.fileKey}" style="width: 50px;height: 50px;" />
 					</td>
 				<td  th:text="${#calendars.format(item.uploadTime,'yyyy-MM-dd HH:mm:ss')}" ></td>
+				<td>
+					<a  href="javascript:;" th:onclick="'openById(\''+${item.id}+'\')'"  class="tablelink">查看答案</a>
+				</td>
 			</tr>
 		</tbody>
 	</table>
@@ -97,7 +106,24 @@
 </body>
 <script type="text/javascript">
 
-
+	var myImgUrl  = '[[${imgUrl}]]';
+	function updateById(imgUrls){
+		var content='<div style="text-align: center"><img class="imgshow"  src='+myImgUrl+imgUrls + ''+' /></div>';
+		layer.open({
+			type: 1,
+			title: "图片查看",
+			area: ['60%', '60%'],
+			content: content
+		});
+	}
+	function openById(id){
+		layer.open({
+			type:2,
+			title: "答案查看",
+			area: ['80%', '80%'],
+			content: sysUrl+"/sys/error/searchAnswer?homeworkPictureId="+id
+		});
+	}
 
 $("#button").on('click',function(){