|
@@ -0,0 +1,190 @@
|
|
|
+package cn.com.qmth.dp.examcloud.oe.modules.export_questions_count;
|
|
|
+
|
|
|
+import java.io.File;
|
|
|
+import java.io.FileOutputStream;
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Comparator;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+import org.apache.poi.xssf.usermodel.XSSFRow;
|
|
|
+import org.apache.poi.xssf.usermodel.XSSFSheet;
|
|
|
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.mongodb.core.MongoTemplate;
|
|
|
+import org.springframework.data.mongodb.core.query.Criteria;
|
|
|
+import org.springframework.data.mongodb.core.query.Query;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import cn.com.qmth.dp.examcloud.oe.excel.ExportUtils;
|
|
|
+import cn.com.qmth.dp.examcloud.oe.modules.export_questions_count.entity.Paper;
|
|
|
+import cn.com.qmth.dp.examcloud.oe.modules.export_questions_count.entity.PaperDetail;
|
|
|
+
|
|
|
+/**大题下小题数量
|
|
|
+ * @author chenken
|
|
|
+ *
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class ExportQuestionsCountService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ MongoTemplate mongoTemplate;
|
|
|
+
|
|
|
+ public void start() {
|
|
|
+ Date start=new Date();
|
|
|
+ Query query = new Query();
|
|
|
+ query.addCriteria(Criteria.where("orgId").is("1627").and("paperType").is("GENERATE"));
|
|
|
+ List<Paper> ps = mongoTemplate.find(query, Paper.class, "paper");
|
|
|
+ if (ps != null&&ps.size()>0) {
|
|
|
+ List<String> course= readCourseCode();
|
|
|
+ Map<String, String> courseMap = course.stream().collect(Collectors.toMap(a -> a, a -> a,(k1,k2)->k1));
|
|
|
+ List<Paper> psRet=new ArrayList<>();
|
|
|
+ for (Paper paper : ps) {
|
|
|
+ if(paper.getName().indexOf("2019题源")!=-1&&courseMap.get(paper.getCourseNo())!=null) {
|
|
|
+ psRet.add(paper);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (psRet != null&&psRet.size()>0) {
|
|
|
+ Map<String,RetDto> map=new HashMap<>();
|
|
|
+ System.out.println("total:" + psRet.size());
|
|
|
+ int index = 0;
|
|
|
+ for (Paper paper : psRet) {
|
|
|
+ index++;
|
|
|
+ System.out.println("index:" + index);
|
|
|
+ String cName=paper.getCourseName();
|
|
|
+ String cCode=paper.getCourseNo();
|
|
|
+ Query query2 = new Query();
|
|
|
+ query2.addCriteria(Criteria.where("paper.$id").is(paper.getId()));
|
|
|
+// query2.addCriteria(Criteria.where("paper.$id").is(new ObjectId(paper.getId())));
|
|
|
+ List<PaperDetail> ds = mongoTemplate.find(query2, PaperDetail.class, "paperDetail");
|
|
|
+ if (ds != null&&ds.size()>0) {
|
|
|
+ for (PaperDetail detail : ds) {
|
|
|
+ String qName=detail.getName();
|
|
|
+ Integer count=detail.getUnitCount();
|
|
|
+ String key=cCode+"_"+qName;
|
|
|
+ RetDto dto=map.get(key);
|
|
|
+ if(dto==null) {
|
|
|
+ dto=new RetDto(cName, cCode, qName,0);
|
|
|
+ map.put(key, dto);
|
|
|
+ }
|
|
|
+ dto.setCount(dto.getCount()+count);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<RetDto> ret= new ArrayList<RetDto>();
|
|
|
+ for(RetDto tem:map.values()) {
|
|
|
+ ret.add(tem);
|
|
|
+ }
|
|
|
+ Collections.sort(ret, new Comparator<RetDto>() {
|
|
|
+ @Override
|
|
|
+ public int compare(RetDto o1, RetDto o2) {
|
|
|
+ String c1 = o1.getCourseCode();
|
|
|
+ String c2 = o2.getCourseCode();
|
|
|
+ return c1.compareTo(c2);
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+ FileOutputStream fos=null;
|
|
|
+ try {
|
|
|
+ File file = new File("d:/ret.xlsx");
|
|
|
+ if(file.exists()) {
|
|
|
+ file.delete();
|
|
|
+ }
|
|
|
+ file.createNewFile();
|
|
|
+ fos = new FileOutputStream(file);
|
|
|
+ ExportUtils.makeExcel(RetDto.class, ret, fos);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ if(fos!=null) {
|
|
|
+ try {
|
|
|
+ fos.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ // TODO Auto-generated catch block
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ System.out.println("total:" + 0);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ System.out.println("total:" + 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ Date end=new Date();
|
|
|
+ System.out.println("*****************end:" +((end.getTime()-start.getTime())/(1000*60))+"分钟");
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<String> readCourseCode() {
|
|
|
+ List<String> list = new ArrayList<String>();
|
|
|
+ XSSFWorkbook wb = null;
|
|
|
+ try {
|
|
|
+ wb = new XSSFWorkbook("d:\\CourseCode.xlsx");
|
|
|
+ XSSFSheet sheet = wb.getSheetAt(0);
|
|
|
+ int rows = sheet.getLastRowNum();
|
|
|
+ for (int i = 1; i <= rows; i++) {
|
|
|
+ XSSFRow row = sheet.getRow(i);
|
|
|
+ list.add(row.getCell(1).getStringCellValue());
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ if (wb != null) {
|
|
|
+ try {
|
|
|
+ wb.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ // TODO Auto-generated catch block
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+// public static void main(String[] args) {
|
|
|
+// List<RetDto> ret= new ArrayList<RetDto>();
|
|
|
+// ret.add(new RetDto("cName1", "cCode1", "qName1",21));
|
|
|
+// ret.add(new RetDto("cName2", "cCode2", "qName2",22));
|
|
|
+// ret.add(new RetDto("cName3", "cCode3", "qName3",23));
|
|
|
+// ret.add(new RetDto("cName4", "cCode4", "qName4",24));
|
|
|
+// ret.add(new RetDto("cName5", "cCode7", "qName5",25));
|
|
|
+// ret.add(new RetDto("cName1", "cCode1", "qName2",21));
|
|
|
+// Collections.sort(ret, new Comparator<RetDto>() {
|
|
|
+// @Override
|
|
|
+// public int compare(RetDto o1, RetDto o2) {
|
|
|
+// String c1 = o1.getCourseCode();
|
|
|
+// String c2 = o2.getCourseCode();
|
|
|
+// return c1.compareTo(c2);
|
|
|
+// }
|
|
|
+//
|
|
|
+// });
|
|
|
+// FileOutputStream fos=null;
|
|
|
+// try {
|
|
|
+// File file = new File("d:/ret.xlsx");
|
|
|
+// if(file.exists()) {
|
|
|
+// file.delete();
|
|
|
+// }
|
|
|
+// file.createNewFile();
|
|
|
+// fos = new FileOutputStream(file);
|
|
|
+// ExportUtils.makeExcel(RetDto.class, ret, fos);
|
|
|
+// } catch (Exception e) {
|
|
|
+// e.printStackTrace();
|
|
|
+// } finally {
|
|
|
+// if(fos!=null) {
|
|
|
+// try {
|
|
|
+// fos.close();
|
|
|
+// } catch (IOException e) {
|
|
|
+// // TODO Auto-generated catch block
|
|
|
+// e.printStackTrace();
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+}
|