浏览代码

自考管理端

haogh 2 月之前
父节点
当前提交
46e85ad7b8
共有 100 个文件被更改,包括 7410 次插入433 次删除
  1. 4 1
      ses-manage/src/main/java/cn/hmsoft/frame/control/FrameOptrGxControl.java
  2. 12 0
      ses-manage/src/main/java/cn/hmsoft/ses/common/constants/SysConst.java
  3. 578 0
      ses-manage/src/main/java/cn/hmsoft/ses/control/by/ByApplyControl.java
  4. 1 0
      ses-manage/src/main/java/cn/hmsoft/ses/control/by/ByCertificateControl.java
  5. 193 0
      ses-manage/src/main/java/cn/hmsoft/ses/control/by/ByCourseReplDetailPreControl.java
  6. 14 7
      ses-manage/src/main/java/cn/hmsoft/ses/control/by/ByDiaplmaControl.java
  7. 4 0
      ses-manage/src/main/java/cn/hmsoft/ses/control/mk/MkCertEduApplyControl.java
  8. 4 0
      ses-manage/src/main/java/cn/hmsoft/ses/control/mk/MkCertNeduApplyControl.java
  9. 398 0
      ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlCoursePreControl.java
  10. 1 0
      ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlMajorApplyControl.java
  11. 92 0
      ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlMajorApplyProControl.java
  12. 15 4
      ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlMajorControl.java
  13. 4 4
      ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlMajorCourseControl.java
  14. 581 0
      ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlMajorCoursePreControl.java
  15. 351 0
      ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlMajorPreControl.java
  16. 43 21
      ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlMergePublishPlanControl.java
  17. 5 16
      ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlPublishPlanMainControl.java
  18. 0 71
      ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlStdRecordCancelControl.java
  19. 97 20
      ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlStdRecordControl.java
  20. 416 61
      ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlTextbookControl.java
  21. 451 0
      ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlTextbookPreControl.java
  22. 88 45
      ses-manage/src/main/java/cn/hmsoft/ses/control/std/StdBlackListControl.java
  23. 48 0
      ses-manage/src/main/java/cn/hmsoft/ses/control/std/StdBreakDisciplineControl.java
  24. 10 2
      ses-manage/src/main/java/cn/hmsoft/ses/control/std/StdRegInfoControl.java
  25. 24 0
      ses-manage/src/main/java/cn/hmsoft/ses/control/std/StdTicketControl.java
  26. 18 8
      ses-manage/src/main/java/cn/hmsoft/ses/control/sys/SysAppNewsControl.java
  27. 11 0
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/by/ByApplyDao.java
  28. 2 2
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/by/ByCertificateDao.java
  29. 2 2
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/by/ByCourseReplDetailDao.java
  30. 106 0
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/by/ByCourseReplDetailPreDao.java
  31. 9 4
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/by/ByDiaplmaDao.java
  32. 7 2
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/by/ByScoreDao.java
  33. 17 6
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/kj/KjCollegeScoreDetailDao.java
  34. 125 4
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/kj/KjUnifiedScoreDetailDao.java
  35. 6 1
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlCourseDao.java
  36. 286 0
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlCoursePreDao.java
  37. 1 1
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlCourseTextbookDao.java
  38. 78 0
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlCourseTextbookLogPreDao.java
  39. 139 0
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlCourseTextbookPreDao.java
  40. 19 0
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlExamTimeDao.java
  41. 48 0
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlMajorApplyProDao.java
  42. 26 0
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlMajorApplyProDetailDao.java
  43. 6 8
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlMajorCourseDao.java
  44. 211 0
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlMajorCoursePreDao.java
  45. 38 8
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlMajorDao.java
  46. 313 0
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlMajorPreDao.java
  47. 14 16
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlMergePublishPlanDao.java
  48. 66 0
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlSchoolMajorPreDao.java
  49. 14 9
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlStdRecordDao.java
  50. 73 33
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlTextbookDao.java
  51. 92 0
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlTextbookPreDao.java
  52. 20 0
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/std/StdBreakDisciplineFileDao.java
  53. 10 2
      ses-manage/src/main/java/cn/hmsoft/ses/data/dao/std/StdEnrolDao.java
  54. 2 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/by/IByApplyService.java
  55. 28 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/by/IByCourseReplDetailPreService.java
  56. 3 3
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/by/IByDiaplmaService.java
  57. 55 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlCoursePreService.java
  58. 31 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlCourseTextbookLogPreService.java
  59. 35 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlCourseTextbookPreService.java
  60. 3 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlExamTimeService.java
  61. 23 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlMajorApplyProService.java
  62. 42 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlMajorCoursePreService.java
  63. 1 1
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlMajorCourseService.java
  64. 62 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlMajorPreService.java
  65. 5 2
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlMajorService.java
  66. 3 2
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlMergePublishPlanService.java
  67. 3 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlPublishPlanMainService.java
  68. 26 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlSchoolMajorPreService.java
  69. 1 1
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlStdRecordService.java
  70. 27 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlTextbookPreService.java
  71. 6 1
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlTextbookService.java
  72. 6 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/std/IStdBlackListService.java
  73. 1 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/std/IStdEnrolService.java
  74. 1 1
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/std/IStdRegInfoService.java
  75. 1 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/iface/std/IStdTicketService.java
  76. 6 1
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/by/ByApplyServiceImpl.java
  77. 21 1
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/by/ByCertificateServiceImpl.java
  78. 117 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/by/ByCourseReplDetailPreServiceImpl.java
  79. 15 15
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/by/ByDiaplmaServiceImpl.java
  80. 12 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/by/ByTurnOutApplyServiceImpl.java
  81. 27 5
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/by/CountryTurnServiceImpl.java
  82. 2 2
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/kj/KjCollegeScoreMainServiceImpl.java
  83. 32 1
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/mk/MkCertEduApplyServiceImpl.java
  84. 283 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlCoursePreServiceImpl.java
  85. 4 9
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlCourseServiceImpl.java
  86. 106 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlCourseTextbookLogPreServiceImpl.java
  87. 210 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlCourseTextbookPreServiceImpl.java
  88. 10 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlExamTimeServiceImpl.java
  89. 81 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlMajorApplyProServiceImpl.java
  90. 121 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlMajorCoursePreServiceImpl.java
  91. 10 2
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlMajorCourseServiceImpl.java
  92. 371 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlMajorPreServiceImpl.java
  93. 51 9
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlMajorServiceImpl.java
  94. 8 7
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlMergePublishPlanServiceImpl.java
  95. 39 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlPublishPlanMainServiceImpl.java
  96. 74 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlSchoolMajorPreServiceImpl.java
  97. 1 1
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlStdRecordCancelServiceImpl.java
  98. 9 7
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlStdRecordServiceImpl.java
  99. 212 0
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlTextbookPreServiceImpl.java
  100. 32 4
      ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlTextbookServiceImpl.java

+ 4 - 1
ses-manage/src/main/java/cn/hmsoft/frame/control/FrameOptrGxControl.java

@@ -269,6 +269,9 @@ public class FrameOptrGxControl extends FrameControl {
 	@RequestMapping({"frame/optr/initGx"})
 	  public Ajax init()
 	  {
+		FrameOptr optr = RequestContextUtil.currentLoginUser();
+		FrameAssertUtil.isNotNull(optr, "请重新登录");
+
 	    Map<String, Object> map = new HashMap<String, Object>();
 	    
 	    //字典缓存 
@@ -279,7 +282,7 @@ public class FrameOptrGxControl extends FrameControl {
 	    
 	    // 系统参数
 	    map.put("FrameParamArray", this.frameParamService.listParams(AppHelper.AppName));
-	    FrameOptr optr = RequestContextUtil.currentLoginUser();
+	    
 	    FrameOptr optrFront = new FrameOptr();
 	    BeanUtils.copyProperties(optr, optrFront);
 	    optrFront.setLogin_pass("******");

+ 12 - 0
ses-manage/src/main/java/cn/hmsoft/ses/common/constants/SysConst.java

@@ -145,6 +145,14 @@ public class SysConst {
     public static String getCountryPlanPath() {
     	return getAppConfig().getUploadBase() + File.separator + "CountryPlan" + File.separator;
     }
+    
+    /**
+     * 违纪路径
+     * @return
+     */
+    public static String getStdBreakDisciplinePath(Integer exam_time_id) {
+    	return getAppConfig().getUploadBase() + File.separator + "StdBreakDiscipline" + File.separator + exam_time_id + File.separator;
+    }
    
     /**
      * 临时目录.
@@ -170,6 +178,10 @@ public class SysConst {
     	return File.separator + "ByPaperPhoto" + File.separator + first4 + File.separator + second3 + File.separator;
     }
     
+    public static String getPlTextbookPath(String year_code) {
+    	return getAppConfig().getUploadBase() + File.separator + "PlTextbook" + File.separator + year_code + File.separator;
+    }
+    
     public static void main(String[] args) {
 		String str = "122304200006";
 		System.err.println(str.substring(0, 4));

+ 578 - 0
ses-manage/src/main/java/cn/hmsoft/ses/control/by/ByApplyControl.java

@@ -2,12 +2,15 @@ package cn.hmsoft.ses.control.by;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -25,6 +28,19 @@ import org.apache.poi.xssf.usermodel.XSSFFont;
 import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.xwpf.usermodel.BreakType;
+import org.apache.poi.xwpf.usermodel.Document;
+import org.apache.poi.xwpf.usermodel.PositionInParagraph;
+import org.apache.poi.xwpf.usermodel.TextSegement;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.apache.poi.xwpf.usermodel.XWPFParagraph;
+import org.apache.poi.xwpf.usermodel.XWPFPictureData;
+import org.apache.poi.xwpf.usermodel.XWPFRun;
+import org.apache.poi.xwpf.usermodel.XWPFTable;
+import org.apache.poi.xwpf.usermodel.XWPFTableCell;
+import org.apache.poi.xwpf.usermodel.XWPFTableRow;
+import org.apache.xmlbeans.XmlOptions;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -63,9 +79,11 @@ import cn.hmsoft.ses.data.model.by.ByScore;
 import cn.hmsoft.ses.data.model.by.ByTimeConfig;
 import cn.hmsoft.ses.data.model.by.ByXueXin;
 import cn.hmsoft.ses.data.model.cf.CfOrganization;
+import cn.hmsoft.ses.data.model.kj.KjUnifiedScoreDetail;
 import cn.hmsoft.ses.data.model.mk.MkPreEduApply;
 import cn.hmsoft.ses.data.model.pl.PlExamTime;
 import cn.hmsoft.ses.data.model.pl.PlMajor;
+import cn.hmsoft.ses.data.model.pl.PlMajorCourse;
 import cn.hmsoft.ses.data.model.pl.PlMajorOldNew;
 import cn.hmsoft.ses.data.model.std.StdBreakDiscipline;
 import cn.hmsoft.ses.data.model.std.StdRegInfo;
@@ -78,8 +96,10 @@ import cn.hmsoft.ses.service.iface.by.IByTimeConfigService;
 import cn.hmsoft.ses.service.iface.by.IByXueXinService;
 import cn.hmsoft.ses.service.iface.cf.ICfOrganizationService;
 import cn.hmsoft.ses.service.iface.kj.IKjByInputScoreService;
+import cn.hmsoft.ses.service.iface.kj.IKjUnifiedScoreDetailService;
 import cn.hmsoft.ses.service.iface.mk.IMkPreEduApplyService;
 import cn.hmsoft.ses.service.iface.pl.IPlExamTimeService;
+import cn.hmsoft.ses.service.iface.pl.IPlMajorCourseService;
 import cn.hmsoft.ses.service.iface.pl.IPlMajorService;
 import cn.hmsoft.ses.service.iface.std.IStdBreakDisciplineService;
 import cn.hmsoft.ses.service.iface.std.IStdRegInfoService;
@@ -137,6 +157,10 @@ public class ByApplyControl extends FrameControl {
     
     @Autowired
     private IFrameParamService frameParamService;
+    @Autowired
+    private IKjUnifiedScoreDetailService kjUnifiedScoreDetailService;
+    @Autowired
+    private IPlMajorCourseService plMajorCourseService;
     
     
     @RequestMapping("by/byApply/initdata")
@@ -380,6 +404,12 @@ public class ByApplyControl extends FrameControl {
     	    	FrameAssertUtil.isEmpty(applist3, "新专业对应老专业已经毕业,不能重复申请!");
     		}
     	}
+    	
+    	// 校验考生当前专业是否已经毕业
+		List<ByApply> byList = this.byApplyService.queryIsAlreadyBy(byApply.getStd_id(),byApply.getMajor_id());
+		if(null != byList && !byList.isEmpty()){
+			throw new BusinessException("当前账号(或账号对应的证件号),当前专业(或专业对应的旧专业)已经存在审核通过的毕业申请单,不允许再次申请毕业。");
+		}
 		
 		//毕业证书
 		List<ByApply> applyList = this.byApplyService.list("diaplma_no", byApply.getDiaplma_no());
@@ -1955,4 +1985,552 @@ public class ByApplyControl extends FrameControl {
 	}
 	
 	
+	@RequestMapping("by/byApply/downloadByScoreTable")
+	public void downloadByScoreTable(Integer[] ids) {
+
+		XWPFDocument doc = null;
+		ServletOutputStream outStream = null;
+		String std_name = "";
+
+		/*
+		 * FileOutputStream out = null; try { out = new
+		 * FileOutputStream("D:\\bak\\111.doc"); } catch (FileNotFoundException
+		 * e1) {
+		 * 
+		 * }
+		 */
+
+		try {
+			if (null != ids && ids.length > 0) {
+				List<XWPFDocument> documentList = new ArrayList<XWPFDocument>();
+
+				XWPFDocument xWPFDocument = null;
+				for (Integer id : ids) {
+					ByApply detail = this.byApplyService.find(id);
+					StdRegInfo std = this.stdRegInfoService.find(detail.getStd_id());
+					if(null != std){
+			    		//解密考生信息
+			    		this.stdRegInfoService.DecryptStd(std);
+			    	}
+					
+					std_name += "-"+std.getStd_name(); 
+					
+					xWPFDocument = this.downloadByScore(id,detail,std);
+					documentList.add(xWPFDocument);
+				}
+
+				for (int i = 0; i < documentList.size(); i++) {
+					doc = documentList.get(0);
+					if (i == 0) {// 首页直接分页,不再插入首页文档内容
+						if (documentList.size() > 1) {
+							// 只有一页时,不再分页
+							documentList.get(i).createParagraph().createRun().addBreak(BreakType.PAGE);
+						}
+
+						// appendBody(doc,documentList.get(i));
+					} else if (i == documentList.size() - 1) {// 尾页不再分页,直接插入最后文档内容
+						appendBody(doc, documentList.get(i));
+					} else {
+						documentList.get(i).createParagraph().createRun().addBreak(BreakType.PAGE);
+						appendBody(doc, documentList.get(i));
+					}
+				}
+			} else {
+				doc = new XWPFDocument();
+			}
+
+			// doc.write(out);
+
+			String fileName = "广西自学考试成绩证明"+std_name+".docx";
+			fileName = URLEncoder.encode(fileName, "UTF-8");
+			fileName = new String(fileName.getBytes(), "ISO-8859-1");
+			ByteArrayOutputStream os = new ByteArrayOutputStream();
+			doc.write(os);
+			this.getResponse().reset();
+			this.getResponse().setContentType("application/x-msdownload");
+			this.getResponse().setHeader("Content-Disposition", "attachment; filename=" + fileName);
+			outStream = this.getResponse().getOutputStream();
+			outStream.write(os.toByteArray());
+
+		} catch (Exception e) {
+			LogHelper.error(e);
+		} finally {
+			if (outStream != null) {
+				try {
+					outStream.close();
+				} catch (IOException e) {
+					LogHelper.error(e);
+				}
+			}
+
+			/*
+			 * if (out != null) { try { out.close(); } catch (IOException e) {
+			 * LogHelper.error(e); } }
+			 */
+
+		}
+
+	}
+
+	
+	private XWPFDocument downloadByScore(Integer id, ByApply detail, StdRegInfo std) {
+		FileInputStream in = null;
+		XWPFDocument doc = null;
+		ServletOutputStream outStream = null;
+
+		try {
+
+			PlMajor major = this.plMajorService.find(detail.getMajor_id());
+
+			List<Map<String, Object>> scoreList = this.byApplyService.getCourseScoreListForQuery(detail);
+
+			
+			int size = 0;
+			if (null != scoreList && !scoreList.isEmpty()) {
+				int i = 0;
+				String final_score = null;
+				for (Map<String, Object> score : scoreList) {
+					final_score = (null == score.get("final_score") ? "" : score.get("final_score").toString());
+					if (StringUtils.isEmpty(final_score)) {
+						continue;
+					}
+
+					i++;
+				}
+
+				size = i;
+			}
+
+			if (size > 24) {
+				size = 24;
+			}
+			
+			String fileName = "自考成绩证明_" + size + ".docx";
+
+			String filePath = this.getClass().getResource("/document/" + fileName).getFile();
+
+			File file = new File(filePath);
+
+			in = new FileInputStream(file);
+
+			doc = new XWPFDocument(in);
+
+			Map<String, String> param = new HashMap<String, String>();
+
+			param.put("${A}", (null == std.getStd_name() ? "" : std.getStd_name()));
+			param.put("${B}", (null == major.getMajor_name() ? "" : major.getMajor_name()));
+
+			if (major.getMajor_level().intValue() == 1) {
+				param.put("${C}", "本科");
+			} else {
+				param.put("${C}", "专科");
+			}
+
+			param.put("${D}", (null == std.getTicket_no() ? "" : std.getTicket_no()));
+			param.put("${E}", (null == std.getCert_no() ? "" : std.getCert_no()));
+			param.put("${F}", YearCodeHelper.getExamYear());
+
+			List<XWPFParagraph> paragraphLists = doc.getParagraphs();
+
+			// 处理段落
+			replaceInParagraphs(param, paragraphLists);
+
+			Map<String, String> params = new HashMap<String, String>();
+
+			int i = 1;
+			String course_name = null;
+			String course_score = null;
+			String final_score = null;
+
+			for (Map<String, Object> score : scoreList) {
+				
+				final_score = (null == score.get("final_score") ? "" : score.get("final_score").toString());
+				
+				if(StringUtils.isEmpty(final_score)){
+					continue;
+				}
+				
+				course_name = (null == score.get("course_name") ? "" : score.get("course_name").toString());
+				
+				params.put("${n_" + i + "}", course_name);
+				
+				params.put("${s_" + i + "}", final_score);
+				
+
+				if (null != course_name && course_name.indexOf("毕业论文") != -1) {
+					params.put("${f_" + i + "}", "不计学分");
+				} else {
+					course_score = (null == score.get("course_score") ? "" : score.get("course_score").toString());
+					
+					if (!StringUtils.isEmpty(course_score) && RegexUtil.isFloatNum(course_score)) {
+						double double_score = Double.valueOf(course_score);
+						int int_score = (int)double_score;
+						
+						if(int_score == 0){
+							params.put("${f_" + i + "}", "");
+
+						}else{
+							params.put("${f_" + i + "}", String.valueOf(int_score));
+
+						}
+						
+					} else {
+						params.put("${f_" + i + "}", course_score);
+					}
+					
+				}
+
+				i++;
+			}
+
+			// 处理表格
+			Iterator<XWPFTable> iterator = doc.getTablesIterator();
+			while (iterator.hasNext()) {
+				XWPFTable table = iterator.next();
+				List<XWPFTableRow> rows = table.getRows();
+				for (XWPFTableRow row : rows) {
+					List<XWPFTableCell> tableCells = row.getTableCells();
+					for (XWPFTableCell cell : tableCells) {
+						List<XWPFParagraph> cellParagraphs = cell.getParagraphs();
+						replaceInParagraphs(params, cellParagraphs);
+					}
+				}
+			}
+
+		} catch (FileNotFoundException e) {
+			LogHelper.error(e);
+		} catch (IOException e) {
+			LogHelper.error(e);
+		} finally {
+			if (outStream != null) {
+				try {
+					outStream.close();
+				} catch (IOException e) {
+					LogHelper.error(e);
+				}
+			}
+		}
+
+		return doc;
+	}
+	
+	private static long replaceInParagraphs(Map<String, String> replacements, List<XWPFParagraph> xwpfParagraphs) {
+		long count = 0;
+		for (XWPFParagraph paragraph : xwpfParagraphs) {
+			List<XWPFRun> runs = paragraph.getRuns();
+			for (Map.Entry<String, String> replPair : replacements.entrySet()) {
+				String find = replPair.getKey();
+				String repl = replPair.getValue();
+				TextSegement found = paragraph.searchText(find, new PositionInParagraph());
+				if (found != null) {
+					count++;
+					if (found.getBeginRun() == found.getEndRun()) {
+						// whole search string is in one Run
+						XWPFRun run = runs.get(found.getBeginRun());
+						String runText = run.getText(run.getTextPosition());
+						String replaced = runText.replace(find, repl);
+						run.setText(replaced, 0);
+					} else {
+						// The search string spans over more than one Run
+						// Put the Strings together
+						StringBuilder b = new StringBuilder();
+						for (int runPos = found.getBeginRun(); runPos <= found.getEndRun(); runPos++) {
+							XWPFRun run = runs.get(runPos);
+							b.append(run.getText(run.getTextPosition()));
+						}
+						String connectedRuns = b.toString();
+						String replaced = connectedRuns.replace(find, repl);
+						// The first Run receives the replaced String of all
+						// connected Runs
+						XWPFRun partOne = runs.get(found.getBeginRun());
+						partOne.setText(replaced, 0);
+						// Removing the text in the other Runs.
+						for (int runPos = found.getBeginRun() + 1; runPos <= found.getEndRun(); runPos++) {
+							XWPFRun partNext = runs.get(runPos);
+							partNext.setText("", 0);
+						}
+					}
+				}
+			}
+		}
+		return count;
+	}
+
+	
+
+	private void appendBody(XWPFDocument src, XWPFDocument append) throws Exception {
+		CTBody src1Body = src.getDocument().getBody();
+		CTBody src2Body = append.getDocument().getBody();
+
+		List<XWPFPictureData> allPictures = append.getAllPictures();
+		// 记录图片合并前及合并后的ID
+		Map<String, String> map = new HashMap<String, String>();
+		for (XWPFPictureData picture : allPictures) {
+			String before = append.getRelationId(picture);
+			// 将原文档中的图片加入到目标文档中
+			String after = src.addPictureData(picture.getData(), Document.PICTURE_TYPE_PNG);
+			map.put(before, after);
+		}
+		appendBody(src1Body, src2Body, map);
+	}
+
+	private void appendBody(CTBody src, CTBody append, Map<String, String> map) throws Exception {
+		XmlOptions optionsOuter = new XmlOptions();
+		optionsOuter.setSaveOuter();
+		String appendString = append.xmlText(optionsOuter);
+
+		String srcString = src.xmlText();
+		String prefix = srcString.substring(0, srcString.indexOf(">") + 1);
+		String mainPart = srcString.substring(srcString.indexOf(">") + 1, srcString.lastIndexOf("<"));
+		String sufix = srcString.substring(srcString.lastIndexOf("<"));
+		String addPart = appendString.substring(appendString.indexOf(">") + 1, appendString.lastIndexOf("<"));
+		if (map != null && !map.isEmpty()) {
+			// 对xml字符串中图片ID进行替换
+			for (Map.Entry<String, String> set : map.entrySet()) {
+				addPart = addPart.replace(set.getKey(), set.getValue());
+			}
+		}
+		// 将两个文档的xml内容进行拼接
+		CTBody makeBody = CTBody.Factory.parse(prefix + mainPart + addPart + sufix);
+		src.set(makeBody);
+	}
+	
+	
+	@RequestMapping("by/byApply/downloadStdScoreTable")
+	public void downloadStdScoreTable(Integer std_id, Integer major_id) {
+
+		XWPFDocument doc = null;
+		ServletOutputStream outStream = null;
+		String std_name = "";
+
+		try {
+			List<XWPFDocument> documentList = new ArrayList<XWPFDocument>();
+
+			XWPFDocument xWPFDocument = null;
+			StdRegInfo std = this.stdRegInfoService.find(std_id);
+			if (null != std) {
+				// 解密考生信息
+				this.stdRegInfoService.DecryptStd(std);
+			}
+
+			std_name += "-" + std.getStd_name();
+
+			if (null == major_id) {
+				major_id = std.getMajor_id();
+			}
+
+			xWPFDocument = this.downloadStdScore(major_id, std);
+			documentList.add(xWPFDocument);
+
+			for (int i = 0; i < documentList.size(); i++) {
+				doc = documentList.get(0);
+				if (i == 0) {// 首页直接分页,不再插入首页文档内容
+					if (documentList.size() > 1) {
+						// 只有一页时,不再分页
+						documentList.get(i).createParagraph().createRun().addBreak(BreakType.PAGE);
+					}
+
+					// appendBody(doc,documentList.get(i));
+				} else if (i == documentList.size() - 1) {// 尾页不再分页,直接插入最后文档内容
+					appendBody(doc, documentList.get(i));
+				} else {
+					documentList.get(i).createParagraph().createRun().addBreak(BreakType.PAGE);
+					appendBody(doc, documentList.get(i));
+				}
+			}
+
+			// doc.write(out);
+
+			String fileName = "广西自学考试成绩证明" + std_name + ".docx";
+			fileName = URLEncoder.encode(fileName, "UTF-8");
+			fileName = new String(fileName.getBytes(), "ISO-8859-1");
+			ByteArrayOutputStream os = new ByteArrayOutputStream();
+			doc.write(os);
+			this.getResponse().reset();
+			this.getResponse().setContentType("application/x-msdownload");
+			this.getResponse().setHeader("Content-Disposition", "attachment; filename=" + fileName);
+			outStream = this.getResponse().getOutputStream();
+			outStream.write(os.toByteArray());
+
+		} catch (Exception e) {
+			LogHelper.error(e);
+		} finally {
+			if (outStream != null) {
+				try {
+					outStream.close();
+				} catch (IOException e) {
+					LogHelper.error(e);
+				}
+			}
+
+			/*
+			 * if (out != null) { try { out.close(); } catch (IOException e) {
+			 * LogHelper.error(e); } }
+			 */
+
+		}
+
+	}
+
+	private XWPFDocument downloadStdScore(Integer major_id, StdRegInfo std) {
+		FileInputStream in = null;
+		XWPFDocument doc = null;
+		ServletOutputStream outStream = null;
+
+		try {
+
+			PlMajor major = this.plMajorService.find(major_id);
+			List<PlMajorCourse> plMajorCourseList = this.plMajorCourseService.listByMajorCourse(major_id);
+			
+			List<KjUnifiedScoreDetail> temp_scoreList = this.kjUnifiedScoreDetailService.byPrediction(null, std.getTicket_no(), null, major_id);
+
+
+			List<KjUnifiedScoreDetail> scoreList = new ArrayList<KjUnifiedScoreDetail>();
+			Map<String,String> haveMap = new HashMap<String,String>();
+			
+			//去除重复成绩取最高成绩
+			for(KjUnifiedScoreDetail detail:temp_scoreList){
+				
+				if("red".equals(detail.getRemark())){
+					continue;
+				}
+				
+				// temp_scoreList同一课程多个成绩最高分排在第最前面
+				if(haveMap.containsKey(detail.getCourse_code())){
+					continue;
+				}else{
+					haveMap.put(detail.getCourse_code(), detail.getCourse_code());
+					scoreList.add(detail);
+				}
+				
+			}
+
+			int size = 0;
+			if (null != scoreList && !scoreList.isEmpty()) {
+				int i=0;
+				for (KjUnifiedScoreDetail score : scoreList) {
+					if(StringUtils.isEmpty(score.getFinal_score())){
+						continue;
+					}
+
+					i++;
+				}
+				
+				size = i;
+			}
+			
+			if(size>24){
+				size = 24;
+			}
+
+			String fileName = "自考平时成绩证明_" + size + ".docx";
+
+			String filePath = this.getClass().getResource("/document/" + fileName).getFile();
+
+			File file = new File(filePath);
+
+			in = new FileInputStream(file);
+
+			doc = new XWPFDocument(in);
+
+			Map<String, String> param = new HashMap<String, String>();
+
+			param.put("${A}", (null == std.getStd_name() ? "" : std.getStd_name()));
+			param.put("${B}", (null == major.getMajor_name() ? "" : major.getMajor_name()));
+
+			if (major.getMajor_level().intValue() == 1) {
+				param.put("${C}", "本科");
+			} else {
+				param.put("${C}", "专科");
+			}
+
+			param.put("${D}", (null == std.getTicket_no() ? "" : std.getTicket_no()));
+			param.put("${E}", (null == std.getCert_no() ? "" : std.getCert_no()));
+			param.put("${F}", YearCodeHelper.getExamYear());
+			param.put("${G}", plMajorCourseList.size()+"");
+			param.put("${H}", size+"");
+
+			List<XWPFParagraph> paragraphLists = doc.getParagraphs();
+
+			// 处理段落
+			replaceInParagraphs(param, paragraphLists);
+
+			Map<String, String> params = new HashMap<String, String>();
+
+			int i = 1;
+			String course_name = null;
+			String course_score = null;
+			String final_score = null;
+			for (KjUnifiedScoreDetail score : scoreList) {
+				
+				final_score = (null == score.getFinal_score() ? "" : score.getFinal_score());
+				
+				if(StringUtils.isEmpty(final_score)){
+					continue;
+				}
+				
+				course_name = (null == score.getCourse_name() ? "" : score.getCourse_name());
+
+				params.put("${n_" + i + "}", course_name);
+
+				params.put("${s_" + i + "}", final_score);
+
+				if (null != course_name && course_name.indexOf("毕业论文") != -1) {
+					params.put("${f_" + i + "}", "不计学分");
+				} else {
+					course_score = (null == score.getCourse_score() ? "" : score.getCourse_score());
+
+					if (!StringUtils.isEmpty(course_score) && RegexUtil.isFloatNum(course_score)) {
+						double double_score = Double.valueOf(course_score);
+						int int_score = (int) double_score;
+
+						if (int_score == 0) {
+							params.put("${f_" + i + "}", "");
+
+						} else {
+							params.put("${f_" + i + "}", String.valueOf(int_score));
+
+						}
+
+					} else {
+						params.put("${f_" + i + "}", course_score);
+					}
+
+				}
+
+				i++;
+			}
+
+			// 处理表格
+			Iterator<XWPFTable> iterator = doc.getTablesIterator();
+			while (iterator.hasNext()) {
+				XWPFTable table = iterator.next();
+				List<XWPFTableRow> rows = table.getRows();
+				for (XWPFTableRow row : rows) {
+					List<XWPFTableCell> tableCells = row.getTableCells();
+					for (XWPFTableCell cell : tableCells) {
+						List<XWPFParagraph> cellParagraphs = cell.getParagraphs();
+						replaceInParagraphs(params, cellParagraphs);
+					}
+				}
+			}
+
+		} catch (FileNotFoundException e) {
+			LogHelper.error(e);
+		} catch (IOException e) {
+			LogHelper.error(e);
+		} finally {
+			if (outStream != null) {
+				try {
+					outStream.close();
+				} catch (IOException e) {
+					LogHelper.error(e);
+				}
+			}
+		}
+
+		return doc;
+	}
+	
+	
 }

+ 1 - 0
ses-manage/src/main/java/cn/hmsoft/ses/control/by/ByCertificateControl.java

@@ -254,6 +254,7 @@ public class ByCertificateControl extends FrameControl {
 			}
 			super.downloadFile(this.byCertificateService.exportCertificatePdf(query, this.getQueryOrder(order, type),   status,examTimeId,ids,null,null), "毕业证明书套打.pdf", true);
 		}catch(Exception e){
+			LogHelper.error(e);
 			this.writeAlert(e.getMessage());
 		}
     }

+ 193 - 0
ses-manage/src/main/java/cn/hmsoft/ses/control/by/ByCourseReplDetailPreControl.java

@@ -0,0 +1,193 @@
+package cn.hmsoft.ses.control.by;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletOutputStream;
+
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import cn.hmsoft.frame.control.FrameControl;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import cn.hmsoft.jdbc.entity.QueryOrderType;
+import cn.hmsoft.office.excel.Excel2007Writer;
+import cn.hmsoft.ses.data.model.by.ByCourseReplDetailPre;
+import cn.hmsoft.ses.service.iface.by.IByCourseReplDetailPreService;
+import cn.hmsoft.ses.service.iface.pl.IPlCoursePreService;
+import cn.hmsoft.ses.service.iface.pl.IPlMajorCoursePreService;
+import cn.hmsoft.ses.service.iface.pl.IPlMajorPreService;
+import cn.hmsoft.web.entity.Ajax;
+
+/**
+ * 课程顶替详情表 控制器.
+ * 
+ * @author: haoguanghui
+ * @date: 2019-01-07 16:16:11
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@RestController
+public class ByCourseReplDetailPreControl extends FrameControl {
+
+	@Autowired
+	private IByCourseReplDetailPreService byCourseReplDetailService;
+	@Autowired
+	private IPlMajorPreService majorService;
+	@Autowired
+	private IPlCoursePreService courseService;
+	@Autowired
+	private IPlMajorCoursePreService mcCourseService;
+
+	/**
+	 * 分页查询-课程顶替详情
+	 * 
+	 * @param major_id:专业ID
+	 * @param old_course_id:历史课程
+	 * @param repl_course_id:
+	 *            现课程
+	 */
+	@RequestMapping("by/byCourseReplDetailPre/page")
+	public Ajax page(String query, Integer limit, Integer start, String order, String type, Integer major_id,
+			Integer old_course_id, Integer repl_course_id) {
+		this.getFrameOptr();
+		LinkedHashMap<String, QueryOrderType> fields = new LinkedHashMap<>();
+		fields.put("m.major_code", QueryOrderType.ASC);
+		fields.put("d.repl_course_names", QueryOrderType.DESC);
+		return new Ajax(this.byCourseReplDetailService.page(query, start, limit, major_id, old_course_id,
+				repl_course_id, new QueryOrder(fields)));
+	}
+
+	/**
+	 * @param major_id:专业ID
+	 *            课程顶替详情-新增页面
+	 */
+	@RequestMapping("by/byCourseReplDetailPre/detail")
+	public Ajax detail(Integer major_id) {
+		this.getFrameOptr();
+		Map<String, Object> map = new HashMap<String, Object>();
+		Map<String, Object> temp = new HashMap<String, Object>();
+		temp.put("major_id", major_id);
+		temp.put("status", 1);
+
+		map.put("hasList", this.byCourseReplDetailService.listByMap(temp));
+
+		map.put("mcList", this.mcCourseService.listMajorCourse(major_id, null));// 专业课程
+
+		map.put("major", this.majorService.find(major_id));// 专业信息
+		return new Ajax(map);
+	}
+
+	/**
+	 * @param major_id:专业ID
+	 *            课程顶替详情-新增页面 查询老课程
+	 */
+	@RequestMapping("by/byCourseReplDetailPre/loadOldCourse")
+	public Ajax loadOldCourse(String name) {
+		this.getFrameOptr();
+		Map<String, Object> map = new HashMap<String, Object>();
+		map.put("oldList", this.courseService.listCourseByName(name));// 顶替课程-老课程
+		return new Ajax(map);
+	}
+
+	/**
+	 * @param byCourseReplDetail:课程顶替详情(包括)
+	 *            课程顶替详情-新增
+	 */
+	@RequestMapping("by/byCourseReplDetailPre/add")
+	public Ajax add(ByCourseReplDetailPre byCourseReplDetail) {
+		this.getFrameOptr();
+		this.byCourseReplDetailService.insertReplyDetail(byCourseReplDetail);
+		return new Ajax();
+	}
+
+	@RequestMapping("by/byCourseReplDetailPre/edit")
+	public Ajax edit(ByCourseReplDetailPre byCourseReplDetail) {
+		this.getFrameOptr();
+		this.byCourseReplDetailService.edit(byCourseReplDetail);
+		return new Ajax();
+	}
+
+	/**
+	 * @param ids:
+	 *            课程顶替详情ID集合 批量删除课程顶替详情
+	 */
+	@RequestMapping("by/byCourseReplDetailPre/delete")
+	public Ajax delete(Integer[] ids) {
+		this.getFrameOptr();
+		for (Integer id : ids) {
+			this.byCourseReplDetailService.delete(id);
+		}
+		return new Ajax();
+	}
+
+	@RequestMapping("by/byCourseReplDetailPre/get")
+	public Ajax get(Integer id) {
+		this.getFrameOptr();
+		return new Ajax(this.byCourseReplDetailService.find(id));
+	}
+
+	/**
+	 * @return 导出
+	 */
+	@RequestMapping("by/byCourseReplDetailPre/export")
+	public void export() {
+		this.getFrameOptr();
+		List<ByCourseReplDetailPre> detailList = this.byCourseReplDetailService.listCourseReplDetail();
+		List<List<Object>> values = new ArrayList<List<Object>>();
+		List<Object> headerList = new ArrayList<Object>();
+		headerList.add("批次");
+		headerList.add("专业代码");
+		headerList.add("专业名称");
+		headerList.add("专业层次");
+		headerList.add("历史课程代码-课程名称	");
+		headerList.add("现课程代码-课程名称");
+		headerList.add("顶替规则	");
+		values.add(headerList);
+		for (ByCourseReplDetailPre detail : detailList) {
+			List<Object> rowList = new ArrayList<Object>();
+			rowList.add(detail.getYear());
+			rowList.add(detail.getMajor_code());
+			rowList.add(detail.getMajor_name());
+			rowList.add(detail.getMajor_level());
+			rowList.add(detail.getOld_course_names());
+			rowList.add(detail.getRepl_course_names());
+			rowList.add(detail.getRemark());
+			values.add(rowList);
+		}
+		ServletOutputStream outStream = null;
+		try {
+			String fileName = "课程顶替详情" + ".xlsx";
+			fileName = URLEncoder.encode(fileName, "UTF-8");
+			fileName = new String(fileName.getBytes(), "ISO-8859-1");
+			XSSFWorkbook wb = Excel2007Writer.createExcel(values);
+			ByteArrayOutputStream os = new ByteArrayOutputStream();
+			wb.write(os);
+			this.getResponse().reset();
+			this.getResponse().setContentType("application/x-msdownload");
+			this.getResponse().setHeader("Content-Disposition", "attachment; filename=" + fileName);
+			outStream = this.getResponse().getOutputStream();
+			outStream.write(os.toByteArray());
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if (outStream != null) {
+				try {
+					outStream.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+	}
+
+}

+ 14 - 7
ses-manage/src/main/java/cn/hmsoft/ses/control/by/ByDiaplmaControl.java

@@ -193,7 +193,7 @@ public class ByDiaplmaControl extends FrameControl {
      * @return
      */
     @RequestMapping("by/byDiaplma/namelistpage")
-    public Ajax nameListPage(String query, Integer exam_time_id, Integer org_id, Integer school_id, Integer major_id, Integer std_source, 
+    public Ajax nameListPage(String query, Integer exam_time_id, Integer org_id, Integer school_id, Integer major_id, Integer std_source, Integer status,
     		Integer limit, Integer start, String order, String type) {
     	if (exam_time_id == null) {
     		List<PlExamTime> examTimes = this.pllExamTimeService.list("year_code", YearCodeHelper.getByCurrentYearCode());
@@ -203,9 +203,16 @@ public class ByDiaplmaControl extends FrameControl {
     	}
 		CfOrganization org = this.cfOrganizationService.find(super.getFrameOptr().getOptr_dept());
 		if (org.getOrg_type() != OrgType.PROVINCE_EXAM.ordinal()) {
-			org_id = org.getId();
+			if(org.getOrg_type() == OrgType.SCHOOL_EXAM.ordinal()){
+				school_id = org.getId();
+			}else{
+				org_id = org.getId();
+			}
+			
 		}
-        return new Ajax(this.byDiaplmaService.nameListPage(query, exam_time_id, org_id, school_id, major_id, std_source, 
+		
+		
+        return new Ajax(this.byDiaplmaService.nameListPage(query, exam_time_id, org_id, school_id, major_id, std_source,status, 
         		start, limit, this.getQueryOrder(order, type)));
     }
     
@@ -215,14 +222,14 @@ public class ByDiaplmaControl extends FrameControl {
      * @return
      */
     @RequestMapping("by/byDiaplma/exportnamelist")
-    public void exportNameListDbf(Integer examTimeId, Integer orgId, Integer schoolId, Integer majorId) {
+    public void exportNameListDbf(Integer examTimeId, Integer orgId, Integer schoolId, Integer majorId,Integer status) {
 		try {
 			String fileName = "毕业名册.pdf";
 			CfOrganization org = this.cfOrganizationService.find(super.getFrameOptr().getOptr_dept());
 			if (org.getOrg_type() != OrgType.PROVINCE_EXAM.ordinal()) {
 				orgId = org.getId();
 			}
-			super.downloadFile(this.byDiaplmaService.getNameListPdf(examTimeId, majorId, orgId, schoolId), fileName, true);
+			super.downloadFile(this.byDiaplmaService.getNameListPdf(examTimeId, majorId, orgId, schoolId,status), fileName, true);
 		} catch (Exception e) {
 			LogHelper.error(e);
 		}
@@ -251,7 +258,7 @@ public class ByDiaplmaControl extends FrameControl {
      * @return
      */
     @RequestMapping("by/byDiaplma/exportnamelistForXls")
-    public void exportNameListXls(Integer examTimeId, Integer orgId, Integer schoolId, Integer majorId) {
+    public void exportNameListXls(Integer examTimeId, Integer orgId, Integer schoolId, Integer majorId,Integer status) {
     	ServletOutputStream outStream = null;
 		try {
 			CfOrganization org = this.cfOrganizationService.find(super.getFrameOptr().getOptr_dept());
@@ -264,7 +271,7 @@ public class ByDiaplmaControl extends FrameControl {
 				
 			}
 			
-			List<List<Object>> values = this.byDiaplmaService.getNameListXls(examTimeId, majorId, orgId, schoolId);
+			List<List<Object>> values = this.byDiaplmaService.getNameListXls(examTimeId, majorId, orgId, schoolId,status);
 			
 			String fileName = "毕业生信息.xlsx";
 			fileName = URLEncoder.encode(fileName, "UTF-8");

+ 4 - 0
ses-manage/src/main/java/cn/hmsoft/ses/control/mk/MkCertEduApplyControl.java

@@ -304,6 +304,10 @@ public class MkCertEduApplyControl extends FrameControl {
   		
   		if (apply.getStatus() == MkConst.NEduApply.ARCHIVE.ordinal()||apply.getStatus() == MkConst.NEduApply.REFUSE.ordinal()) {
   			this.mkCertEduApplyService.atg_repotStatus(dbApply.getZw_flow_no(), frameOptr);
+  			try {
+				Thread.sleep(1000);
+			} catch (InterruptedException e) {
+			}
   			this.mkCertEduApplyService.atg_repotStatusEnd(dbApply.getZw_flow_no(), frameOptr);
   		}
   		

+ 4 - 0
ses-manage/src/main/java/cn/hmsoft/ses/control/mk/MkCertNeduApplyControl.java

@@ -359,6 +359,10 @@ public class MkCertNeduApplyControl extends FrameControl {
 		
 		if (apply.getStatus() == MkConst.NEduApply.ARCHIVE.ordinal() || apply.getStatus() == MkConst.NEduApply.REFUSE.ordinal()) {
 			this.mkCertEduApplyService.atg_repotStatus(dbAppky.getZw_flow_no(), frameOptr);
+			try {
+				Thread.sleep(1000);
+			} catch (InterruptedException e) {
+			}
 			this.mkCertEduApplyService.atg_repotStatusEnd(dbAppky.getZw_flow_no(), frameOptr);
 		}
 		

+ 398 - 0
ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlCoursePreControl.java

@@ -0,0 +1,398 @@
+package cn.hmsoft.ses.control.pl;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletOutputStream;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import cn.hmsoft.frame.control.FrameControl;
+import cn.hmsoft.frame.data.model.FrameDict;
+import cn.hmsoft.frame.data.model.FrameOptr;
+import cn.hmsoft.frame.exception.web.BusinessException;
+import cn.hmsoft.frame.util.FrameDictUtil;
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.office.excel.Excel2007Writer;
+import cn.hmsoft.ses.common.constants.StdConst.StdSpecialFlag;
+import cn.hmsoft.ses.data.model.pl.PlCoursePre;
+import cn.hmsoft.ses.service.iface.pl.IPlCoursePreService;
+import cn.hmsoft.ses.service.iface.pl.IPlCourseTextbookLogPreService;
+import cn.hmsoft.ses.service.iface.pl.IPlMajorCoursePreService;
+import cn.hmsoft.web.entity.Ajax;
+
+/**
+ * 课程表 控制器.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-16 21:08:14
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@RestController
+public class PlCoursePreControl extends FrameControl {
+
+	@Autowired
+	private IPlCoursePreService plCourseService;
+	@Autowired
+	private IPlMajorCoursePreService majorCourseService;
+	@Autowired
+	private IPlCourseTextbookLogPreService ctBookLogService;
+
+	@RequestMapping("pl/plCoursePre/pagePlMergePublishPlan")
+	public Ajax pagePlMergePublishPlan(String query, Integer year_code, String exam_batch, Integer start,
+			Integer limit) {
+		return new Ajax(this.plCourseService.pagePlMergePublishPlan(query, year_code, exam_batch, start, limit));
+	}
+
+	/**
+	 * @param is_nation_exam:
+	 *            统考和非统考
+	 * @param special_flag:特殊课程标志
+	 * @param course_filter:
+	 *            课程筛选
+	 * @param status:
+	 *            开考和停考 分页查询所有的课程信息
+	 */
+	@RequestMapping("pl/plCoursePre/page")
+	public Ajax pagePlCourse(String query, Integer limit, Integer start, String order, String type, Integer nation_exam,
+			Integer special_flag, Integer course_filter, Integer status, Integer is_net_mark) {
+		this.getFrameOptr();
+		if (StringHelper.isEmpty(order)) {
+			order = "p.course_code";
+		}
+		return new Ajax(this.plCourseService.pagePlCourse(query, start, limit, order, type, nation_exam, special_flag,
+				course_filter, status, is_net_mark));
+	}
+
+	@RequestMapping("pl/plCoursePre/downxls")
+	public void downxls(String query, Integer limit, Integer start, String order, String type, Integer nation_exam,
+			Integer special_flag, Integer course_filter, Integer status, Integer is_net_mark) {
+
+		Pager pager = this.plCourseService.pagePlCourse(query, 0, Integer.MAX_VALUE, order, type, nation_exam,
+				special_flag, course_filter, status, is_net_mark);
+
+		List<List<Object>> values = new ArrayList<List<Object>>();
+		List<Object> headerList = new ArrayList<Object>();
+
+		headerList.add("课程代码");
+		headerList.add("课程名称");
+		headerList.add("学分");
+		headerList.add("课程属性");
+		// headerList.add("课程状态");
+		headerList.add("课程类型");
+		headerList.add("报考费用");
+		// headerList.add("关联教材");
+
+		values.add(headerList);
+
+		List<Map<String, Object>> list = (List<Map<String, Object>>) pager.getRecords();
+		for (Map<String, Object> map : list) {
+			List<Object> rowList = new ArrayList<Object>();
+			rowList.add(map.get("course_code"));
+			rowList.add(map.get("course_name"));
+			rowList.add(map.get("course_score"));
+
+			if (null != map.get("is_nation_exam")) {
+				FrameDict is_nation_exam = FrameDictUtil.getFrameDict("NationExam",
+						String.valueOf(map.get("is_nation_exam")));
+				rowList.add(is_nation_exam.getDict_text());
+			} else {
+				rowList.add("");
+			}
+
+			// if(null != map.get("status")){
+			// FrameDict status_name =
+			// FrameDictUtil.getFrameDict("CourseStatus",String.valueOf(map.get("status")));
+			// rowList.add(status_name.getDict_text());
+			// }else{
+			// rowList.add("");
+			// }
+
+			if (null != map.get("special_flag")) {
+				FrameDict special_flag_name = FrameDictUtil.getFrameDict("CourseSpecial",
+						String.valueOf(map.get("special_flag")));
+				rowList.add(special_flag_name.getDict_text());
+			} else {
+				rowList.add("");
+			}
+
+			rowList.add(map.get("price"));
+			// rowList.add(map.get("textbook_name"));
+
+			values.add(rowList);
+		}
+		ServletOutputStream outStream = null;
+		try {
+			String fileName = "课程信息" + ".xlsx";
+			fileName = URLEncoder.encode(fileName, "UTF-8");
+			fileName = new String(fileName.getBytes(), "ISO-8859-1");
+			XSSFWorkbook wb = Excel2007Writer.createExcel(values);
+			ByteArrayOutputStream os = new ByteArrayOutputStream();
+			wb.write(os);
+			this.getResponse().reset();
+			this.getResponse().setContentType("application/x-msdownload");
+			this.getResponse().setHeader("Content-Disposition", "attachment; filename=" + fileName);
+			outStream = this.getResponse().getOutputStream();
+			outStream.write(os.toByteArray());
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if (outStream != null) {
+				try {
+					outStream.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+	}
+
+	/**
+	 * @param plCourse
+	 *            新增课程
+	 */
+	@RequestMapping("pl/plCoursePre/add")
+	public Ajax addPlCourse(final PlCoursePre plCourse) {
+		this.getFrameOptr();
+		//judgeCourseRepeat(plCourse.getCourse_code(), 1);
+		plCourse.setStatus(1);
+		if (StringUtils.isEmpty(plCourse.getCourse_standard_code())) {
+			plCourse.setCourse_standard_code(plCourse.getCourse_code());
+		}
+		this.plCourseService.insert(plCourse);
+		return new Ajax();
+	}
+
+	/**
+	 * @param id:课程ID
+	 *            查找专业课程
+	 */
+	@RequestMapping("pl/plCoursePre/get")
+	public Ajax getPlCourse(Integer id) {
+		this.getFrameOptr();
+		return new Ajax(this.plCourseService.find(id));
+	}
+
+	/**
+	 * @param plCourse
+	 *            修改课程
+	 */
+	@RequestMapping("pl/plCoursePre/edit")
+	public Ajax editPlCourse(final PlCoursePre plCourse) {
+		this.getFrameOptr();
+		//judgeCourseRepeat(plCourse.getCourse_code(), 2);
+		plCourse.setStatus(1);
+		this.plCourseService.edit(plCourse);
+		return new Ajax();
+	}
+
+	/**
+	 * @param ids
+	 *            批量删除课程
+	 */
+	@RequestMapping("pl/plCoursePre/delete")
+	public Ajax deletePlCourse(final Integer[] ids) {
+		this.getFrameOptr();
+		for (Integer id : ids) {
+			// PlCourse course = this.plCourseService.find(id);
+			// if (course != null && course.getStatus() == 1) {
+			// throw new BusinessException("开考的课程不能删除!");
+			// }
+			this.plCourseService.delete(id);
+		}
+		return new Ajax();
+	}
+
+	/**
+	 * @param id:课程ID
+	 *            根据课程ID查询课程详情 和含有该课程的专业信息
+	 */
+	@RequestMapping("pl/plCoursePre/detail")
+	public Ajax getCourseDetail(Integer id) {
+		this.getFrameOptr();
+		Map<String, Object> map = new HashMap<String, Object>();
+		map.put("course", this.plCourseService.find(id));
+		map.put("majorList", this.majorCourseService.findMajorByCourse(id));
+		return new Ajax(map);
+	}
+
+	/**
+	 * @param ids:课程ID集合,以逗号分隔
+	 *            返回课程列表;ID为空返回所有;否则,返回不在ids中的课程列表
+	 */
+	@RequestMapping("pl/plCoursePre/list")
+	public Ajax getCourseList(String ids) {
+		this.getFrameOptr();
+		List<PlCoursePre> courseList = this.plCourseService.listCourse(ids, "");
+		return new Ajax(courseList);
+	}
+
+	@RequestMapping("pl/plCoursePre/listAll")
+	public Ajax getCourseListAll() {
+		this.getFrameOptr();
+		List<PlCoursePre> courseList = this.plCourseService.listCourse();
+		return new Ajax(courseList);
+	}
+
+	@RequestMapping("pl/plCoursePre/listCourseByExamTimeId")
+	public Ajax listCourseByExamTimeId(Integer exam_time_id) {
+		List<PlCoursePre> courseList = this.plCourseService.listCourseByExamTimeId(exam_time_id);
+		return new Ajax(courseList);
+	}
+
+	/**
+	 * @param ids:课程ID集合,以逗号分隔
+	 * @param special_flag:普通课程和特殊课程
+	 *            重载了上面的方法,支持普通课程和特殊课程的查找 返回课程列表;ID为空返回所有;否则,返回不在ids中的课程列表
+	 */
+	@RequestMapping("pl/plCoursePre/listSpecial")
+	public Ajax getCourseList(String ids, Integer special_flag, Integer exam_time_id) {
+		this.getFrameOptr();
+		special_flag = (special_flag == null) ? StdSpecialFlag.COMMON_COURSE.ordinal() : special_flag;
+		List<PlCoursePre> courseList = this.plCourseService.listCourse(ids, special_flag, exam_time_id);
+		return new Ajax(courseList);
+	}
+
+	/**
+	 * @param ids:课程ID
+	 * @param flag:开考和停考标志
+	 *            课程开考和停考
+	 */
+	@RequestMapping("pl/plCoursePre/status")
+	public Ajax openStopCourse(Integer[] ids, Integer flag) {
+		this.getFrameOptr();
+		for (Integer id : ids) {
+			PlCoursePre course = this.plCourseService.find(id);
+			if (course != null && course.getStatus() == flag) {
+				if (flag == 0) {
+					throw new BusinessException("已经是停考状态,无需再次停考");
+				} else if (flag == 1) {
+					throw new BusinessException("已经是开考状态,无需再次开考");
+				}
+			}
+			course.setStatus(flag);
+			this.plCourseService.edit(course);
+		}
+		return new Ajax();
+	}
+
+	/**
+	 * @param count
+	 *            查询的结果数量 课程代码重复判断
+	 */
+	private void judgeCourseRepeat(String course_code, Integer count) {
+		List<PlCoursePre> courses = this.plCourseService.listCourseByCode(course_code);
+		if (courses != null && courses.size() >= count) {
+			throw new BusinessException("课程代码重复!");
+		}
+	}
+
+	/**
+	 * @param course_id:
+	 *            课程ID
+	 * @return 查找课程关联教材日志
+	 */
+	@RequestMapping("pl/plCoursePre/ctbookLog")
+	public Ajax listCourseTextbookLog(Integer course_id) {
+		this.getFrameOptr();
+		return new Ajax(this.ctBookLogService.listCourseTextbookLog(course_id));
+	}
+
+	/**
+	 * 根据课程类型或特殊标志过滤课程.
+	 * 
+	 * @param course_exam_type
+	 * @param special_flag
+	 * @return
+	 */
+	@RequestMapping("pl/plCoursePre/listCourseByType")
+	public Ajax listCourseByType(Integer course_exam_type, Integer special_flag) {
+		this.getFrameOptr();
+		return new Ajax(this.plCourseService.listCourseByType(course_exam_type, special_flag));
+	}
+
+	@RequestMapping("pl/plCoursePre/listCourseBymajorId")
+	public Ajax listCourseBymajorId(Integer major_id) {
+		this.getFrameOptr();
+		return new Ajax(this.plCourseService.listCourseByMajorId(major_id));
+	}
+
+	@RequestMapping("pl/plCoursePre/listCourseBymajorIdForCommunicate")
+	public Ajax listCourseBymajorIdForCommunicate(Integer major_id) {
+		FrameOptr optr = this.getFrameOptr();
+		return new Ajax(this.plCourseService.listCourseBymajorIdForCommunicate(major_id, optr.getOptr_dept()));
+	}
+
+	/**
+	 * @param course_ids:
+	 *            课程Ids
+	 * @param is_social_enrol:社会考生是否可以报考
+	 * @return 社会考生报考课程限制
+	 */
+	@RequestMapping("pl/plCoursePre/editsocial")
+	public Ajax editSocialCourse(Integer[] course_ids, Integer is_social_enrol) {
+		this.getFrameOptr();
+		for (Integer course_id : course_ids) {
+			PlCoursePre course = this.plCourseService.find(course_id);
+			course.setIs_social_enrol(is_social_enrol);
+			this.plCourseService.edit(course);
+		}
+		return new Ajax();
+	}
+
+	/**
+	 * @param course_code:课程code
+	 * @return 根据课程code查找课程
+	 */
+	@RequestMapping("pl/plCoursePre/findByCourse")
+	public Ajax getCourseByCode(String course_code) {
+		this.getFrameOptr();
+		List<PlCoursePre> courseList = this.plCourseService.list("course_code", course_code);
+		if (courseList != null && courseList.size() > 0) {
+			return new Ajax(courseList.get(0));
+		}
+		return new Ajax();
+	}
+
+	/**
+	 * 命题:导出课程码表dbf
+	 */
+	@RequestMapping("pl/plCoursePre/exportDbf")
+	public void exportDbf(Integer exam_year) {
+		this.getFrameOptr();
+		String fileName = "课程码表.dbf";
+		this.downloadFile(this.plCourseService.exportCourse(exam_year), fileName, true);
+	}
+
+	/**
+	 * 微信公众号:导出课程码表dbf
+	 */
+	@RequestMapping("pl/plCoursePre/exportCourseDbf")
+	public void exportCourseDbf(String year_code) {
+		this.getFrameOptr();
+		String fileName = year_code + "bmhkecheng.dbf";
+		this.downloadFile(this.plCourseService.exportCourseDbf(year_code), fileName, true);
+	}
+
+	/**
+	 * 微信公众号
+	 */
+	@RequestMapping("pl/plCoursePre/listCourseDbf")
+	public Ajax listCourseDbf(String year_code) {
+		this.getFrameOptr();
+		return new Ajax(this.plCourseService.listCourseDbf(year_code));
+	}
+
+}

+ 1 - 0
ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlMajorApplyControl.java

@@ -197,6 +197,7 @@ public class PlMajorApplyControl extends FrameControl {
     	map.put("schoolList", schoolList);
     	map.put("joinSchoolList", joinSchoolList); //衔接学校
     	map.put("year_code", YearCodeHelper.getCurrentYearCode());
+    	map.put("year", YearCodeHelper.getExamYear());
     	return new Ajax(map);
     }
     

+ 92 - 0
ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlMajorApplyProControl.java

@@ -0,0 +1,92 @@
+package cn.hmsoft.ses.control.pl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import cn.hmsoft.frame.control.FrameControl;
+import cn.hmsoft.frame.data.model.FrameOptr;
+import cn.hmsoft.frame.exception.web.BusinessException;
+import cn.hmsoft.ses.common.constants.OrgConst;
+import cn.hmsoft.ses.data.model.cf.CfOrganization;
+import cn.hmsoft.ses.data.model.pl.PlMajorApplyPro;
+import cn.hmsoft.ses.service.iface.cf.ICfOrganizationService;
+import cn.hmsoft.ses.service.iface.pl.IPlMajorApplyProService;
+import cn.hmsoft.web.entity.Ajax;
+
+/**
+ * 专业申报主表 控制器.
+ * 
+ * @author: zq
+ * @date: 2018-11-30 16:55:33
+ * @version: 1.0
+ * @email: zhanqiang@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@RestController
+public class PlMajorApplyProControl extends FrameControl {
+
+	@Autowired
+	private IPlMajorApplyProService plMajorApplyProService;
+	@Autowired
+	private ICfOrganizationService organizationService;
+
+	@RequestMapping("pl/plMajorApplyPro/page")
+	public Ajax page(String query, Integer year, Integer school_id,Integer join_school_id, Integer major_id, Integer limit, Integer start) {
+
+		FrameOptr optr = super.getFrameOptr();
+		if (optr == null) {
+			throw new BusinessException("用户登录超时,请重新登录");
+		}
+		CfOrganization org = this.organizationService.find(optr.getOptr_dept());
+		// 主考学校
+		if (org.getOrg_type() == OrgConst.OrgType.SCHOOL_EXAM.ordinal()) {
+			school_id = optr.getOptr_dept();
+		}
+
+		return new Ajax(this.plMajorApplyProService.page(query, year, school_id,join_school_id, major_id, start, limit));
+	}
+
+	@RequestMapping("pl/plMajorApplyPro/add")
+	public Ajax add(PlMajorApplyPro plMajorApply) {
+		if (null == plMajorApply.getSchool_id()) {
+			throw new BusinessException("请选择主考学校");
+		}
+
+		if (null == plMajorApply.getJoin_school_id()) {
+			throw new BusinessException("请选择衔接学校");
+		}
+
+		if (null == plMajorApply.getYear()) {
+			throw new BusinessException("请选择年度");
+		}
+
+		if (null == plMajorApply.getMajor_id_arr() || plMajorApply.getMajor_id_arr().length == 0) {
+			throw new BusinessException("请添加专业");
+		}
+		
+		FrameOptr optr = super.getFrameOptr();
+		CfOrganization org = this.organizationService.find(optr.getOptr_dept());
+		// 主考学校
+		if (org.getOrg_type() != OrgConst.OrgType.PROVINCE_EXAM.ordinal()) {
+			throw new BusinessException("只允许区账号操作");
+		}
+
+		this.plMajorApplyProService.create(plMajorApply);
+		return new Ajax();
+	}
+	
+	 @RequestMapping("pl/plMajorApplyPro/delete")
+	    public Ajax delete(Integer id,Integer detail_id) {
+		 FrameOptr optr = super.getFrameOptr();
+		 CfOrganization org = this.organizationService.find(optr.getOptr_dept());
+			// 主考学校
+			if (org.getOrg_type() != OrgConst.OrgType.PROVINCE_EXAM.ordinal()) {
+				throw new BusinessException("只允许区账号操作");
+			}
+			
+		 this.plMajorApplyProService.deleteMajorApply(id,detail_id);
+	        return new Ajax();
+	    }
+
+}

+ 15 - 4
ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlMajorControl.java

@@ -154,11 +154,11 @@ public class PlMajorControl extends FrameControl{
 	 * 根据专业查询专业关联的课程和教材
 	 */
 	@RequestMapping("pl/plMajor/find")
-	public Ajax findCouseByMajor(Integer id) {
+	public Ajax findCouseByMajor(Integer id,Integer exam_time_id) {
 		this.getFrameOptr();
 		Map<String,Object> map = new HashMap<String,Object>();
 		map.put("major", this.plMajorService.findMajor(id));
-		map.put("courseList", this.plMajorService.findCourseAndBook(id));
+		map.put("courseList", this.plMajorService.findCourseAndBook(id, exam_time_id));
 		return new Ajax(map);
 	}
 	
@@ -169,11 +169,11 @@ public class PlMajorControl extends FrameControl{
 	 * 可以根据ids来选择只打印某些某些专业下的课程教材
 	 */
 	@RequestMapping("pl/plMajor/download")
-	public void downloadMajorCouse(String[] ids) {
+	public void downloadMajorCouse(String[] ids,Integer exam_time_id) {
 		this.getFrameOptr();
 		try {
 			String fileName = "专业课程.pdf";
-			this.downloadFile(this.plMajorService.makeCourseBook(ids), fileName,true);
+			this.downloadFile(this.plMajorService.makeCourseBook(ids,exam_time_id), fileName,true);
 		}catch(Exception e){
 			this.writeAlert(e.getMessage());
 		}
@@ -319,6 +319,12 @@ public class PlMajorControl extends FrameControl{
 			map.put("major_name", plMajor.getMajor_name());
 			map.put("full_name", plMajor.getMajor_code() + "-" +plMajor.getMajor_name());
 			map.put("major_full_name", plMajor.getMajor_code() + "-" +plMajor.getMajor_name());
+			if(null != plMajor.getMajor_level() && plMajor.getMajor_level().intValue()==1){
+				map.put("major_all_full_name", plMajor.getMajor_code() + "-" +plMajor.getMajor_name()+"|本科");
+			}else{
+				map.put("major_all_full_name", plMajor.getMajor_code() + "-" +plMajor.getMajor_name()+"|专科");
+			}
+			
 
 			rtnList.add(map);
 		}
@@ -335,6 +341,11 @@ public class PlMajorControl extends FrameControl{
 		return new Ajax(this.plMajorService.queryAllMajor());
 	}
 	
+	@RequestMapping("pl/plMajor/queryMajorByStatus")
+	public Ajax queryMajorByStatus(Integer status,Integer major_level){
+		return new Ajax(this.plMajorService.queryMajorByStatus(status, major_level));
+	}
+	
 	
 	/**
 	 * 命题-导出专业dbf

+ 4 - 4
ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlMajorCourseControl.java

@@ -118,11 +118,11 @@ public class PlMajorCourseControl extends FrameControl{
      * 根据专业查找课程和教材信息
      */
     @RequestMapping("pl/plMajorCourse/detail")
-    public Ajax detailPlMajorCourse(Integer major_id, String content) {
+    public Ajax detailPlMajorCourse(Integer major_id, String content,Integer exam_time_id) {
     	this.getFrameOptr();
     	Map<String, Object> map = new HashMap<>();
     	map.put("major", this.majorService.find(major_id));
-    	map.put("ctList", this.plMajorCourseService.listCourseTextbook(major_id, content));
+    	map.put("ctList", this.plMajorCourseService.listCourseTextbook(major_id, content, exam_time_id));
         return new Ajax(map);
     }
     
@@ -211,7 +211,7 @@ public class PlMajorCourseControl extends FrameControl{
     }
     
     @RequestMapping("pl/plMajorCourse/majorPlanExport")
-    public void majorPlanExport(Integer major_id) {
+    public void majorPlanExport(Integer major_id,Integer exam_time_id) {
     	
     	XSSFWorkbook wb = new XSSFWorkbook();     
         XSSFSheet sheet = wb.createSheet("new sheet");     
@@ -277,7 +277,7 @@ public class PlMajorCourseControl extends FrameControl{
         styleTitle3.setBorderBottom(BorderStyle.THIN);
         styleTitle3.setBorderRight(BorderStyle.THIN);
         
-		List<Map<String,Object>> list = this.plMajorCourseService.listCourseTextbook(major_id, null);
+		List<Map<String,Object>> list = this.plMajorCourseService.listCourseTextbook(major_id, null, exam_time_id);
 		PlMajor major = this.majorService.find(major_id);
 		
 		int index = 0;

+ 581 - 0
ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlMajorCoursePreControl.java

@@ -0,0 +1,581 @@
+package cn.hmsoft.ses.control.pl;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletOutputStream;
+
+import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.RegionUtil;
+import org.apache.poi.xssf.usermodel.XSSFCell;
+import org.apache.poi.xssf.usermodel.XSSFCellStyle;
+import org.apache.poi.xssf.usermodel.XSSFFont;
+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.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import cn.hmsoft.frame.control.FrameControl;
+import cn.hmsoft.frame.exception.web.BusinessException;
+import cn.hmsoft.frame.util.FrameDictUtil;
+import cn.hmsoft.ses.data.model.pl.PlMajorCoursePre;
+import cn.hmsoft.ses.data.model.pl.PlMajorPre;
+import cn.hmsoft.ses.data.model.pl.PlSchoolMajorPre;
+import cn.hmsoft.ses.service.iface.pl.IPlMajorCoursePreService;
+import cn.hmsoft.ses.service.iface.pl.IPlMajorPreService;
+import cn.hmsoft.ses.service.iface.pl.IPlSchoolMajorPreService;
+import cn.hmsoft.web.entity.Ajax;
+
+/**
+ * 专业课程对应表 控制器.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-17 10:03:45
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@RestController
+public class PlMajorCoursePreControl extends FrameControl{
+
+    @Autowired
+	private IPlMajorCoursePreService plMajorCourseService;
+    @Autowired
+    private IPlMajorPreService majorService;
+    @Autowired
+    private IPlSchoolMajorPreService plSchoolMajorPreService;
+    
+    
+    
+    /**
+     * @param major_id :专业ID
+     *  查询专业下所有的课程信息
+     */
+    @RequestMapping("pl/plMajorCoursePre/list")
+    public Ajax findMajorCourse(Integer major_id, String keyword) {
+    	this.getFrameOptr();
+    	Map<String,Object> map = new HashMap<String,Object>();
+    	map.put("major", this.majorService.findMajor(major_id));
+    	map.put("courseList", this.plMajorCourseService.listMajorCourse(major_id, keyword));
+    	return new Ajax(map);
+    }
+    
+    @RequestMapping("pl/plMajorCoursePre/listByMajorCourse")
+    public Ajax listByMajorCourse(Integer major_id){
+    	return new Ajax(this.plMajorCourseService.listByMajorCourse(major_id));
+    }
+    
+    /**
+     * @param major_id:专业ID
+     * @param courseIds:课程ID数组
+     * 在专业下选择课程,并新增
+     */
+    @RequestMapping("pl/plMajorCoursePre/add")
+    public Ajax addPlMajorCourse(Integer major_id, Integer[] courseIds) {
+    	this.getFrameOptr();
+    	for (Integer courseId : courseIds) {
+    		//重复判断
+    		PlMajorCoursePre mCourse = this.plMajorCourseService.findMajorCourse(major_id, courseId);
+    		if(mCourse!=null) {
+    			throw new BusinessException("专业下已存在该课程,请重新选择课程!");
+    		} else {
+    			mCourse = new PlMajorCoursePre();
+    			mCourse.setMajor_id(major_id);
+    			mCourse.setCourse_id(courseId);
+    			this.plMajorCourseService.insert(mCourse);
+    			//更新专业中的课程总学分
+    			PlMajorPre major = this.majorService.find(major_id);
+    			major.setTotal_credits(this.plMajorCourseService.findMajorScore(major_id));
+    			this.majorService.edit(major);
+    		}
+		}
+        return new Ajax();
+    }
+    
+    @RequestMapping("pl/plMajorCoursePre/delete")
+    public Ajax deletePlMajorCourse(Integer[] ids) {
+    	this.getFrameOptr();
+    	for (Integer id : ids) {
+    		PlMajorCoursePre majorCourse = this.plMajorCourseService.find(id);
+    		this.plMajorCourseService.delete(id);
+    		//更新专业中的课程总学分
+			PlMajorPre major = this.majorService.find(majorCourse.getMajor_id());
+			major.setTotal_credits(this.plMajorCourseService.findMajorScore(majorCourse.getMajor_id()));
+			this.majorService.edit(major);
+    	}
+        return new Ajax();
+    }
+    
+    /**
+     * @param major_id:专业ID
+     * @param content: 要查询的内容
+     * 根据专业查找课程和教材信息
+     */
+    @RequestMapping("pl/plMajorCoursePre/detail")
+	public Ajax detailPlMajorCourse(Integer major_id, String content) {
+		this.getFrameOptr();
+		Map<String, Object> map = new HashMap<>();
+		map.put("major", this.majorService.find(major_id));
+
+		List<Map<String, Object>> list = this.plMajorCourseService.listCourseTextbook(major_id, content);
+		List<Map<String, Object>> ctList = new ArrayList<Map<String, Object>>();
+
+		Map<String, String> havMap = new HashMap<String, String>();
+		String course_code =null;
+
+		for (Map<String, Object> detail : list) {
+			course_code = (null ==detail.get("course_code")?"":detail.get("course_code").toString());
+
+			if (havMap.containsKey(course_code)) {
+				continue;
+			} else {
+				havMap.put(course_code, course_code);
+				ctList.add(detail);
+			}
+		}
+
+		map.put("ctList", ctList);
+
+		return new Ajax(map);
+	}
+    
+    
+    /**
+     * @param plMajorCourse
+     * 设置是否沟通课、课程性质、是否必考
+     */
+    @RequestMapping("pl/plMajorCoursePre/edit")
+    public Ajax editPlMajorCourse(final PlMajorCoursePre plMajorCourse) {
+    	this.getFrameOptr();
+        this.plMajorCourseService.edit(plMajorCourse);
+        return new Ajax();
+    }
+
+    
+    @RequestMapping("pl/plMajorCoursePre/get")
+    public Ajax getPlMajorCourseById(final Integer id) {
+    	this.getFrameOptr();
+        return new Ajax(this.plMajorCourseService.find(id));
+    } 
+    
+    /**
+     * @param major_id :专业ID
+     * @param course_id:课程ID集合
+     * @param course_type:课程性质集合
+     *  设置专业课程的课程性质(可扩展:如可能的专业方向)
+     */
+    @RequestMapping("pl/plMajorCoursePre/editType")
+	public Ajax editPlMajorCourse(Integer major_id, Integer[] course_ids, Integer[] course_natures) {
+    	this.getFrameOptr();
+    	this.plMajorCourseService.editPlMajorCourse(major_id, course_ids, course_natures);
+		return new Ajax();
+	}
+    
+    /**
+     * @return 更新专业总学分
+     */
+    @RequestMapping("pl/plMajorCoursePre/updateMajorScore")
+    public Ajax updateMajorScore() {
+    	this.getFrameOptr();
+    	List<PlMajorPre> majorList = this.majorService.all();
+    	for (PlMajorPre major : majorList) {
+    		major.setTotal_credits(this.plMajorCourseService.findMajorScore(major.getId()));
+    		this.majorService.edit(major);
+		}
+    	return new Ajax();
+    }
+    
+    /**
+     * @param major_id:专业ID
+     * @param course_id:课程ID
+     * @param direct_remark:选修方向
+     * @return   更新专业课程选修方向
+     */
+    @RequestMapping("pl/plMajorCoursePre/updateMcDirect")
+    public Ajax updateMcDirect(Integer major_id, Integer course_id, String direct_remark,String course_nature) {
+    	this.getFrameOptr();
+    	this.plMajorCourseService.updateMcDirect(major_id, course_id, direct_remark,course_nature);
+    	return new Ajax();
+    }
+    
+    /**
+     * @param course_id:课程ID
+     * @param course_score:课程学分
+     * @return   更新专业课程学分
+     */
+    @RequestMapping("pl/plMajorCoursePre/updateCourseScore")
+    public Ajax updateCourseScore(Integer course_id, String course_score) {
+    	this.getFrameOptr();
+    	this.plMajorCourseService.updateCourseScore(course_id, course_score);
+    	return new Ajax();
+    }
+    
+    /**
+     * 更新专业课程是否百分百合成
+     * @param course_id
+     * @param scale
+     * @return
+     */
+    @RequestMapping("pl/plMajorCoursePre/updateCourseIscompose")
+    public Ajax updateCourseIscompose(Integer major_id,Integer course_id, String iscompose) {
+    	this.getFrameOptr();
+    	this.plMajorCourseService.updateCourseIscompose(major_id,course_id, iscompose);
+    	return new Ajax();
+    }
+    
+    @RequestMapping("pl/plMajorCoursePre/majorPlanExport")
+    public void majorPlanExport(Integer major_id) {
+    	
+    	XSSFWorkbook wb = new XSSFWorkbook();     
+        XSSFSheet sheet = wb.createSheet("new sheet");     
+        //1.生成字体对象-总标题
+        XSSFFont fontTitle1 = wb.createFont();
+        fontTitle1.setFontHeightInPoints((short) 20);  
+        fontTitle1.setFontName("新宋体");
+        fontTitle1.setColor(HSSFColorPredefined.BLACK.getIndex());
+        fontTitle1.setBold(true);
+        XSSFCellStyle styleTitle1 = wb.createCellStyle();  
+        styleTitle1.setAlignment(HorizontalAlignment.CENTER);  
+        styleTitle1.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);  
+        styleTitle1.setFont(fontTitle1); //调用字体样式对象  
+        styleTitle1.setWrapText(false);
+        //2.生成字体对象-表头
+        XSSFFont fontTitle2 = wb.createFont();
+        fontTitle2.setFontHeightInPoints((short) 10);  
+        fontTitle2.setFontName("新宋体");
+        fontTitle2.setColor(HSSFColorPredefined.BLACK.getIndex());
+        fontTitle2.setBold(true);  
+        XSSFCellStyle styleTitle2 = wb.createCellStyle();  
+        styleTitle2.setAlignment(HorizontalAlignment.CENTER);  
+        styleTitle2.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);  
+        styleTitle2.setFont(fontTitle2); //调用字体样式对象  
+        styleTitle2.setWrapText(false);
+        //3.内容样式
+        XSSFFont fontTitle3 = wb.createFont();
+        fontTitle3.setFontHeightInPoints((short) 10);  
+        fontTitle3.setFontName("新宋体");
+        fontTitle3.setColor(HSSFColorPredefined.BLACK.getIndex());
+        XSSFCellStyle styleTitle3 = wb.createCellStyle();  
+        styleTitle3.setAlignment(HorizontalAlignment.CENTER);  
+        styleTitle3.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);  
+        styleTitle3.setFont(fontTitle3); //调用字体样式对象  
+        styleTitle3.setWrapText(false);
+        
+        XSSFFont fontTitle4 = wb.createFont();
+        fontTitle4.setFontHeightInPoints((short) 10);  
+        fontTitle4.setFontName("新宋体");
+        fontTitle4.setColor(HSSFColorPredefined.BLACK.getIndex());
+        fontTitle4.setBold(true);  
+        XSSFCellStyle styleTitle4 = wb.createCellStyle();  
+        styleTitle4.setAlignment(HorizontalAlignment.LEFT);  
+        styleTitle4.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);  
+        styleTitle4.setFont(fontTitle4); //调用字体样式对象  
+        styleTitle4.setWrapText(false);
+        
+        XSSFFont fontTitle5 = wb.createFont();
+        fontTitle5.setFontHeightInPoints((short) 10);  
+        fontTitle5.setFontName("新宋体");
+        fontTitle5.setColor(HSSFColorPredefined.BLACK.getIndex());
+        fontTitle5.setBold(true); 
+        XSSFCellStyle styleTitle5 = wb.createCellStyle();  
+        styleTitle5.setAlignment(HorizontalAlignment.RIGHT);  
+        styleTitle5.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);  
+        styleTitle5.setFont(fontTitle4); //调用字体样式对象  
+        styleTitle5.setWrapText(false);
+        
+        //增加表格边框的样式 例子  
+        styleTitle1.setBorderTop(BorderStyle.THIN);
+        styleTitle1.setBorderLeft(BorderStyle.THIN);
+        styleTitle1.setBorderTop(BorderStyle.THIN);
+        styleTitle1.setBorderBottom(BorderStyle.THIN);
+        styleTitle1.setBorderRight(BorderStyle.THIN);
+        
+        styleTitle2.setBorderTop(BorderStyle.THIN);
+        styleTitle2.setBorderLeft(BorderStyle.THIN);
+        styleTitle2.setBorderTop(BorderStyle.THIN);
+        styleTitle2.setBorderBottom(BorderStyle.THIN);
+        styleTitle2.setBorderRight(BorderStyle.THIN);
+        
+        styleTitle3.setBorderTop(BorderStyle.THIN);
+        styleTitle3.setBorderLeft(BorderStyle.THIN);
+        styleTitle3.setBorderTop(BorderStyle.THIN);
+        styleTitle3.setBorderBottom(BorderStyle.THIN);
+        styleTitle3.setBorderRight(BorderStyle.THIN);
+        
+        styleTitle4.setBorderTop(BorderStyle.THIN);
+        styleTitle4.setBorderLeft(BorderStyle.THIN);
+        styleTitle4.setBorderTop(BorderStyle.THIN);
+        styleTitle4.setBorderBottom(BorderStyle.THIN);
+        styleTitle4.setBorderRight(BorderStyle.THIN);
+        
+        styleTitle5.setBorderTop(BorderStyle.THIN);
+        styleTitle5.setBorderLeft(BorderStyle.THIN);
+        styleTitle5.setBorderTop(BorderStyle.THIN);
+        styleTitle5.setBorderBottom(BorderStyle.THIN);
+        styleTitle5.setBorderRight(BorderStyle.THIN);
+        
+        
+		List<Map<String,Object>> list = this.plMajorCourseService.listCourseTextbook(major_id, null);
+		PlMajorPre major = this.majorService.find(major_id);
+		List<PlSchoolMajorPre> list_school = this.plSchoolMajorPreService.listSchoolMajor(major_id);
+		PlSchoolMajorPre plSchoolMajorPre = null;
+		if(list_school.isEmpty()){
+			plSchoolMajorPre = new PlSchoolMajorPre();
+		}else{
+			plSchoolMajorPre = list_school.get(0);
+		}
+		
+		int index = 0;
+		int i=0;
+		String course_code =null;
+		int total_score = 0;
+		Map<String,String> havMap = new HashMap<String,String> ();
+		
+		for(Map<String,Object> map : list) {
+			if(i==0){
+				XSSFRow row = sheet.createRow(index);
+				XSSFCell cellTitle = row.createCell(0);
+		        cellTitle.setCellStyle(styleTitle1);
+		        cellTitle.setCellValue(major.getMajor_code()+"-"+major.getMajor_name());
+		        
+		        CellRangeAddress range6 = new CellRangeAddress(index, index+1, 0, 11);
+		        sheet.addMergedRegion(range6);
+				RegionUtil.setBorderBottom(BorderStyle.THIN, range6, sheet);
+				RegionUtil.setBorderRight(BorderStyle.THIN, range6, sheet);
+				RegionUtil.setBorderLeft(BorderStyle.THIN, range6, sheet);
+				RegionUtil.setBorderTop(BorderStyle.THIN, range6, sheet);
+				
+				index +=2; 
+				
+				
+				row = sheet.createRow(index);
+				
+				XSSFCell cellTitle1 = row.createCell(6);
+				cellTitle1.setCellStyle(styleTitle5);
+				cellTitle1.setCellValue("专业层次:");
+		        
+		        XSSFCell cellTitle2 = row.createCell(7);
+		        cellTitle2.setCellStyle(styleTitle4);
+		        cellTitle2.setCellValue(null==major.getMajor_level()?"":FrameDictUtil.getFrameDictText("MajorLevel", major.getMajor_level()+""));
+		        
+		        index++;
+		        row = sheet.createRow(index);
+		        
+		        XSSFCell cellTitle3 = row.createCell(6);
+				cellTitle3.setCellStyle(styleTitle5);
+				cellTitle3.setCellValue("专业状态:");
+		        
+		        XSSFCell cellTitle4 = row.createCell(7);
+		        cellTitle4.setCellStyle(styleTitle4);
+		        cellTitle4.setCellValue(null==major.getStatus()?"":FrameDictUtil.getFrameDictText("CourseStatus", major.getStatus()+""));
+		        
+		        index++;
+		        row = sheet.createRow(index);
+		        XSSFCell cellTitle5 = row.createCell(6);
+				cellTitle5.setCellStyle(styleTitle5);
+				cellTitle5.setCellValue("毕业总学分:");
+		        
+		        XSSFCell cellTitle6 = row.createCell(7);
+		        cellTitle6.setCellStyle(styleTitle4);
+		        cellTitle6.setCellValue(major.getGraduate_total_credits());
+		        
+		        index++;
+		        row = sheet.createRow(index);
+		        
+		        XSSFCell cellTitle7 = row.createCell(6);
+				cellTitle7.setCellStyle(styleTitle5);
+				cellTitle7.setCellValue("主考学校:");
+		        
+		        XSSFCell cellTitle8 = row.createCell(7);
+		        cellTitle8.setCellStyle(styleTitle4);
+		        cellTitle8.setCellValue(plSchoolMajorPre.getOrg_name());
+		        
+		        index++;
+		        row = sheet.createRow(index);
+		        
+		        XSSFCell cellTitle9 = row.createCell(6);
+		        cellTitle9.setCellStyle(styleTitle5);
+		        cellTitle9.setCellValue("描述信息:");
+		        
+		        XSSFCell cellTitle10 = row.createCell(7);
+		        cellTitle10.setCellStyle(styleTitle4);
+		        cellTitle10.setCellValue(major.getRemark());
+		        
+		        
+		        index +=2; 
+				
+		        sheet.setColumnWidth(0, 5 * 256);
+		        sheet.setColumnWidth(1, 8 * 256);
+		        sheet.setColumnWidth(2, 30 * 256);
+		        sheet.setColumnWidth(3, 8 * 256);
+		        sheet.setColumnWidth(4, 8* 256);
+		        sheet.setColumnWidth(5, 8 * 256);
+		        sheet.setColumnWidth(6, 35 * 256);
+		        sheet.setColumnWidth(7, 35 * 256);
+		        sheet.setColumnWidth(8, 20 * 256);
+		        sheet.setColumnWidth(9, 25 * 256);
+		        sheet.setColumnWidth(10, 10 * 256);
+		        sheet.setColumnWidth(11, 15 * 256);
+		        
+		        XSSFRow rowTitle = sheet.createRow(index);
+		        XSSFCell cell0 = rowTitle.createCell(0);
+		        cell0.setCellStyle(styleTitle2);
+		        cell0.setCellValue("序号");
+		        XSSFCell cell1 = rowTitle.createCell(1);
+		        cell1.setCellStyle(styleTitle2);
+		        cell1.setCellValue("课程代码");
+		        XSSFCell cell2 = rowTitle.createCell(2);
+		        cell2.setCellStyle(styleTitle2);
+		        cell2.setCellValue("课程名称");
+		        XSSFCell cell3 = rowTitle.createCell(3);
+		        cell3.setCellStyle(styleTitle2);
+		        cell3.setCellValue("课程属性");
+		        XSSFCell cell4 = rowTitle.createCell(4);
+		        cell4.setCellStyle(styleTitle2);
+		        cell4.setCellValue("国区属性");
+		        XSSFCell cell5 = rowTitle.createCell(5);
+		        cell5.setCellStyle(styleTitle2);
+		        cell5.setCellValue("学分");
+		        XSSFCell cell6 = rowTitle.createCell(6);
+		        cell6.setCellStyle(styleTitle2);
+		        cell6.setCellValue("教材名称");
+		        XSSFCell cell7 = rowTitle.createCell(7);
+		        cell7.setCellStyle(styleTitle2);
+		        cell7.setCellValue("教材大纲");
+		        
+		        XSSFCell cell8 = rowTitle.createCell(8);
+		        cell8.setCellStyle(styleTitle2);
+		        cell8.setCellValue("主编");
+		        XSSFCell cell9 = rowTitle.createCell(9);
+		        cell9.setCellStyle(styleTitle2);
+		        cell9.setCellValue("出版社");
+		        
+		        XSSFCell cell10 = rowTitle.createCell(10);
+		        cell10.setCellStyle(styleTitle2);
+		        cell10.setCellValue("版次");
+		        
+		        XSSFCell cell11 = rowTitle.createCell(11);
+		        cell11.setCellStyle(styleTitle2);
+		        cell11.setCellValue("启用批次");
+		        
+		        
+		        index++;
+			}
+			
+			course_code = (null ==map.get("course_code")?"":map.get("course_code").toString());
+
+			
+			if(havMap.containsKey(course_code)){
+				continue;
+			}else{
+				havMap.put(course_code, course_code);
+			}
+			
+			XSSFRow rows = sheet.createRow(index);
+			XSSFCell tCell0 = rows.createCell(0);
+			tCell0.setCellStyle(styleTitle3);
+			tCell0.setCellValue(i+1);
+			
+			XSSFCell tCell1 = rows.createCell(1);
+			tCell1.setCellStyle(styleTitle3);
+			tCell1.setCellValue(course_code);
+			XSSFCell tCell2 = rows.createCell(2);
+			tCell2.setCellStyle(styleTitle4);
+			tCell2.setCellValue(map.get("course_name").toString());
+			XSSFCell tCell3 = rows.createCell(3);
+			tCell3.setCellStyle(styleTitle3);
+			tCell3.setCellValue(null==map.get("course_nature")?"":FrameDictUtil.getFrameDictText("CourseNature", map.get("course_nature").toString()));
+			
+			XSSFCell tCell4 = rows.createCell(4);
+			tCell4.setCellStyle(styleTitle3);
+			tCell4.setCellValue(null==map.get("is_nation_exam")?"":map.get("is_nation_exam").toString());
+			
+			String course_score = null==map.get("course_score")?"0":map.get("course_score").toString();
+			double temp_course_score = Double.valueOf(course_score);
+			total_score += (int)temp_course_score;
+			
+			XSSFCell tCell5 = rows.createCell(5);
+			tCell5.setCellStyle(styleTitle3);
+			tCell5.setCellValue(course_score);
+			XSSFCell tCell6 = rows.createCell(6);
+			tCell6.setCellStyle(styleTitle4);
+			tCell6.setCellValue(null==map.get("textbook_name")?"":map.get("textbook_name").toString());
+			XSSFCell tCell7 = rows.createCell(7);
+			tCell7.setCellStyle(styleTitle4);
+			tCell7.setCellValue(null==map.get("textbook_outline")?"":map.get("textbook_outline").toString());
+			XSSFCell tCell8 = rows.createCell(8);
+			tCell8.setCellStyle(styleTitle4);
+			tCell8.setCellValue(null==map.get("textbook_writer")?"":map.get("textbook_writer").toString());
+			XSSFCell tCell9 = rows.createCell(9);
+			tCell9.setCellStyle(styleTitle4);
+			tCell9.setCellValue(null==map.get("textbook_publisher")?"":map.get("textbook_publisher").toString());
+			XSSFCell tCell10 = rows.createCell(10);
+			tCell10.setCellStyle(styleTitle3);
+			tCell10.setCellValue(null==map.get("textbook_revision")?"":map.get("textbook_revision").toString());
+			
+			XSSFCell tCell11 = rows.createCell(11);
+			tCell11.setCellStyle(styleTitle3);
+			tCell11.setCellValue(null==map.get("exam_year_month")?"":map.get("exam_year_month").toString());
+			
+			index++;
+			i++;
+		}
+		
+		XSSFRow rows = sheet.createRow(index);
+		
+		XSSFCell tCell4 = rows.createCell(4);
+		tCell4.setCellStyle(styleTitle3);
+		tCell4.setCellValue("总学分:");
+		
+		
+		XSSFCell tCell5 = rows.createCell(5);
+		tCell5.setCellStyle(styleTitle3);
+		tCell5.setCellValue(total_score);
+		
+		
+		ServletOutputStream outStream = null;
+		try {
+			String fileName = "";
+			fileName += major.getMajor_code()+"-"+major.getMajor_name() + "专业计划.xlsx";
+			fileName = URLEncoder.encode(fileName, "UTF-8");
+			fileName = new String(fileName.getBytes(), "ISO-8859-1");
+	    	ByteArrayOutputStream os = new ByteArrayOutputStream();
+			wb.write(os);
+			this.getResponse().reset();
+			this.getResponse().setContentType("application/x-msdownload");
+			this.getResponse().setHeader("Content-Disposition", "attachment; filename=" + fileName);
+			outStream = this.getResponse().getOutputStream();
+			outStream.write(os.toByteArray());
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if(outStream != null) {
+				try {
+					outStream.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+			
+			if(wb != null) {
+				try {
+					wb.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+    }
+    
+    
+}

+ 351 - 0
ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlMajorPreControl.java

@@ -0,0 +1,351 @@
+package cn.hmsoft.ses.control.pl;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import cn.hmsoft.frame.control.FrameControl;
+import cn.hmsoft.frame.data.model.FrameOptr;
+import cn.hmsoft.frame.exception.web.BusinessException;
+import cn.hmsoft.frame.util.FrameAssertUtil;
+import cn.hmsoft.frame.util.RequestContextUtil;
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.ses.data.dao.pl.PlSchoolMajorPreDao;
+import cn.hmsoft.ses.data.model.cf.CfOrganization;
+import cn.hmsoft.ses.data.model.pl.PlMajorPre;
+import cn.hmsoft.ses.data.model.pl.PlSchoolMajor;
+import cn.hmsoft.ses.data.model.pl.PlSchoolMajorPre;
+import cn.hmsoft.ses.service.iface.cf.ICfOrganizationService;
+import cn.hmsoft.ses.service.iface.pl.IPlMajorPreService;
+import cn.hmsoft.ses.util.YearCodeHelper;
+import cn.hmsoft.web.entity.Ajax;
+
+/**
+ * 专业信息表控制器.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-16 15:40:22
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@RestController
+public class PlMajorPreControl extends FrameControl {
+
+	@Autowired
+	private IPlMajorPreService plMajorService;
+	@Autowired
+	private ICfOrganizationService orgService;
+	@Autowired
+	private PlSchoolMajorPreDao plSchoolMajorDao;
+
+	/**
+	 * @param major_level:
+	 *            专业层次
+	 * @param nation_exam
+	 *            :是否统考
+	 * @param year:
+	 *            年度码
+	 * @param status:专业状态
+	 * @param org_id:主考学校ID
+	 * @param is_net_exam:
+	 *            是否网考
+	 * @param is_live_enrol:
+	 *            是否现场报考 分页查询所有的专业信息
+	 */
+	@RequestMapping("pl/plMajorPre/page")
+	public Ajax pagePlMajor(String query, Integer limit, Integer start, String order, String type, Integer major_level,
+			Integer nation_exam, Integer year, Integer status, Integer org_id, Integer is_net_exam,
+			Integer is_live_enrol) {
+		if (StringHelper.isEmpty(order)) {
+			order = "year";
+		}
+		if (StringHelper.isEmpty(type)) {
+			type = "DESC";
+		}
+		FrameOptr optr = RequestContextUtil.currentLoginUser();
+		FrameAssertUtil.isNotNull(optr, "请重新登录");
+
+		return new Ajax(this.plMajorService.pagePlMajor(query, start, limit, order, type, major_level, nation_exam,
+				year, status, null, org_id, is_net_exam, is_live_enrol));
+	}
+
+	/**
+	 * @param plMajor
+	 *            新增专业的相关属性 新增专业
+	 */
+	@RequestMapping("pl/plMajorPre/add")
+	public Ajax addPlMajor(PlMajorPre plMajor) {
+		majorRepetJudge(plMajor.getMajor_code(), plMajor.getYear());
+		plMajor.setCreate_time(LocalDateTime.now());
+		FrameOptr optr = RequestContextUtil.currentLoginUser();
+		FrameAssertUtil.isNotNull(optr, "请重新登录");
+		CfOrganization org = this.orgService.find(optr.getOptr_dept());
+		this.plMajorService.insertMajor(plMajor, org);
+
+		// 维护开办学校
+		updateSchoolMajorByMajorCode(plMajor.getMajor_code(), plMajor.getOrg_id());
+
+		return new Ajax();
+	}
+
+	/**
+	 * @param plMajor:专业ID为必传项
+	 *            修改专业,包括停办证时间
+	 */
+	@RequestMapping("pl/plMajorPre/edit")
+	public Ajax editPlMajor(PlMajorPre plMajor) {
+		this.getFrameOptr();
+		plMajor.setCreate_time(LocalDateTime.now());
+		this.plMajorService.edit(plMajor);
+
+		// 维护开办学校
+		updateSchoolMajorByMajorCode(plMajor.getMajor_code(), plMajor.getOrg_id());
+
+		return new Ajax();
+	}
+
+	private void updateSchoolMajorByMajorCode(String major_code, Integer org_id) {
+		if (null != major_code && null != org_id) {
+			// 获取开办学校信息
+			PlSchoolMajorPre plSchoolMajor = this.plSchoolMajorDao.find("major_code", major_code);
+
+			// 开办学校存在
+			if (null != plSchoolMajor) {
+				// 数据库开办主考学校为空,或者前台有修改开办学校,则更新到库表中
+				if (null == plSchoolMajor.getSchool_id()
+						|| plSchoolMajor.getSchool_id().intValue() != org_id.intValue()) {
+					this.plSchoolMajorDao.updateSchoolMajorByMajorCode(major_code, org_id);
+				}
+
+			} else {
+				// 开办学校不存在,则新增
+				PlSchoolMajorPre schoolMajor = new PlSchoolMajorPre();
+				schoolMajor.setMajor_code(major_code);
+				schoolMajor.setSchool_id(org_id);
+				schoolMajor.setStatus(1);
+
+				CfOrganization org = this.orgService.find(org_id);
+				if (null != org) {
+					schoolMajor.setSchool_code(org.getOrg_code());
+				}
+
+				this.plSchoolMajorDao.insert(schoolMajor);
+			}
+		}
+	}
+
+	/**
+	 * @param ids
+	 *            批量删除专业接口--预留接口,专业新增后,不允许在删除
+	 */
+	@RequestMapping("pl/plMajorPre/delete")
+	public Ajax deletePlMajor(Integer[] ids) {
+		this.getFrameOptr();
+		for (Integer id : ids) {
+			this.plMajorService.deletePlMajor(id);
+		}
+		return new Ajax();
+	}
+
+	/**
+	 * @param id:专业ID
+	 *            根据专业查询专业关联的课程和教材
+	 */
+	@RequestMapping("pl/plMajorPre/find")
+	public Ajax findCouseByMajor(Integer id) {
+		this.getFrameOptr();
+		Map<String, Object> map = new HashMap<String, Object>();
+		map.put("major", this.plMajorService.findMajor(id));
+		map.put("courseList", this.plMajorService.findCourseAndBook(id));
+		return new Ajax(map);
+	}
+
+	/**
+	 * @param ids:专业ID数组
+	 * @param year:
+	 *            要批量打印专业的年度码 根据专业ID下载专业相关的课程教材,提供打印 可以根据ids来选择只打印某些某些专业下的课程教材
+	 */
+	@RequestMapping("pl/plMajorPre/download")
+	public void downloadMajorCouse(String[] ids) {
+		this.getFrameOptr();
+		try {
+			String fileName = "专业课程.pdf";
+			this.downloadFile(this.plMajorService.makeCourseBook(ids), fileName, true);
+		} catch (Exception e) {
+			this.writeAlert(e.getMessage());
+		}
+	}
+
+	/**
+	 * @param ids:需要排除的专业ID集合,以逗号分隔
+	 *            返回专业列表
+	 */
+	@RequestMapping("pl/plMajorPre/list")
+	public Ajax listMajor(String ids) {
+		this.getFrameOptr();
+		List<PlMajorPre> majorList = this.plMajorService.listMajor(ids);
+		return new Ajax(majorList);
+	}
+
+	/**
+	 * @param is_new_major:是否新专业
+	 *            返回专业列表
+	 */
+	@RequestMapping("pl/plMajorPre/listNewOld")
+	public Ajax listMajorNewOld(Integer is_new_major) {
+		this.getFrameOptr();
+		List<PlMajorPre> majorList = this.plMajorService.listMajorNewOld(is_new_major);
+		return new Ajax(majorList);
+	}
+
+	@RequestMapping("pl/plMajorPre/listByCurrentYear")
+	public Ajax listByCurrentYear() {
+		this.getFrameOptr();
+		String currentYearCode = YearCodeHelper.getCurrentYearCode();
+		List<PlMajorPre> majorList = this.plMajorService.listByCurrentYear(Integer.parseInt(currentYearCode));
+		return new Ajax(majorList);
+	}
+
+	/**
+	 * @param id:专业ID
+	 *            根据专业查询专业关联的课程和教材
+	 */
+	@RequestMapping("pl/plMajorPre/findMajor")
+	public Ajax findMajor(Integer id) {
+		this.getFrameOptr();
+		return new Ajax(this.plMajorService.find(id));
+	}
+
+	/**
+	 * @param course_ids:课程ID集合--含有的课程ID
+	 * @param major_id:专业ID--排除的专业
+	 *            查询含有课程信息的专业
+	 */
+	@RequestMapping("pl/plMajorPre/listMajor")
+	public Ajax list(Integer[] course_ids, Integer major_id) {
+		this.getFrameOptr();
+		List<PlMajorPre> list = this.plMajorService.listMajor(course_ids, major_id);
+		return new Ajax(list);
+	}
+
+	/**
+	 * @param major_code
+	 * @param year_code
+	 *            专业重复判断
+	 */
+	private void majorRepetJudge(String major_code, Integer year) {
+		List<PlMajorPre> majorList = this.plMajorService.findMajorByCode(major_code, year);
+		if (majorList != null && majorList.size() > 0) {
+			throw new BusinessException("该年度下专业代码已存在,请检查专业代码!");
+		}
+	}
+
+	/**
+	 * @param exam_start_type:开考类型
+	 *            根据开考类型,查找专业列表 @RequestMapping("pl/plMajor/listMajorByType")
+	 */
+	public Ajax listByOpenType(Integer exam_start_type) {
+		this.getFrameOptr();
+		return new Ajax(this.plMajorService.listMajorByType(exam_start_type));
+	}
+
+	/**
+	 * @param id:专业ID
+	 */
+	@RequestMapping("pl/plMajorPre/findMajorSchool")
+	public Ajax findMajorSchool(Integer id) {
+		this.getFrameOptr();
+		return new Ajax(this.plMajorService.findMajorSchool(id));
+	}
+
+	/**
+	 * 设置是否网考.
+	 * 
+	 * @param ids
+	 * @param yesOrNo
+	 * @return
+	 */
+	@RequestMapping("pl/plMajorPre/updateNetExam")
+	public Ajax updateNetExam(Integer[] ids, Integer yesOrNo) {
+		this.getFrameOptr();
+		for (Integer id : ids) {
+			PlMajorPre major = this.plMajorService.find(id);
+			major.setIs_net_exam(yesOrNo);
+			this.plMajorService.edit(major);
+		}
+		return new Ajax();
+	}
+
+	/**
+	 * 设置是否现场报考.
+	 * 
+	 * @param ids
+	 * @param yesOrNo
+	 * @return
+	 */
+	@RequestMapping("pl/plMajorPre/updateLiveEnrol")
+	public Ajax updateLiveEnrol(Integer[] ids, Integer yesOrNo) {
+		this.getFrameOptr();
+		for (Integer id : ids) {
+			PlMajorPre major = this.plMajorService.find(id);
+			major.setIs_live_enrol(yesOrNo);
+			this.plMajorService.edit(major);
+		}
+		return new Ajax();
+	}
+
+	/**
+	 * 查询开考列表.
+	 * 
+	 * @param
+	 * @param
+	 * @return
+	 */
+	@RequestMapping("pl/plMajorPre/openMajorList")
+	public Ajax openMajorList() {
+		this.getFrameOptr();
+		HashMap<String, Object> paraMap = new HashMap<String, Object>();
+		paraMap.put("status", 1);
+		List<PlMajorPre> majorList = this.plMajorService.listByMap(paraMap);
+
+		List<HashMap<String, Object>> rtnList = new ArrayList<HashMap<String, Object>>();
+		for (PlMajorPre plMajor : majorList) {
+			HashMap<String, Object> map = new HashMap<String, Object>();
+			map.put("id", plMajor.getId());
+			map.put("major_code", plMajor.getMajor_code());
+			map.put("major_name", plMajor.getMajor_name());
+			map.put("full_name", plMajor.getMajor_code() + "-" + plMajor.getMajor_name());
+			map.put("major_full_name", plMajor.getMajor_code() + "-" + plMajor.getMajor_name());
+
+			rtnList.add(map);
+		}
+		return new Ajax(rtnList);
+	}
+
+	@RequestMapping("pl/plMajorPre/queryMajor")
+	public Ajax queryMajor() {
+		return new Ajax(this.plMajorService.queryMajor());
+	}
+
+	@RequestMapping("pl/plMajorPre/queryAllMajor")
+	public Ajax queryAllMajor() {
+		return new Ajax(this.plMajorService.queryAllMajor());
+	}
+
+	/**
+	 * 命题-导出专业dbf
+	 */
+	@RequestMapping("pl/plMajorPre/exprotDbf")
+	public void export() {
+		this.getFrameOptr();
+		String fileName = "专业码表.dbf";
+		this.downloadFile(this.plMajorService.exportDbf(), fileName, true);
+	}
+}

+ 43 - 21
ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlMergePublishPlanControl.java

@@ -358,13 +358,23 @@ public class PlMergePublishPlanControl extends FrameControl {
         styleTitle3.setBorderBottom(BorderStyle.THIN);
         styleTitle3.setBorderRight(BorderStyle.THIN);
         
+        Pager pager = null;
+        List<Map<String, Object>> list = new ArrayList<Map<String, Object>> ();
         
-        Pager pager = this.mergePublishPlanService.courseTextbookPage(query, isNationExam, examYear, examMonth, exam_time,Integer.MAX_VALUE,0);
-        
-		List<Map<String,Object>> list = (List<Map<String, Object>>) pager.getRecords();
-		
-		// 去重教材
-		list = this.distinctTextBook(list,examYear);
+        List<PlExamTime> examTimeList = this.plExamTimeService.queryExamTimeByExamYear(examYear);
+    	for (PlExamTime time : examTimeList) {
+    		if(null == examMonth){
+    			pager = this.mergePublishPlanService.queryCourseTextbook(query, isNationExam, time.getId(), exam_time);
+        		list.addAll((List<Map<String, Object>>)pager.getRecords());
+            }else{
+            	if(examMonth.intValue() == time.getExam_month().intValue()){
+            		pager = this.mergePublishPlanService.queryCourseTextbook(query, isNationExam, time.getId(), exam_time);
+            		list.addAll((List<Map<String, Object>>)pager.getRecords());
+            	}
+            }
+    		
+    	}
+    	
 		
 		String examYearMonth = "";
 		int index = 0;
@@ -389,7 +399,7 @@ public class PlMergePublishPlanControl extends FrameControl {
 		        	cellTitle.setCellValue(examYear+"年课程教材");
 		        }
 		        
-		        CellRangeAddress range6 = new CellRangeAddress(index, index+1, 0, 8);
+		        CellRangeAddress range6 = new CellRangeAddress(index, index+1, 0, 9);
 		        sheet.addMergedRegion(range6);
 				RegionUtil.setBorderBottom(BorderStyle.THIN, range6, sheet);
 				RegionUtil.setBorderRight(BorderStyle.THIN, range6, sheet);
@@ -403,8 +413,9 @@ public class PlMergePublishPlanControl extends FrameControl {
 		        sheet.setColumnWidth(4, 38* 256);
 		        sheet.setColumnWidth(5, 25 * 256);
 		        sheet.setColumnWidth(6, 25 * 256);
-		        sheet.setColumnWidth(7, 10 * 256);
-		        sheet.setColumnWidth(8, 15 * 256);
+		        sheet.setColumnWidth(7, 15 * 256);
+		        sheet.setColumnWidth(8, 20 * 256);
+		        sheet.setColumnWidth(9, 15 * 256);
 		        
 		        XSSFRow rowTitle = sheet.createRow(index+2);
 		        XSSFCell cell0 = rowTitle.createCell(0);
@@ -422,18 +433,23 @@ public class PlMergePublishPlanControl extends FrameControl {
 		        XSSFCell cell4 = rowTitle.createCell(4);
 		        cell4.setCellStyle(styleTitle2);
 		        cell4.setCellValue("教材名称");
+		        
 		        XSSFCell cell5 = rowTitle.createCell(5);
 		        cell5.setCellStyle(styleTitle2);
-		        cell5.setCellValue("编著");
+		        cell5.setCellValue("教材大纲");
+		        
 		        XSSFCell cell6 = rowTitle.createCell(6);
 		        cell6.setCellStyle(styleTitle2);
-		        cell6.setCellValue("出版社");
+		        cell6.setCellValue("编著");
 		        XSSFCell cell7 = rowTitle.createCell(7);
 		        cell7.setCellStyle(styleTitle2);
-		        cell7.setCellValue("版次");
+		        cell7.setCellValue("出版社");
 		        XSSFCell cell8 = rowTitle.createCell(8);
 		        cell8.setCellStyle(styleTitle2);
-		        cell8.setCellValue("启用批次");
+		        cell8.setCellValue("版次");
+		        XSSFCell cell9 = rowTitle.createCell(9);
+		        cell9.setCellStyle(styleTitle2);
+		        cell9.setCellValue("考试批次");
 		        
 		        index = index+3;
 			}
@@ -445,28 +461,34 @@ public class PlMergePublishPlanControl extends FrameControl {
 			
 			XSSFCell tCell1 = rows.createCell(1);
 			tCell1.setCellStyle(styleTitle3);
-			tCell1.setCellValue(map.get("course_code").toString());
+			tCell1.setCellValue(null ==map.get("course_code")?"":map.get("course_code").toString());
 			XSSFCell tCell2 = rows.createCell(2);
 			tCell2.setCellStyle(styleTitle3);
-			tCell2.setCellValue(map.get("course_name").toString());
+			tCell2.setCellValue(null ==map.get("course_name")?"":map.get("course_name").toString());
 			XSSFCell tCell3 = rows.createCell(3);
 			tCell3.setCellStyle(styleTitle3);
-			tCell3.setCellValue(map.get("textbook_code").toString());
+			tCell3.setCellValue(null ==map.get("textbook_code")?"":map.get("textbook_code").toString());
 			XSSFCell tCell4 = rows.createCell(4);
 			tCell4.setCellStyle(styleTitle3);
-			tCell4.setCellValue(map.get("textbook_name").toString());
+			tCell4.setCellValue(null ==map.get("textbook_name")?"":map.get("textbook_name").toString());
+			
 			XSSFCell tCell5 = rows.createCell(5);
 			tCell5.setCellStyle(styleTitle3);
-			tCell5.setCellValue(null==map.get("textbook_writer")?"":map.get("textbook_writer").toString());
+			tCell5.setCellValue(null ==map.get("textbook_outline")?"":map.get("textbook_outline").toString());
+			
+			
 			XSSFCell tCell6 = rows.createCell(6);
 			tCell6.setCellStyle(styleTitle3);
-			tCell6.setCellValue(null==map.get("textbook_publisher")?"":map.get("textbook_publisher").toString());
+			tCell6.setCellValue(null==map.get("textbook_writer")?"":map.get("textbook_writer").toString());
 			XSSFCell tCell7 = rows.createCell(7);
 			tCell7.setCellStyle(styleTitle3);
-			tCell7.setCellValue(null==map.get("textbook_revision")?"":map.get("textbook_revision").toString());
+			tCell7.setCellValue(null==map.get("textbook_publisher")?"":map.get("textbook_publisher").toString());
 			XSSFCell tCell8 = rows.createCell(8);
 			tCell8.setCellStyle(styleTitle3);
-			tCell8.setCellValue(null==map.get("exam_year_month")?"":map.get("exam_year_month").toString());
+			tCell8.setCellValue(null==map.get("textbook_revision")?"":map.get("textbook_revision").toString());
+			XSSFCell tCell9 = rows.createCell(9);
+			tCell9.setCellStyle(styleTitle3);
+			tCell9.setCellValue(null==map.get("exam_year_month")?"":map.get("exam_year_month").toString());
 			
 			index++;
 			i++;

+ 5 - 16
ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlPublishPlanMainControl.java

@@ -14,9 +14,9 @@ import cn.hmsoft.frame.exception.web.BusinessException;
 import cn.hmsoft.frame.util.FrameAssertUtil;
 import cn.hmsoft.jdbc.entity.QueryOrder;
 import cn.hmsoft.jdbc.entity.QueryOrderType;
-import cn.hmsoft.ses.common.constants.CourseConst.ExamPlanPubStatus;
 import cn.hmsoft.ses.data.model.pl.PlPublishPlanMain;
 import cn.hmsoft.ses.service.iface.pl.IPlPublishPlanMainService;
+import cn.hmsoft.ses.service.iface.pl.IPlTextbookService;
 import cn.hmsoft.web.entity.Ajax;
 
 /**
@@ -33,6 +33,8 @@ public class PlPublishPlanMainControl extends FrameControl {
 
     @Autowired
     private IPlPublishPlanMainService plPublishPlanMainService;
+    @Autowired
+    private IPlTextbookService plTextbookService;
 	
     @RequestMapping("pl/plPublishPlanMain/page")
     public Ajax page(String query, Integer examTimeId, Integer limit, Integer start, String order, String type) {
@@ -57,7 +59,6 @@ public class PlPublishPlanMainControl extends FrameControl {
     
     @RequestMapping("pl/plPublishPlanMain/edit")
     public Ajax edit(PlPublishPlanMain plPublishPlanMain) {
-    	FrameOptr optr = super.getFrameOptr();
 		List<PlPublishPlanMain> existList = this.plPublishPlanMainService.list("pub_batch_name", plPublishPlanMain.getPub_batch_name());
 		if (existList != null && existList.size() > 0 && existList.get(0).getId() != plPublishPlanMain.getId()) {
 			throw new BusinessException("批次名称[" + plPublishPlanMain.getPub_batch_name() + "]已存在");
@@ -69,13 +70,7 @@ public class PlPublishPlanMainControl extends FrameControl {
     @RequestMapping("pl/plPublishPlanMain/publish")
     public Ajax publish(Integer[] ids) {
     	FrameOptr optr = super.getFrameOptr();
-    	for (Integer id : ids) {
-    		PlPublishPlanMain main = this.plPublishPlanMainService.find(id);
-    		main.setStatus(ExamPlanPubStatus.PUB_FINAL.ordinal());
-    		main.setPublisher(optr.getOptr_id());
-    		main.setPublish_time(LocalDateTime.now());
-    		this.plPublishPlanMainService.edit(main);
-    	}
+    	this.plPublishPlanMainService.publish(ids, optr);
         return new Ajax();
     }    
     
@@ -86,12 +81,7 @@ public class PlPublishPlanMainControl extends FrameControl {
      */
     @RequestMapping("pl/plPublishPlanMain/regression")
     public Ajax regression(Integer[] ids) {
-    	FrameOptr optr = super.getFrameOptr();
-    	for (Integer id : ids) {
-    		PlPublishPlanMain plan = this.plPublishPlanMainService.find(id);
-    		plan.setStatus(ExamPlanPubStatus.DRAFT.ordinal());
-    		this.plPublishPlanMainService.edit(plan);
-    	}
+    	this.plPublishPlanMainService.regression(ids);
     	return new Ajax();
     }
     
@@ -102,7 +92,6 @@ public class PlPublishPlanMainControl extends FrameControl {
     
     @RequestMapping("pl/plPublishPlanMain/delete")
     public Ajax delete(Integer[] ids) {
-    	FrameOptr optr = super.getFrameOptr();
     	for (Integer id : ids) {
     		this.plPublishPlanMainService.deleteMainAndDetail(id);
     	}

+ 0 - 71
ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlStdRecordCancelControl.java

@@ -106,77 +106,6 @@ public class PlStdRecordCancelControl extends FrameControl {
 				new QueryOrder(fields), cancel_status, create_org_id, std_type));
 	}
 
-	/**
-	 * 导出:考生备案
-	 */
-	@SuppressWarnings("unchecked")
-	@RequestMapping("pl/plStdRecordCancel/exportJion")
-	public void exportJion(String query, Integer limit, Integer start, String order, String type, Integer year_code,
-			Integer status, Integer mr_id, Integer join_school_id, Integer school_id) {
-		List<List<Object>> values = new ArrayList<List<Object>>();
-		List<Object> headerList = new ArrayList<Object>();
-		ServletOutputStream outStream = null;
-		headerList.add("批次");
-		headerList.add("主考学校");
-		headerList.add("衔接学校");
-		headerList.add("准考证号");
-		headerList.add("姓名");
-		headerList.add("专业名称");
-		headerList.add("审批状态");
-		headerList.add("学号");
-		headerList.add("考生号");
-		headerList.add("专科年级");
-		headerList.add("专科专业");
-
-		values.add(headerList);
-
-		this.getFrameOptr();
-		LinkedHashMap<String, QueryOrderType> fields = new LinkedHashMap<>();
-		fields.put("r.year_code", QueryOrderType.DESC);
-		Pager pager = this.plStdRecordService.page(query, 0, Integer.MAX_VALUE, new QueryOrder(fields), year_code,
-				status, mr_id, null, join_school_id,school_id,null);
-
-		List<Map<String, Object>> list = (List<Map<String, Object>>) pager.getRecords();
-		for (Map<String, Object> map : list) {
-			List<Object> rowList = new ArrayList<Object>();
-			rowList.add(map.get("year_code"));
-			rowList.add(map.get("org_name"));
-			rowList.add(map.get("join_school_name") == "()" ? "" : map.get("join_school_name"));
-			rowList.add(map.get("ticket_no"));
-			rowList.add(map.get("std_name"));
-			rowList.add(map.get("major_name"));
-			rowList.add(FrameDictUtil.getFrameDictText("record_cancel_status", map.get("status") + ""));
-			rowList.add(map.get("std_no"));
-			rowList.add(map.get("std_num"));
-			rowList.add(map.get("junior_grade"));
-			rowList.add(map.get("junior_major"));
-
-			values.add(rowList);
-		}
-		try {
-			String fileName = "专本衔接考生备案" + ".xlsx";
-			fileName = URLEncoder.encode(fileName, "UTF-8");
-			fileName = new String(fileName.getBytes(), "ISO-8859-1");
-			XSSFWorkbook wb = Excel2007Writer.createExcel(values);
-			ByteArrayOutputStream os = new ByteArrayOutputStream();
-			wb.write(os);
-			this.getResponse().reset();
-			this.getResponse().setContentType("application/x-msdownload");
-			this.getResponse().setHeader("Content-Disposition", "attachment; filename=" + fileName);
-			outStream = this.getResponse().getOutputStream();
-			outStream.write(os.toByteArray());
-		} catch (Exception e) {
-			e.printStackTrace();
-		} finally {
-			if (outStream != null) {
-				try {
-					outStream.close();
-				} catch (IOException e) {
-					e.printStackTrace();
-				}
-			}
-		}
-	}
 
 	/**
 	 * @param score_year_code:成绩上传批次码

+ 97 - 20
ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlStdRecordControl.java

@@ -43,13 +43,16 @@ import cn.hmsoft.ses.common.constants.SysConst;
 import cn.hmsoft.ses.common.constants.CfConst.CfOperateTimeType;
 import cn.hmsoft.ses.data.model.cf.CfOperateTime;
 import cn.hmsoft.ses.data.model.cf.CfOrganization;
+import cn.hmsoft.ses.data.model.pl.PlExamTime;
 import cn.hmsoft.ses.data.model.pl.PlMajor;
+import cn.hmsoft.ses.data.model.pl.PlMajorApplyProDetail;
 import cn.hmsoft.ses.data.model.pl.PlMajorRecord;
 import cn.hmsoft.ses.data.model.pl.PlStdRecord;
 import cn.hmsoft.ses.data.model.std.StdRegInfo;
 import cn.hmsoft.ses.service.iface.cf.ICfOperateTimeService;
 import cn.hmsoft.ses.service.iface.cf.ICfOrganizationService;
 import cn.hmsoft.ses.service.iface.pl.IPlExamTimeService;
+import cn.hmsoft.ses.service.iface.pl.IPlMajorApplyProService;
 import cn.hmsoft.ses.service.iface.pl.IPlMajorRecordService;
 import cn.hmsoft.ses.service.iface.pl.IPlMajorService;
 import cn.hmsoft.ses.service.iface.pl.IPlStdRecordService;
@@ -84,6 +87,8 @@ public class PlStdRecordControl extends FrameControl {
     private ICfOperateTimeService operateTimeService;
 	@Autowired
 	private IPlExamTimeService plExamTimeService;
+	@Autowired
+	private IPlMajorApplyProService plMajorApplyProService;
 
 
 	/**
@@ -94,12 +99,12 @@ public class PlStdRecordControl extends FrameControl {
 	 */
 	@RequestMapping("pl/plStdRecord/page")
 	public Ajax page(String query, Integer limit, Integer start, String order, String type, Integer year_code,
-			Integer status, Integer mr_id, Integer std_type,Integer join_school_id,Integer school_id,String is_xj) {
+			Integer status, Integer mr_id, Integer std_type,Integer join_school_id,Integer school_id,String is_xj,String major_code) {
 		this.getFrameOptr();
 		LinkedHashMap<String, QueryOrderType> fields = new LinkedHashMap<>();
 		fields.put("r.year_code", QueryOrderType.DESC);
 		return new Ajax(
-				this.plStdRecordService.page(query, start, limit, new QueryOrder(fields), year_code, status, mr_id, std_type,join_school_id,school_id,is_xj));
+				this.plStdRecordService.page(query, start, limit, new QueryOrder(fields), year_code, status, mr_id, std_type,join_school_id,school_id,is_xj, major_code));
 	}
 	
 	/**
@@ -108,7 +113,7 @@ public class PlStdRecordControl extends FrameControl {
 	@SuppressWarnings("unchecked")
 	@RequestMapping("pl/plStdRecord/exportJion")
 	public void exportJion(String query, Integer limit, Integer start, String order, String type, Integer year_code,
-			Integer status, Integer mr_id, Integer join_school_id, Integer school_id,String is_xj) {
+			Integer status, Integer mr_id, Integer join_school_id, Integer school_id,String is_xj,String major_code) {
 		List<List<Object>> values = new ArrayList<List<Object>>();
 		List<Object> headerList = new ArrayList<Object>();
 		ServletOutputStream outStream = null;
@@ -136,7 +141,7 @@ public class PlStdRecordControl extends FrameControl {
 		this.getFrameOptr();
 		LinkedHashMap<String, QueryOrderType> fields = new LinkedHashMap<>();
 		fields.put("r.year_code", QueryOrderType.DESC);
-		Pager pager = this.plStdRecordService.page(query, 0, Integer.MAX_VALUE, new QueryOrder(fields), year_code, status, mr_id, null,join_school_id,school_id, is_xj);
+		Pager pager = this.plStdRecordService.page(query, 0, Integer.MAX_VALUE, new QueryOrder(fields), year_code, status, mr_id, null,join_school_id,school_id, is_xj, major_code);
 		
 		List<Map<String,Object>> list = (List<Map<String, Object>>) pager.getRecords();
 		for(Map<String,Object> map : list) {
@@ -631,8 +636,6 @@ public class PlStdRecordControl extends FrameControl {
 	 */
 	@RequestMapping("pl/plStdRecord/add")
 	public Ajax add(PlStdRecord plStdRecord, Integer year_code, Integer apply_form) {
-		this.getFrameOptr();
-		
 		if(null != plStdRecord && null != plStdRecord.getTicket_no()){
 			plStdRecord.setTicket_no(plStdRecord.getTicket_no().trim());
 		}
@@ -654,27 +657,47 @@ public class PlStdRecordControl extends FrameControl {
 		if (std == null) {
 			throw new BusinessException("准考证和考生姓名不匹配");
 		}
-		//重复判断
-		PlMajor major = this.majorService.find(this.majorRecordService.find(plStdRecord.getMajor_record_id()).getMajor_id());
-		FrameAssertUtil.isNotNull(major, "专业不存在");
 		
 		// 专本衔接考生备案
 		if(ApplyForm.JCE_TO_UDG.ordinal()==plStdRecord.getStd_type().intValue()){
+			//重复判断
+			PlMajor major = this.majorService.find(plStdRecord.getMajor_record_id());
+			FrameAssertUtil.isNotNull(major, "专业不存在");
+			
 			//4、重复判断
 			PlStdRecord stdRecord = this.plStdRecordService.findStdRecordForJoin(plStdRecord.getTicket_no(), ApplyForm.JCE_TO_UDG.ordinal());
 			if(stdRecord != null) {
 				throw new BusinessException("该考生已经存在专本衔接考生备案信息("+stdRecord.getYear_code()+" "+stdRecord.getOrg_name()+"),不允许重复备案。");
 			}
 			
+			PlExamTime plExamTime = plExamTimeService.queryPlExamTimeByYearCode(plStdRecord.getYear_code());
+			FrameOptr optr = this.getFrameOptr();
+
+			
+			// 根据年度、主考学校、衔接学校、专业确认是否允许考生备案
+			PlMajorApplyProDetail plMajorApplyProDetail = this.plMajorApplyProService.queryPlMajorApplyPro(
+					plExamTime.getExam_year(),optr.getOptr_dept(), plStdRecord.getJoin_school_id(),
+					major.getId());
+			if (null == plMajorApplyProDetail) {
+				throw new BusinessException("当前批次,当前主考学校,当前衔接学校没有备案当前专业,请联系自考处负责老师。(可进入专业申报管理->专本衔接专业备案查询)");
+			}else{
+				plStdRecord.setJoin_major_code(major.getMajor_code());
+			}
+			
 		}else{
-			String join_major_code = major.getMajor_code();
-			PlStdRecord record = this.plStdRecordService.findStdRecord(plStdRecord.getTicket_no(),
-					join_major_code, ApplyForm.NET_ASSIST.ordinal());
+			//String join_major_code = major.getMajor_code();
+			//PlStdRecord record = this.plStdRecordService.findStdRecord(plStdRecord.getTicket_no(),
+			//		join_major_code, ApplyForm.NET_ASSIST.ordinal());
+			
+			// 梁有日:20241126 有网络助学考生备案后,不能再重复备案
+			PlStdRecord record = this.plStdRecordService.findStdRecordForJoin(plStdRecord.getTicket_no(), ApplyForm.NET_ASSIST.ordinal());
+			
 			if(record != null) {
 				throw new BusinessException("考生已经申请备案或者已经备案("+record.getYear_code()+" "+record.getOrg_name()+"),不允许重复备案;");
 			}
 			
 			// 20220718 网络助学考生备案,存在专本衔接考生备案时,不允许进行网络助学考生备案
+			// 梁有日:20241126 只要有专本衔接备案就不允许网络助学备案 修改DAO类去掉7年备案约束
 			PlStdRecord stdRecord = this.plStdRecordService.findStdRecordForNet(plStdRecord.getTicket_no(), ApplyForm.JCE_TO_UDG.ordinal(),plStdRecord.getYear_code());
 			if(stdRecord != null) {
 				throw new BusinessException("该考生已经存在专本衔接考生备案信息("+stdRecord.getYear_code()+" "+stdRecord.getOrg_name()+"),请先申请注销考生专本衔接备案,待审批后再进行网络助学新生备案。");
@@ -737,8 +760,15 @@ public class PlStdRecordControl extends FrameControl {
 			List<Integer> joinSchoolIds = new ArrayList<>();// 衔接学校
 			List<Integer> stdIds = new ArrayList<>();// 考生ID
 			List<Integer> mrIds = new ArrayList<>();// 专业申报ID
+			
+			PlExamTime plExamTime = plExamTimeService.queryPlExamTimeByYearCode(year_code);
+			
+			// 用于校验XLS是否存在相同的考生
+			Map<String,String> haveStd = new HashMap<String,String>();
+					
 			for (int i = 1; i < uploadList.size(); i++) {
-				PlMajorRecord record = null;
+				//PlMajorRecord record = null;
+				PlMajorApplyProDetail plMajorApplyProDetail = null;
 				StringBuilder errSb = new StringBuilder();
 				List<String> list = uploadList.get(i);
 				// String no = list.get(0);
@@ -766,13 +796,16 @@ public class PlStdRecordControl extends FrameControl {
 				List<PlMajor> majorList = this.majorService.listMajor(join_major_code.trim(), join_major_name.trim());
 				if (majorList == null || majorList.size() == 0) {
 					errSb.append("衔接专业和专业代码填写有误;");
-				} else {
+				} 
+				
+				/*else {
 					record = this.majorRecordService.findMajorRecord(year_code, optr.getOptr_dept(), majorList,
 							ApplyForm.JCE_TO_UDG.ordinal());
 					if (record == null) {
 						errSb.append("学校没有申报衔接专业;");
 					}
-				}
+				}*/
+				
 				// 3、学校存在判断
 				CfOrganization joinSchool = this.orgService.findOrganization(join_school_code,
 						OrgType.JOIN_STUDY.ordinal());
@@ -791,11 +824,29 @@ public class PlStdRecordControl extends FrameControl {
 					errSb.append("主考院校代码填写有误,当前账号所在主考学校与导入的主考院校代码不一致,请修改主考院校代码;");
 				}
 				
+				if(null != plExamTime && null != school && null != joinSchool && !majorList.isEmpty()){
+					// 根据年度、主考学校、衔接学校、专业确认是否允许考生
+					plMajorApplyProDetail = this.plMajorApplyProService.queryPlMajorApplyPro(plExamTime.getExam_year(), school.getId(), joinSchool.getId(), majorList.get(0).getId());
+					if(null == plMajorApplyProDetail){
+						errSb.append("当前批次,当前主考学校,当前衔接学校没有备案当前专业,请联系自考处负责老师;(可进入专业申报管理->专本衔接专业备案查询)");
+					}
+				}
+				
+				
 				//4、重复判断
 				PlStdRecord stdRecord = this.plStdRecordService.findStdRecordForJoin(ticket_no, ApplyForm.JCE_TO_UDG.ordinal());
 				if(stdRecord != null) {
 					errSb.append("该考生已经存在专本衔接考生备案信息(").append(stdRecord.getYear_code()).append(" ").append(stdRecord.getOrg_name()).append("),不允许重复备案;");
 				}
+				
+				if(!StringHelper.isEmpty(ticket_no)){
+					String key = ticket_no;
+					if(haveStd.containsKey(key)){
+						errSb.append("导入XLS表中,准考证号【").append(ticket_no).append("】重复,请删除重复数据!");
+					}else{
+						haveStd.put(key, "");
+					}
+				}
 
 				List<Object> objList = getOrigData(list, 8);
 				objList.add(errSb);// 错误描述列
@@ -804,7 +855,7 @@ public class PlStdRecordControl extends FrameControl {
 					schoolIds.add(school.getId());
 					joinSchoolIds.add(joinSchool.getId());
 					stdIds.add(std.getId());
-					mrIds.add(record.getId());
+					mrIds.add(plMajorApplyProDetail.getMajor_id());
 				}
 			}
 			if (uploadList.size() - 1 == stdIds.size()) {
@@ -1039,9 +1090,32 @@ public class PlStdRecordControl extends FrameControl {
 			throw new BusinessException("考生信息填写不正确");
 		}
 		
+		// 专本衔接考生备案
+		if (ApplyForm.JCE_TO_UDG.ordinal() == plStdRecord.getStd_type().intValue()) {
+
+			PlExamTime plExamTime = plExamTimeService.queryPlExamTimeByYearCode(plStdRecord.getYear_code());
+			FrameOptr optr = this.getFrameOptr();
+			// 重复判断
+			PlMajor major = this.majorService.find(plStdRecord.getMajor_record_id());
+			FrameAssertUtil.isNotNull(major, "专业不存在");
+
+			// 根据年度、主考学校、衔接学校、专业确认是否允许考生备案
+			PlMajorApplyProDetail plMajorApplyProDetail = this.plMajorApplyProService.queryPlMajorApplyPro(
+					plExamTime.getExam_year(), optr.getOptr_dept(), plStdRecord.getJoin_school_id(), major.getId());
+			if (null == plMajorApplyProDetail) {
+				throw new BusinessException("当前批次,当前主考学校,当前衔接学校没有备案当前专业,请联系自考处负责老师。(可进入专业申报管理->专本衔接专业备案查询)");
+			} else {
+				plStdRecord.setJoin_major_code(major.getMajor_code());
+			}
+
+		}
+		
 		this.plStdRecordService.update(plStdRecord);
-		// 更新join_major_code
-		this.plStdRecordService.updateStdRecordJoinMajorCode(plStdRecord.getId());
+		
+		if(null == plStdRecord.getJoin_major_code()){
+			// 更新join_major_code
+			this.plStdRecordService.updateStdRecordJoinMajorCode(plStdRecord.getId());
+		}
 		
 		return new Ajax();
 	}
@@ -1197,16 +1271,19 @@ public class PlStdRecordControl extends FrameControl {
 				}
 				
 				//4、重复判断
-				PlStdRecord stdRecord = this.plStdRecordService.findStdRecord(ticket_no, join_major_code, ApplyForm.NET_ASSIST.ordinal());
+				//PlStdRecord stdRecord = this.plStdRecordService.findStdRecord(ticket_no, join_major_code, ApplyForm.NET_ASSIST.ordinal());
+				// 梁有日:20241126 有网络助学考生备案后,不能再重复备案
+				PlStdRecord stdRecord = this.plStdRecordService.findStdRecordForJoin(ticket_no, ApplyForm.NET_ASSIST.ordinal());
+				
 				if(stdRecord != null) {
 					errSb.append("该考生已经存在网络助学考生备案信息(").append(stdRecord.getYear_code()).append(" ").append(stdRecord.getOrg_name()).append("),不允许重复备案;");
 				}
 				
 				// 20220718 网络助学考生备案,存在专本衔接考生备案时,不允许进行网络助学考生备案
 				//stdRecord = this.plStdRecordService.findStdRecordForJoin(ticket_no, ApplyForm.JCE_TO_UDG.ordinal());
+				// 梁有日:20241126 只要有专本衔接备案就不允许网络助学备案 修改DAO类去掉7年备案约束
 				stdRecord = this.plStdRecordService.findStdRecordForNet(ticket_no, ApplyForm.JCE_TO_UDG.ordinal(),year_code);
 
-				
 				if(stdRecord != null) {
 					errSb.append("该考生已经存在专本衔接考生备案信息("+stdRecord.getYear_code()+" "+stdRecord.getOrg_name()+"),请先申请注销考生专本衔接备案,待审批后再进行网络助学新生备案;");
 				}

+ 416 - 61
ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlTextbookControl.java

@@ -1,13 +1,20 @@
 package cn.hmsoft.ses.control.pl;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.net.URLEncoder;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.servlet.ServletOutputStream;
+
 import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -15,10 +22,16 @@ import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
 import cn.hmsoft.frame.control.FrameControl;
+import cn.hmsoft.frame.data.model.FrameDict;
 import cn.hmsoft.frame.data.model.FrameOptr;
 import cn.hmsoft.frame.exception.web.BusinessException;
+import cn.hmsoft.frame.util.FrameDictUtil;
 import cn.hmsoft.frame.util.RequestContextUtil;
+import cn.hmsoft.helper.LogHelper;
 import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import cn.hmsoft.jdbc.entity.QueryOrderType;
 import cn.hmsoft.office.excel.Excel2007Writer;
 import cn.hmsoft.office.excel.ExcelReaderHelper;
 import cn.hmsoft.ses.common.constants.PlConst.LogOperateType;
@@ -66,13 +79,20 @@ public class PlTextbookControl extends FrameControl{
      * 分页查询教材信息
      */
     @RequestMapping("pl/plTextbook/page")
-    public Ajax pagePlTextbook(String query, Integer limit, Integer start, String order, String type,Integer status,Integer exam_time_id) {
+    public Ajax pagePlTextbook(String query, Integer limit, Integer start, String order, String type,Integer status,Integer exam_time_id,Integer is_unified) {
     	this.getFrameOptr();
-        if (StringHelper.isEmpty(order)) {
-        	order = "et.year_code";
-        	type = "desc";
-        }
-        return new Ajax(this.plTextbookService.pagePlTextbook(query, start, limit, order, type,status,exam_time_id));
+    	QueryOrder queryOrder = null;
+		if (StringHelper.isEmpty(order)) {
+			LinkedHashMap<String, QueryOrderType> fields = new LinkedHashMap<String, QueryOrderType>();
+			fields.put("et.year_code", QueryOrderType.DESC);
+			fields.put("c.course_code", QueryOrderType.ASC);
+			new QueryOrder(fields);
+			queryOrder = new QueryOrder(fields);
+		} else {
+			queryOrder = this.getQueryOrder(order, type);
+		}
+		
+        return new Ajax(this.plTextbookService.pagePlTextbook(query, start, limit, queryOrder,status,exam_time_id, is_unified));
     }
     
     /**
@@ -80,25 +100,32 @@ public class PlTextbookControl extends FrameControl{
      * 新增教材
      */
     @RequestMapping("pl/plTextbook/add")
-    public Ajax addPlTextbook(final PlTextbook plTextbook,String course_ids,String course_exam_times) {
+    public Ajax addPlTextbook(final PlTextbook plTextbook) {
     	this.getFrameOptr();
-    	List<PlTextbook> bookList = this.plTextbookService.list("textbook_code", plTextbook.getTextbook_code());
-    	if(bookList != null && bookList.size()>0) {
-    		throw new BusinessException("教材代码已经存在,请不要录入相同的教材代码");
+    	
+    	if(StringUtils.isEmpty(plTextbook.getTextbook_name())){
+    		throw new BusinessException("教材名称不允许为空。");
     	}
-    	Integer tex_tbook_id=this.plTextbookService.insert(plTextbook);
-        if (course_ids!=null) {
-			String[] courses=course_ids.split(",");
-			String[] exam_times=course_exam_times.split(",");
-			for (int i = 0; i < courses.length; i++) {
-				PlCourseTextbook courseTextbook=new PlCourseTextbook();
-				courseTextbook.setTextbook_id(tex_tbook_id);
-				courseTextbook.setCourse_id(Integer.valueOf(courses[i]));
-				courseTextbook.setExam_time_id(Integer.valueOf(exam_times[i]));
-				addPlTextbookCourse(courseTextbook);
-			}
-			
-		}
+    	
+    	if(null == plTextbook.getCourse_id()){
+    		throw new BusinessException("关联课程不允许为空。");
+    	}
+    	
+    	if(null == plTextbook.getExam_time_id()){
+    		throw new BusinessException("考试批次不允许为空。");
+    	}
+    	
+    	PlTextbook temp = this.plTextbookService.queryPlTextBookByCourseAndExamYear(plTextbook.getCourse_id(), plTextbook.getExam_time_id());
+    	
+    	if(null != temp){
+    		throw new BusinessException("当前考试批次,当前课程已经存在教材信息,请不要重复添加。");
+    	}
+    	
+    	//PlCourse plCourse = this.courseService.find(plTextbook.getCourse_id());
+    	//plTextbook.setTextbook_code("0"+plCourse.getCourse_code());
+    	
+    	this.plTextbookService.insert(plTextbook);
+    	
         
         return new Ajax();
     }
@@ -110,6 +137,36 @@ public class PlTextbookControl extends FrameControl{
     @RequestMapping("pl/plTextbook/edit")
     public Ajax editPlTextbook(final PlTextbook plTextbook) {
     	this.getFrameOptr();
+    	if(StringUtils.isEmpty(plTextbook.getTextbook_name())){
+    		throw new BusinessException("教材名称不允许为空。");
+    	}
+    	
+    	if(null == plTextbook.getCourse_id()){
+    		throw new BusinessException("关联课程不允许为空。");
+    	}
+    	
+    	if(null == plTextbook.getExam_time_id()){
+    		throw new BusinessException("考试批次不允许为空。");
+    	}
+    	
+    	PlTextbook temp = this.plTextbookService.find(plTextbook.getId());
+    	if(null == temp){
+    		throw new BusinessException("教材信息为空,编辑失败。");
+    	}
+    	
+    	if(null != temp.getExam_time_id() && temp.getExam_time_id().intValue() != plTextbook.getExam_time_id().intValue()){
+    		throw new BusinessException("不允许修改考试批次。");
+    	}
+    	
+    	PlTextbook temp_PlTextbook = this.plTextbookService.queryPlTextBookByCourseAndExamYear(plTextbook.getCourse_id(), plTextbook.getExam_time_id());
+    	
+    	if(null != temp_PlTextbook && plTextbook.getId().intValue() != temp_PlTextbook.getId().intValue()){
+    		throw new BusinessException("当前考试批次,当前课程已经存在教材信息,请不要修改关联课程。");
+    	}
+    	
+    	//PlCourse plCourse = this.courseService.find(plTextbook.getCourse_id());
+    	//plTextbook.setTextbook_code("0"+plCourse.getCourse_code());
+    	
         this.plTextbookService.edit(plTextbook);
         return new Ajax();
     }
@@ -118,14 +175,24 @@ public class PlTextbookControl extends FrameControl{
     @RequestMapping("pl/plTextbook/deleteBatch")
     public Ajax deletePlTextbook(final Integer[] ids) {
     	this.getFrameOptr();
+    	PlTextbook plTextbook = null;
+    	for (Integer id : ids) {
+    		plTextbook = this.plTextbookService.find(id);
+    		if(null != plTextbook && null != plTextbook.getStatus() && plTextbook.getStatus().intValue() == 1){
+    			throw new BusinessException("教材已经发布,不允许删除。");
+    		}
+    		
+    	}
+    	
     	for (Integer id : ids) {
-			List<PlCourseTextbook> list = this.courseTextbookService.list("textbook_id", id);
+			/*List<PlCourseTextbook> list = this.courseTextbookService.list("textbook_id", id);
 			if (list != null && list.size() > 0) {
 				for(PlCourseTextbook book :list){
 					// 删除关联关系,但不删除历史关联关系
 					this.courseTextbookService.delete(book.getId());
 				}
-			}
+			}*/
+    		
     		this.plTextbookService.delete(id);
     	}
         return new Ajax();
@@ -208,6 +275,7 @@ public class PlTextbookControl extends FrameControl{
     	return new Ajax();
     }
     
+    
 	/**
 	 * 模板下载
 	 */
@@ -253,85 +321,164 @@ public class PlTextbookControl extends FrameControl{
 		
 		try {
 		List<List<String>> uploadList = ExcelReaderHelper.readSheet(file.getOriginalFilename(),
-				file.getInputStream(), 0, 10);
+				file.getInputStream(), 0, 11);
 		List<List<Object>> errList = getTitle(uploadList);
-		List<PlCourseTextbook> result = new ArrayList<>();// 插入数据库中的数据
+		List<PlTextbook> result = new ArrayList<PlTextbook>();// 插入数据库中的数据
+		
 		for(int i=1; i<uploadList.size(); i++) {
+			Integer exam_time_id = null;
+			Integer course_id = null;
+			PlTextbook temp = null;
+			PlCourse course = null;
+			
 			List<String> list = uploadList.get(i);
 			StringBuffer errMsg = new StringBuffer();
 			String index = list.get(0);
-			String courseName = list.get(1);
-			String courseCode = getCourseCode(list.get(2));
-			String score = list.get(3);
+			String courseCode = list.get(1);
+			String courseName = getCourseCode(list.get(2));
+			String textbookName = list.get(3);
 			String outLine = list.get(4);
-			String textbookName = list.get(5);
-			String writer = list.get(6);
-			String publisher = list.get(7);
-			String revision = list.get(8);
-			String time = list.get(9);
+			String writer = list.get(5);
+			String publisher = list.get(6);
+			String revision = list.get(7);
+			String time = list.get(8);
 			
-			//课程存在判断
-			List<PlCourse> courseList = this.courseService.list("course_code", courseCode);
-			if(courseList == null || courseList.size() == 0) {
-				errMsg.append("课程不存在;");
+			String file_name = null;
+			String file_path = null;
+			
+			if(list.size()>9){
+				 file_name = list.get(9);
+				 file_path = list.get(10);
 			}
+			
+			
 			//教材存在判断
 			textbookName = (textbookName != null) ? textbookName.trim() : textbookName;
 			writer = (writer != null) ? writer.trim() : writer;
 			publisher = (publisher != null) ? publisher.trim() : publisher;
-			List<PlTextbook> bookList = this.plTextbookService.listTextbook(textbookName, writer, publisher);
-			if(bookList == null || bookList.size() == 0) {
-				errMsg.append("教材不存在;");
+			courseCode = (courseCode != null) ? courseCode.trim() : courseCode;
+			outLine = (outLine != null) ? outLine.trim() : outLine;
+			revision = (revision != null) ? revision.trim() : revision;
+			
+			file_name = (file_name != null) ? file_name.trim() : file_name;
+			file_path = (file_path != null) ? file_path.trim() : file_path;
+			
+			if(StringUtils.isEmpty(courseCode)){
+				errMsg.append("课程代码不允许为空;");
+			}else{
+				//课程存在判断
+				List<PlCourse> courseList = this.courseService.list("course_code", courseCode);
+				if(courseList == null || courseList.size() == 0) {
+					errMsg.append("课程代码在系统中不存在;");
+				}else{
+					course_id = courseList.get(0).getId();
+					course = courseList.get(0);
+				}
+			}
+			
+			
+			if(StringUtils.isEmpty(textbookName)){
+				errMsg.append("教材名称不允许为空;");
+			}else if(textbookName.length() >200){
+				errMsg.append("教材名称长度不允许超过200字节;");
+			}
+			
+			if(!StringUtils.isEmpty(writer) && writer.length()>90){
+				errMsg.append("编著长度不允许超过90字节;");
+			}
+			
+			if(!StringUtils.isEmpty(publisher) && publisher.length()>90){
+				errMsg.append("出版社长度不允许超过90字节;");
+			}
+			
+			if(!StringUtils.isEmpty(outLine) && outLine.length()>100){
+				errMsg.append("教材大纲长度不允许超过100字节;");
+			}
+			
+			if(!StringUtils.isEmpty(revision) && revision.length()>32){
+				errMsg.append("版次长度不允许超过32字节;");
 			}
+			
+			
 			//批次码(启用时间)判断
 			List<PlExamTime> timeList = new ArrayList<>();
 			if (StringHelper.isNotEmpty(time)) {
 				if (time.trim().length() != 6) {
-					errMsg.append("启用时间填写6位批次码;");
+					errMsg.append("考试批次填写6位批次码;");
 				}
 				 timeList = this.timeService.list("year_code", time);
 				if (timeList == null || timeList.size() == 0) {
-					errMsg.append("请配置年度码和考试时间;");
+					errMsg.append("请先配置年度码和考试时间;");
+				}else{
+					exam_time_id = timeList.get(0).getId();
 				}
 			}
 			
+			if(null != course_id && null != exam_time_id){
+				temp = this.plTextbookService.queryPlTextBookByCourseAndExamYear(course_id, exam_time_id);
+		    	
+		    	if(null != temp){
+		    		errMsg.append("课程对应的考试批次已经存在教材,不允许重复添加;");
+		    	}
+			}
+			
+			if(!StringUtils.isEmpty(file_path)){
+				File temp_file = new File(file_path);
+				if(!temp_file.exists()){
+					errMsg.append("教材大纲文件在系统中不存在,请清空教材大纲文件路径或者修改教材大纲文件路径;");
+				}
+				
+				if(StringUtils.isEmpty(file_name)){
+					errMsg.append("请填写教材大纲文件名称;");
+				}
+			}
+			
+	    	
+			
 			// 保存所有错误
 			List<Object> objList = new ArrayList<Object>();
 			objList.add(index);
 			objList.add(courseName);
 			objList.add(courseCode);
-			objList.add(score);
 			objList.add(outLine);
 			objList.add(textbookName);
 			objList.add(writer);
 			objList.add(publisher);
 			objList.add(revision);
 			objList.add(time);
+			objList.add(file_name);
+			objList.add(file_path);
 			objList.add(errMsg);// 错误描述列
 			errList.add(objList);
 			
 			//无误数据导入
 			if (errMsg.length() == 0) {
-				PlCourse course = courseList.get(0);
-				PlTextbook book = bookList.get(0);
-				PlExamTime examTime = new PlExamTime();
-				if (StringHelper.isEmpty(time)) {
-					List<PlExamTime> curList = this.timeService.list("year_code",
-							YearCodeHelper.getCurrentYearCode());
-					examTime = (curList != null && curList.size() > 0) ? curList.get(0) : new PlExamTime();
-				} else {
-					examTime = timeList.get(0);
+				PlTextbook plTextbook = new PlTextbook();
+				plTextbook.setTextbook_code("0"+course.getCourse_code());
+				plTextbook.setTextbook_name(textbookName);
+				plTextbook.setTextbook_writer(writer);
+				plTextbook.setTextbook_publisher(publisher);
+				plTextbook.setTextbook_revision(revision);
+				plTextbook.setTextbook_outline(outLine);
+				
+				if(!StringUtils.isEmpty(file_path)){
+					plTextbook.setFile_path(file_path);
+				}
+				
+				if(!StringUtils.isEmpty(file_name)){
+					plTextbook.setFile_name(file_name);
 				}
-				PlCourseTextbook ctBook = new PlCourseTextbook();
-				ctBook.setCourse_id(course.getId());
-				ctBook.setTextbook_id(book.getId());
-				ctBook.setExam_time_id(examTime.getId());
-				result.add(ctBook);
+				
+				plTextbook.setStatus(0);
+				plTextbook.setExam_time_id(exam_time_id);
+				plTextbook.setCourse_id(course_id);
+				
+				result.add(plTextbook);
 			}
 		}
 		
 		if (result.size() == uploadList.size() - 1) {
-			this.courseTextbookService.addCourseTextbook(result);
+			this.plTextbookService.addPlTextbook(result);
 		} else {
 			ajax.setErrorCode(-1);
 			ajax.setErrorMsg("存在不合规记录,请下载查看.");
@@ -365,7 +512,7 @@ public class PlTextbookControl extends FrameControl{
 		List<List<Object>> errList = new ArrayList<>();
 		if (uploadList != null && uploadList.size() > 0) {
 			List<String> data = uploadList.get(0);
-			List<Object> list = getOrigData(data, 10);
+			List<Object> list = getOrigData(data, 11);
 			list.add("错误提示");
 			errList.add(list);
 		}
@@ -447,5 +594,213 @@ public class PlTextbookControl extends FrameControl{
 		this.downloadFile(this.courseTextbookService.exportCtbook(exam_year), fileName,true);
 	}
 	
+	@RequestMapping("pl/plTextbook/downloadFile")
+	public void downloadFile(Integer id) {
+		PlTextbook plTextbook = this.plTextbookService.find(id);
+		File file = new File(plTextbook.getFile_path());
+		this.downloadFile(file, file.getName());
+	}
+	
+	 @RequestMapping("pl/plTextbook/uploadFile")
+	    public Ajax uploadFile(Integer exam_time_id, MultipartFile file) {
+	    	Ajax ajax = new Ajax();
+	    	
+	    	String extension = FilenameUtils.getExtension(file.getOriginalFilename());
+			// 转换小写
+			extension = extension.toLowerCase();
+			
+			// 校验文件类型
+			if (!"jpg".equals(extension) && !"jpeg".equals(extension) && !"png".equals(extension)&& !"gif".equals(extension)&& !"bmp".equals(extension)&&!"xlsx".equals(extension) && !"xls".equals(extension) && !"doc".equals(extension)&& !"docx".equals(extension)&& !"pdf".equals(extension) && !"txt".equals(extension)&& !"zip".equals(extension)) {
+				ajax.setSuccess(false);
+				ajax.setErrorCode(-1);
+				ajax.setErrorMsg("上传文件必须是JPG/JPEG/PNG/xls/xlsx/doc/docx/pdf/txt/zip格式!");
+				return ajax;
+			}
+			
+			String yearCode = null;
+			PlExamTime plExamTime = this.timeService.find(exam_time_id);
+			if(null == plExamTime){
+				yearCode = YearCodeHelper.getCurrentYearCode();
+			}else{
+				yearCode = plExamTime.getYear_code()+"";
+			}
+			
+	    	String fileDir = SysConst.getPlTextbookPath(yearCode);
+			File dir = new File(fileDir);
+			if (!dir.exists()) {
+				dir.mkdirs();
+			}
+			File desFile = new File(fileDir + file.getOriginalFilename());
+			try {
+				file.transferTo(desFile);
+				Map<String, String> map = new HashMap<String, String>();
+				map.put("file_path", desFile.toString());
+				map.put("file_name", file.getOriginalFilename());
+				ajax.setMap(map);
+			} catch (IllegalStateException e) {
+				LogHelper.error(e);
+			} catch (IOException e) {
+				LogHelper.error(e);
+			}
+	    	return ajax;
+	    }
+	    
+	
+	 @RequestMapping("pl/plTextbook/downxls")
+		public void downxls(String query, Integer limit, Integer start, String order, String type,Integer status,Integer exam_time_id,Integer is_unified) {
+		 QueryOrder queryOrder = null;
+			if (StringHelper.isEmpty(order)) {
+				LinkedHashMap<String, QueryOrderType> fields = new LinkedHashMap<String, QueryOrderType>();
+				fields.put("et.year_code", QueryOrderType.DESC);
+				fields.put("c.course_code", QueryOrderType.ASC);
+				new QueryOrder(fields);
+				queryOrder = new QueryOrder(fields);
+			} else {
+				queryOrder = this.getQueryOrder(order, type);
+			}
+			
+	    	Pager pager = this.plTextbookService.pagePlTextbook(query, 0, Integer.MAX_VALUE, queryOrder,status,exam_time_id, is_unified);
+	    			
+	    	List<List<Object>> values = new ArrayList<List<Object>>();
+	    	List<Object> headerList = new ArrayList<Object>();
+	    	headerList.add("序号");
+	    	headerList.add("课程代码");
+	    	headerList.add("课程名称");
+	    	headerList.add("教材名称");
+	    	headerList.add("教材大纲");
+	    	
+	    	headerList.add("编著");
+	    	headerList.add("出版社");
+	    	headerList.add("版次");
+	    	headerList.add("考试批次");
+	    	headerList.add("教材大纲文件名称");
+	    	headerList.add("教材大纲文件路径");
+	    	
+	    	values.add(headerList);
+	    	
+	    	int i=1;
+	    	List<Map<String, Object>> list = (List<Map<String, Object>>)pager.getRecords();
+	    	for (Map<String, Object> map: list) {
+	    		List<Object> rowList = new ArrayList<Object>();
+	    		rowList.add(i);
+	    		rowList.add(map.get("course_code"));
+	    		rowList.add(map.get("course_name"));
+	    		rowList.add(map.get("textbook_name"));
+	    		rowList.add(map.get("textbook_outline"));
+	    		rowList.add(map.get("textbook_writer"));
+	    		rowList.add(map.get("textbook_publisher"));
+	    		rowList.add(map.get("textbook_revision"));
+	    		rowList.add(map.get("year_code"));
+	    		rowList.add(map.get("file_name"));
+	    		rowList.add(map.get("file_path"));
+	    		
+	    		values.add(rowList);
+	    		
+	    		i++;
+	    	}
+	    	ServletOutputStream outStream = null;
+			try {
+				String fileName = "教材信息" + ".xlsx";
+				fileName = URLEncoder.encode(fileName, "UTF-8");
+				fileName = new String(fileName.getBytes(), "ISO-8859-1");
+		    	XSSFWorkbook wb = Excel2007Writer.createExcel(values);
+		    	ByteArrayOutputStream os = new ByteArrayOutputStream();
+				wb.write(os);
+				this.getResponse().reset();
+				this.getResponse().setContentType("application/x-msdownload");
+				this.getResponse().setHeader("Content-Disposition", "attachment; filename=" + fileName);
+				outStream = this.getResponse().getOutputStream();
+				outStream.write(os.toByteArray());
+			} catch (Exception e) {
+				e.printStackTrace();
+			} finally {
+				if(outStream != null) {
+					try {
+						outStream.close();
+					} catch (IOException e) {
+						e.printStackTrace();
+					}
+				}
+			}
+		}
+	 
+	 
+	 @RequestMapping("pl/plTextbook/downXlsForUnified")
+		public void downXlsForUnified(Integer limit, Integer start, String order, String type,Integer exam_time_id) {
+		 QueryOrder queryOrder = null;
+			if (StringHelper.isEmpty(order)) {
+				LinkedHashMap<String, QueryOrderType> fields = new LinkedHashMap<String, QueryOrderType>();
+				fields.put("c.course_code", QueryOrderType.ASC);
+				new QueryOrder(fields);
+				queryOrder = new QueryOrder(fields);
+			} else {
+				queryOrder = this.getQueryOrder(order, type);
+			}
+			
+	    	Pager pager = this.plTextbookService.pagePlTextbookForUnified(0, Integer.MAX_VALUE, queryOrder, exam_time_id);
+	    			
+	    	List<List<Object>> values = new ArrayList<List<Object>>();
+	    	List<Object> headerList = new ArrayList<Object>();
+	    	headerList.add("序号");
+	    	headerList.add("课程代码");
+	    	headerList.add("课程名称");
+	    	headerList.add("教材名称");
+	    	headerList.add("教材大纲");
+	    	
+	    	headerList.add("编著");
+	    	headerList.add("出版社");
+	    	headerList.add("版次");
+	    	headerList.add("考试批次");
+	    	headerList.add("教材大纲文件名称");
+	    	headerList.add("教材大纲文件路径");
+	    	
+	    	values.add(headerList);
+	    	
+	    	int i=1;
+	    	List<Map<String, Object>> list = (List<Map<String, Object>>)pager.getRecords();
+	    	for (Map<String, Object> map: list) {
+	    		List<Object> rowList = new ArrayList<Object>();
+	    		rowList.add(i);
+	    		rowList.add(map.get("course_code"));
+	    		rowList.add(map.get("course_name"));
+	    		rowList.add(map.get("textbook_name"));
+	    		rowList.add(map.get("textbook_outline"));
+	    		rowList.add(map.get("textbook_writer"));
+	    		rowList.add(map.get("textbook_publisher"));
+	    		rowList.add(map.get("textbook_revision"));
+	    		rowList.add(map.get("year_code"));
+	    		rowList.add(map.get("file_name"));
+	    		rowList.add(map.get("file_path"));
+	    		
+	    		
+	    		values.add(rowList);
+	    		
+	    		i++;
+	    	}
+	    	ServletOutputStream outStream = null;
+			try {
+				String fileName = "考试计划未完善的教材信息" + ".xlsx";
+				fileName = URLEncoder.encode(fileName, "UTF-8");
+				fileName = new String(fileName.getBytes(), "ISO-8859-1");
+		    	XSSFWorkbook wb = Excel2007Writer.createExcel(values);
+		    	ByteArrayOutputStream os = new ByteArrayOutputStream();
+				wb.write(os);
+				this.getResponse().reset();
+				this.getResponse().setContentType("application/x-msdownload");
+				this.getResponse().setHeader("Content-Disposition", "attachment; filename=" + fileName);
+				outStream = this.getResponse().getOutputStream();
+				outStream.write(os.toByteArray());
+			} catch (Exception e) {
+				e.printStackTrace();
+			} finally {
+				if(outStream != null) {
+					try {
+						outStream.close();
+					} catch (IOException e) {
+						e.printStackTrace();
+					}
+				}
+			}
+		}
 	
 }

+ 451 - 0
ses-manage/src/main/java/cn/hmsoft/ses/control/pl/PlTextbookPreControl.java

@@ -0,0 +1,451 @@
+package cn.hmsoft.ses.control.pl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import cn.hmsoft.frame.control.FrameControl;
+import cn.hmsoft.frame.data.model.FrameOptr;
+import cn.hmsoft.frame.exception.web.BusinessException;
+import cn.hmsoft.frame.util.RequestContextUtil;
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.office.excel.Excel2007Writer;
+import cn.hmsoft.office.excel.ExcelReaderHelper;
+import cn.hmsoft.ses.common.constants.PlConst.LogOperateType;
+import cn.hmsoft.ses.common.constants.SysConst;
+import cn.hmsoft.ses.data.model.pl.PlCoursePre;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbookLogPre;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbookPre;
+import cn.hmsoft.ses.data.model.pl.PlExamTime;
+import cn.hmsoft.ses.data.model.pl.PlTextbookPre;
+import cn.hmsoft.ses.service.iface.pl.IPlCoursePreService;
+import cn.hmsoft.ses.service.iface.pl.IPlCourseTextbookLogPreService;
+import cn.hmsoft.ses.service.iface.pl.IPlCourseTextbookPreService;
+import cn.hmsoft.ses.service.iface.pl.IPlExamTimeService;
+import cn.hmsoft.ses.service.iface.pl.IPlTextbookPreService;
+import cn.hmsoft.ses.util.YearCodeHelper;
+import cn.hmsoft.web.entity.Ajax;
+
+/**
+ * 教材表 旧表-jc_jiaocai 控制器.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-17 14:49:52
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@RestController
+public class PlTextbookPreControl extends FrameControl {
+
+	@Autowired
+	private IPlTextbookPreService plTextbookService;
+	@Autowired
+	private IPlCourseTextbookPreService courseTextbookService;
+	@Autowired
+	private IPlCourseTextbookLogPreService logService;
+	@Autowired
+	private IPlCoursePreService courseService;
+	@Autowired
+	private IPlExamTimeService timeService;
+
+	/**
+	 * @param status:教材状态,
+	 *            分页查询教材信息
+	 */
+	@RequestMapping("pl/plTextbookPre/page")
+	public Ajax pagePlTextbook(String query, Integer limit, Integer start, String order, String type, Integer status,
+			Integer exam_time_id) {
+		this.getFrameOptr();
+		if (StringHelper.isEmpty(order)) {
+			order = "et.year_code";
+			type = "desc";
+		}
+		return new Ajax(this.plTextbookService.pagePlTextbook(query, start, limit, order, type, status, exam_time_id));
+	}
+
+	/**
+	 * @param plTextbook
+	 *            新增教材
+	 */
+	@RequestMapping("pl/plTextbookPre/add")
+	public Ajax addPlTextbook(final PlTextbookPre plTextbook, String course_ids, String course_exam_times) {
+		this.getFrameOptr();
+		List<PlTextbookPre> bookList = this.plTextbookService.list("textbook_code", plTextbook.getTextbook_code());
+		if (bookList != null && bookList.size() > 0) {
+			throw new BusinessException("教材代码已经存在,请不要录入相同的教材代码");
+		}
+		Integer tex_tbook_id = this.plTextbookService.insert(plTextbook);
+		if (course_ids != null) {
+			String[] courses = course_ids.split(",");
+			String[] exam_times = course_exam_times.split(",");
+			for (int i = 0; i < courses.length; i++) {
+				PlCourseTextbookPre courseTextbook = new PlCourseTextbookPre();
+				courseTextbook.setTextbook_id(tex_tbook_id);
+				courseTextbook.setCourse_id(Integer.valueOf(courses[i]));
+				courseTextbook.setExam_time_id(Integer.valueOf(exam_times[i]));
+				addPlTextbookCourse(courseTextbook);
+			}
+
+		}
+
+		return new Ajax();
+	}
+
+	/**
+	 * @param plTextbook
+	 *            编辑教材
+	 */
+	@RequestMapping("pl/plTextbookPre/edit")
+	public Ajax editPlTextbook(final PlTextbookPre plTextbook) {
+		this.getFrameOptr();
+		this.plTextbookService.edit(plTextbook);
+		return new Ajax();
+	}
+
+	@RequestMapping("pl/plTextbookPre/deleteBatch")
+	public Ajax deletePlTextbook(final Integer[] ids) {
+		this.getFrameOptr();
+		for (Integer id : ids) {
+			List<PlCourseTextbookPre> list = this.courseTextbookService.list("textbook_id", id);
+			if (list != null && list.size() > 0) {
+				for (PlCourseTextbookPre book : list) {
+					// 删除关联关系,但不删除历史关联关系
+					this.courseTextbookService.delete(book.getId());
+				}
+			}
+			this.plTextbookService.delete(id);
+		}
+		return new Ajax();
+	}
+
+	@RequestMapping("pl/plTextbookPre/find")
+	public Ajax findPlTextBook(Integer id) {
+		this.getFrameOptr();
+		return new Ajax(this.plTextbookService.find(id));
+	}
+
+	/**
+	 * @param id:教材ID
+	 *            查询教材关联的课程信息
+	 */
+	@RequestMapping("pl/plTextbookPre/get")
+	public Ajax getPlTextbookById(final Integer id) {
+		this.getFrameOptr();
+		List<Map<String, Object>> list = this.courseTextbookService.listCourseTextBook(id);
+		return new Ajax(list);
+	}
+
+	/**
+	 * @param textbook_id:教材ID
+	 * @param course_id:课程ID
+	 *            教材添加课程关联
+	 */
+	@RequestMapping("pl/plTextbookPre/addCourse")
+	public Ajax addPlTextbookCourse(PlCourseTextbookPre courseTextbook) {
+		this.getFrameOptr();
+		// 删除已经存在的关联,log表不删除
+		// List<PlCourseTextbook> list =
+		// this.courseTextbookService.listTextBookCourse(courseTextbook.getCourse_id());
+		// if (list != null && list.size() > 0) {
+		// for(PlCourseTextbook book:list){
+		// courseTextbookService.delete(book.getId());
+		// }
+		//
+		// }
+
+		if (null == courseTextbook.getExam_time_id() || 0 == courseTextbook.getExam_time_id()) {
+			List<PlExamTime> timeList = this.timeService.list("year_code", YearCodeHelper.getCurrentYearCode());
+			if (timeList != null && timeList.size() > 0) {
+				courseTextbook.setExam_time_id(timeList.get(0).getId());
+			}
+		}
+
+		// 课程关联log重复判断
+		List<PlCourseTextbookLogPre> logList = this.logService.listCourseTextbookLog(courseTextbook.getCourse_id(),
+				courseTextbook.getExam_time_id());
+		if (logList != null && logList.size() > 0) {
+			// 日志存在,则先删除,再新增
+			for (PlCourseTextbookLogPre log : logList) {
+				this.logService.delete(log.getId());
+			}
+
+		}
+
+		this.logService.insertCourseTextBookLog(courseTextbook, LogOperateType.ADD.ordinal());
+		courseTextbookService.insertTextbook(courseTextbook);
+		return new Ajax();
+	}
+
+	@RequestMapping("pl/plTextbookPre/synTextBook")
+	public Ajax synTextBook(Integer exam_time_id, Integer old_exam_time_id) {
+		FrameOptr optr = this.getFrameOptr();
+		String optr_name = optr.getLogin_name() + "(" + optr.getOptr_name() + ")";
+		this.logService.synTextbookLog(exam_time_id, old_exam_time_id, optr_name);
+		return new Ajax();
+	}
+
+	/**
+	 * @param id:
+	 *            课程教材关联表主键ID 删除课程教材关联
+	 */
+	@RequestMapping("pl/plTextbookPre/deleteCourse")
+	public Ajax deletePlTextbookCourse(Integer id) {
+		this.getFrameOptr();
+
+		this.courseTextbookService.delete(id);
+		return new Ajax();
+	}
+
+	/**
+	 * 模板下载
+	 */
+	@RequestMapping("pl/plTextbookPre/download")
+	public void downloadTemplate() {
+		String fileName = "textbook.xlsx";
+		String filePath = this.getClass().getResource("/document/" + fileName).getFile();
+		this.downloadFile(new File(filePath), fileName);
+	}
+
+	/**
+	 * 错误文件下载
+	 */
+	@RequestMapping("pl/plTextbookPre/downloadError")
+	public void downloadError(String filePath) {
+		File file = new File(filePath);
+		this.downloadFile(file, file.getName());
+	}
+
+	/**
+	 * @param file:上传的文件
+	 * @return 批量导入教材信息 规则说明: 1、课程代码在课程表中存在 2、教材名称在教材表中存在(教材名称全量匹配)
+	 *         3、年度码验证(如果不为空,则须为6位,并且在pl_exam_time中找到) 4、课程+教材关联
+	 *         已经存在,则将关联信息复制到历史表,并更新关系表中的批次,如果不是当前批次的,则直接写入
+	 */
+	@RequestMapping("pl/plTextbookPre/upload")
+	public Ajax addTextbook(MultipartFile file) {
+		this.getFrameOptr();
+		Ajax ajax = new Ajax();
+		FrameOptr optr = RequestContextUtil.currentLoginUser();
+
+		String extension = FilenameUtils.getExtension(file.getOriginalFilename());
+		// 转换小写
+		extension = extension.toLowerCase();
+
+		// 校验文件类型
+		if (!"xlsx".equals(extension) && !"xls".equals(extension)) {
+			throw new BusinessException("上传文件必须是xls/xlsx/格式!");
+		}
+
+		try {
+			List<List<String>> uploadList = ExcelReaderHelper.readSheet(file.getOriginalFilename(),
+					file.getInputStream(), 0, 10);
+			List<List<Object>> errList = getTitle(uploadList);
+			List<PlCourseTextbookPre> result = new ArrayList<>();// 插入数据库中的数据
+			for (int i = 1; i < uploadList.size(); i++) {
+				List<String> list = uploadList.get(i);
+				StringBuffer errMsg = new StringBuffer();
+				String index = list.get(0);
+				String courseName = list.get(1);
+				String courseCode = getCourseCode(list.get(2));
+				String score = list.get(3);
+				String outLine = list.get(4);
+				String textbookName = list.get(5);
+				String writer = list.get(6);
+				String publisher = list.get(7);
+				String revision = list.get(8);
+				String time = list.get(9);
+
+				// 课程存在判断
+				List<PlCoursePre> courseList = this.courseService.list("course_code", courseCode);
+				if (courseList == null || courseList.size() == 0) {
+					errMsg.append("课程不存在;");
+				}
+				// 教材存在判断
+				textbookName = (textbookName != null) ? textbookName.trim() : textbookName;
+				writer = (writer != null) ? writer.trim() : writer;
+				publisher = (publisher != null) ? publisher.trim() : publisher;
+				List<PlTextbookPre> bookList = this.plTextbookService.listTextbook(textbookName, writer, publisher);
+				if (bookList == null || bookList.size() == 0) {
+					errMsg.append("教材不存在;");
+				}
+				// 批次码(启用时间)判断
+				List<PlExamTime> timeList = new ArrayList<>();
+				if (StringHelper.isNotEmpty(time)) {
+					if (time.trim().length() != 6) {
+						errMsg.append("启用时间填写6位批次码;");
+					}
+					timeList = this.timeService.list("year_code", time);
+					if (timeList == null || timeList.size() == 0) {
+						errMsg.append("请配置年度码和考试时间;");
+					}
+				}
+
+				// 保存所有错误
+				List<Object> objList = new ArrayList<Object>();
+				objList.add(index);
+				objList.add(courseName);
+				objList.add(courseCode);
+				objList.add(score);
+				objList.add(outLine);
+				objList.add(textbookName);
+				objList.add(writer);
+				objList.add(publisher);
+				objList.add(revision);
+				objList.add(time);
+				objList.add(errMsg);// 错误描述列
+				errList.add(objList);
+
+				// 无误数据导入
+				if (errMsg.length() == 0) {
+					PlCoursePre course = courseList.get(0);
+					PlTextbookPre book = bookList.get(0);
+					PlExamTime examTime = new PlExamTime();
+					if (StringHelper.isEmpty(time)) {
+						List<PlExamTime> curList = this.timeService.list("year_code",
+								YearCodeHelper.getCurrentYearCode());
+						examTime = (curList != null && curList.size() > 0) ? curList.get(0) : new PlExamTime();
+					} else {
+						examTime = timeList.get(0);
+					}
+					PlCourseTextbookPre ctBook = new PlCourseTextbookPre();
+					ctBook.setCourse_id(course.getId());
+					ctBook.setTextbook_id(book.getId());
+					ctBook.setExam_time_id(examTime.getId());
+					result.add(ctBook);
+				}
+			}
+
+			if (result.size() == uploadList.size() - 1) {
+				this.courseTextbookService.addCourseTextbook(result);
+			} else {
+				ajax.setErrorCode(-1);
+				ajax.setErrorMsg("存在不合规记录,请下载查看.");
+				ajax.setUrl(createTempFile(file, errList, optr.getLogin_name()));
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return ajax;
+	}
+
+	/**
+	 * @param courseCode:课程代码
+	 * @return 返回5位的课程代码(自动补全)
+	 */
+	private String getCourseCode(String courseCode) {
+		if (StringHelper.isNotEmpty(courseCode) && courseCode.trim().length() < 5) {
+			String fillZero = "";
+			for (int i = 0; i < 5 - courseCode.trim().length(); i++) {
+				fillZero += "0";
+			}
+			courseCode = fillZero + courseCode;
+		}
+		return (courseCode != null ? courseCode.trim() : "");
+	}
+
+	/**
+	 * 表头信息
+	 */
+	private List<List<Object>> getTitle(List<List<String>> uploadList) {
+		List<List<Object>> errList = new ArrayList<>();
+		if (uploadList != null && uploadList.size() > 0) {
+			List<String> data = uploadList.get(0);
+			List<Object> list = getOrigData(data, 10);
+			list.add("错误提示");
+			errList.add(list);
+		}
+		return errList;
+	}
+
+	/**
+	 * @param data:
+	 *            原始数据
+	 * @param num
+	 *            :数目大小
+	 * 
+	 */
+	private List<Object> getOrigData(List<String> data, int num) {
+		List<Object> result = new ArrayList<Object>();
+		for (int i = 0; i < num; i++) {
+			result.add(data.get(i));
+		}
+		return result;
+	}
+
+	/**
+	 * @param errList:错误数据
+	 *            生成临时文件-原始文件名(登录账号)
+	 */
+	private String createTempFile(MultipartFile file, List<List<Object>> errList, String login_name) {
+		String fullFileName = file.getOriginalFilename();
+		fullFileName = fullFileName.replaceAll("\\+", "、");
+		fullFileName = fullFileName.replaceAll("\\&", "、");
+
+		String fileName = fullFileName.substring(0, fullFileName.lastIndexOf("."));
+		String suffix = fullFileName.substring(fullFileName.lastIndexOf("."));
+		File serverFile = new File(
+				SysConst.getAppConfig().getDownloadTemp() + fileName + "(" + login_name + ")" + suffix);
+		FileOutputStream outputStream = null;
+		try {
+			XSSFWorkbook wb = Excel2007Writer.createExcel(errList);
+			outputStream = new FileOutputStream(serverFile);
+			wb.write(outputStream);
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if (outputStream != null) {
+				try {
+					outputStream.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		return serverFile.getAbsolutePath();
+	}
+
+	/**
+	 * 更新启用批次
+	 * 
+	 * @param id
+	 *            :pl_course_textbook中的主键ID
+	 */
+	@RequestMapping("pl/plTextbookPre/updateBatch")
+	public Ajax updateTextbookBatche(Integer id, Integer exam_time_id) {
+		this.getFrameOptr();
+		this.courseTextbookService.updateTextbookBatch(id, exam_time_id);
+		return new Ajax();
+	}
+
+	/**
+	 * 命题-导出教材dbf
+	 */
+	@RequestMapping("pl/plTextbookPre/exprotDbf")
+	public void export(Integer exam_year) {
+		this.getFrameOptr();
+		String fileName = "教材信息表.dbf";
+		this.downloadFile(this.plTextbookService.exportDbf(exam_year), fileName, true);
+	}
+
+	/**
+	 * 命题-导出教材配置表dbf
+	 */
+	@RequestMapping("pl/plTextbookPre/exportCtbook")
+	public void exportCtbook(Integer exam_year) {
+		this.getFrameOptr();
+		String fileName = "教材配置表.dbf";
+		this.downloadFile(this.courseTextbookService.exportCtbook(exam_year), fileName, true);
+	}
+
+}

+ 88 - 45
ses-manage/src/main/java/cn/hmsoft/ses/control/std/StdBlackListControl.java

@@ -1,13 +1,19 @@
 package cn.hmsoft.ses.control.std;
 
-import org.apache.commons.lang3.StringUtils;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
 import cn.hmsoft.frame.control.FrameControl;
 import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.ses.common.constants.SysConst;
 import cn.hmsoft.ses.data.model.std.StdBlackList;
+import cn.hmsoft.ses.data.model.std.StdBreakDisciplineFile;
 import cn.hmsoft.ses.service.iface.std.IStdBlackListService;
 import cn.hmsoft.web.entity.Ajax;
 
@@ -21,50 +27,87 @@ import cn.hmsoft.web.entity.Ajax;
  * @Company: www.hmsoft.cn
  */
 @RestController
-public class StdBlackListControl extends FrameControl{
+public class StdBlackListControl extends FrameControl {
+
+	@Autowired
+	private IStdBlackListService stdBlackListService;
+
+	@RequestMapping("std/stdBlackList/page")
+	public Ajax pageStdBlackList(String query, Integer limit, Integer start, String order, String type,
+			StdBlackList stdblackList) {
+		if (StringHelper.isEmpty(order)) {
+			// TODO 修改为排序字段
+			// order = "1";
+		}
+		return new Ajax(this.stdBlackListService.pageStdBlackList(query, start, limit, order, type, stdblackList));
+	}
+
+	@RequestMapping("std/stdBlackList/add")
+	public Ajax addStdBlackList(StdBlackList stdBlackList) {
+		this.getFrameOptr();
+		if (null == stdBlackList.getAudit_status()) {
+			stdBlackList.setAudit_status(2);
+		}
+
+		this.stdBlackListService.insert(stdBlackList);
+		return new Ajax();
+	}
+
+	@RequestMapping("std/stdBlackList/edit")
+	public Ajax editStdBlackList(StdBlackList stdBlackList) {
+		this.getFrameOptr();
+		this.stdBlackListService.edit(stdBlackList);
+		return new Ajax();
+	}
+
+	@RequestMapping("std/stdBlackList/delete")
+	public Ajax deleteStdBlackList(Integer[] ids) {
+		this.getFrameOptr();
+		for (Integer id : ids) {
+			this.stdBlackListService.delete(id);
+		}
+		return new Ajax();
+	}
+
+	@RequestMapping("std/stdBlackList/get")
+	public Ajax getStdBlackList(Integer id) {
+		this.getFrameOptr();
+		return new Ajax(this.stdBlackListService.find(id));
+	}
+
+	@RequestMapping("std/stdBlackList/queryStdBreakDisciplineFile")
+	public Ajax queryStdBreakDisciplineFile(String ticket_no, Integer exam_time_id, String file_type) {
+		List<StdBreakDisciplineFile> stdBreakDisciplineFileList = new ArrayList<StdBreakDisciplineFile>();
+		StdBreakDisciplineFile stdBreakDisciplineFile = this.stdBlackListService.queryStdBreakDisciplineFile(ticket_no, exam_time_id, file_type);
+		if(null != stdBreakDisciplineFile){
+			stdBreakDisciplineFileList.add(stdBreakDisciplineFile);
+		}
+		
+		return new Ajax(stdBreakDisciplineFileList);
+	}
+
+	@RequestMapping("std/stdBlackList/download")
+	public void download(String ticket_no, Integer exam_time_id, String file_type) {
+		StdBreakDisciplineFile recordFile = this.stdBlackListService.queryStdBreakDisciplineFile(ticket_no,
+				exam_time_id, file_type);
+		String fileName = "";
+		String fileUrl = recordFile.getFile_url();
+		if (fileUrl != null) {
+			fileName = fileUrl.substring(fileUrl.lastIndexOf("\\") + 1, fileUrl.length()).toLowerCase();
+		}
+		String filePath = SysConst.getAppConfig().getUploadBase() + recordFile.getFile_url();
+		this.downloadFile(new File(filePath), fileName);
+	}
 
-    @Autowired
-    private IStdBlackListService stdBlackListService;
+	@RequestMapping("std/stdBlackList/upload")
+	public Ajax upload(MultipartFile file, StdBreakDisciplineFile stdBreakDisciplineFile) {
+		this.stdBlackListService.uploadFile(file, stdBreakDisciplineFile);
+		return new Ajax();
+	}
 	
-    @RequestMapping("std/stdBlackList/page")
-    public Ajax pageStdBlackList(String query, Integer limit, Integer start, String order, String type, StdBlackList stdblackList) {
-        if (StringHelper.isEmpty(order)) {
-        	//TODO 修改为排序字段
-//        	order = "1";
-        }
-        return new Ajax(this.stdBlackListService.pageStdBlackList(query, start, limit, order, type ,stdblackList));
-    }
-    
-    @RequestMapping("std/stdBlackList/add")
-    public Ajax addStdBlackList(StdBlackList stdBlackList) {
-    	this.getFrameOptr();
-    	if(null == stdBlackList.getAudit_status()){
-    		stdBlackList.setAudit_status(2);
-    	}
-    	
-        this.stdBlackListService.insert(stdBlackList);
-        return new Ajax();
-    }
-    
-    @RequestMapping("std/stdBlackList/edit")
-    public Ajax editStdBlackList(StdBlackList stdBlackList) {
-    	this.getFrameOptr();
-        this.stdBlackListService.edit(stdBlackList);
-        return new Ajax();
-    }
-    
-    @RequestMapping("std/stdBlackList/delete")
-    public Ajax deleteStdBlackList(Integer[] ids) {
-    	this.getFrameOptr();
-    	for (Integer id : ids) {
-	        this.stdBlackListService.delete(id);
-    	}
-    	return new Ajax();
-    }   
-    
-    @RequestMapping("std/stdBlackList/get")
-    public Ajax getStdBlackList(Integer id) {
-    	this.getFrameOptr();
-    	return new Ajax(this.stdBlackListService.find(id));
-    }    
+	@RequestMapping("std/stdBlackList/deleteFile")
+	public Ajax deleteFile(String ticket_no, Integer exam_time_id, String file_type) {
+		this.stdBlackListService.deleteStdBreakDisciplineFile(ticket_no, exam_time_id, file_type);
+		return new Ajax();
+	}
 }

+ 48 - 0
ses-manage/src/main/java/cn/hmsoft/ses/control/std/StdBreakDisciplineControl.java

@@ -43,6 +43,7 @@ import cn.hmsoft.jdbc.entity.Pager;
 import cn.hmsoft.office.excel.Excel2007Writer;
 import cn.hmsoft.ses.common.constants.SysConst;
 import cn.hmsoft.ses.data.model.pl.PlExamTime;
+import cn.hmsoft.ses.data.model.pl.PlMajorApply;
 import cn.hmsoft.ses.data.model.std.StdBreakDiscipline;
 import cn.hmsoft.ses.service.iface.pl.IPlExamTimeService;
 import cn.hmsoft.ses.service.iface.std.IStdBreakDisciplineService;
@@ -283,6 +284,53 @@ public class StdBreakDisciplineControl extends FrameControl {
 		File file = new File(filePath);
 		this.downloadFile(file, file.getName());
 	}
+	
+	/**
+	 * 下载.
+	 */
+	@RequestMapping("std/stdBreakDiscipline/downloadFile")
+	public void download(Integer id) {
+		StdBreakDiscipline stdBreakDiscipline = this.stdBreakDisciplineService.find(id);
+		File file = new File(stdBreakDiscipline.getFile_path());
+		this.downloadFile(file, file.getName());
+	}
+	
+	@RequestMapping("std/stdBreakDiscipline/uploadFile")
+    public Ajax uploadFile(Integer exam_time_id, MultipartFile file) {
+    	Ajax ajax = new Ajax();
+    	
+    	String extension = FilenameUtils.getExtension(file.getOriginalFilename());
+		// 转换小写
+		extension = extension.toLowerCase();
+		
+		// 校验文件类型
+		if (!"jpg".equals(extension) && !"jpeg".equals(extension) && !"png".equals(extension)&& !"gif".equals(extension)&& !"bmp".equals(extension)&&!"xlsx".equals(extension) && !"xls".equals(extension) && !"doc".equals(extension)&& !"docx".equals(extension)&& !"pdf".equals(extension) && !"txt".equals(extension)&& !"zip".equals(extension)) {
+			ajax.setSuccess(false);
+			ajax.setErrorCode(-1);
+			ajax.setErrorMsg("上传文件必须是JPG/JPEG/PNG/xls/xlsx/doc/docx/pdf/txt/zip格式!");
+			return ajax;
+		}
+		
+    	String fileDir = SysConst.getStdBreakDisciplinePath(exam_time_id);
+		File dir = new File(fileDir);
+		if (!dir.exists()) {
+			dir.mkdirs();
+		}
+		File desFile = new File(fileDir + file.getOriginalFilename());
+		try {
+			file.transferTo(desFile);
+			Map<String, String> map = new HashMap<String, String>();
+			map.put("file_path", desFile.toString());
+			map.put("file_name", file.getOriginalFilename());
+			ajax.setMap(map);
+		} catch (IllegalStateException e) {
+			LogHelper.error(e);
+		} catch (IOException e) {
+			LogHelper.error(e);
+		}
+    	return ajax;
+    }
+    
 
 	@RequestMapping("std/stdBreakDiscipline/upload")
 	public Ajax unifiedScoreUpload(Integer exam_time_id, ImportFileEntity entity, MultipartFile file) {

+ 10 - 2
ses-manage/src/main/java/cn/hmsoft/ses/control/std/StdRegInfoControl.java

@@ -221,9 +221,9 @@ public class StdRegInfoControl extends FrameControl {
 
 	@RequestMapping("/std/stdRegInfo/page")
 	public Ajax pageRegInfo(String query, Integer limit, Integer start, String order, String type,
-			StdRegInfo stdRegInfo) {
+			StdRegInfo stdRegInfo,Integer real_data) {
 		FrameOptr optr = RequestContextUtil.currentLoginUser();
-		return new Ajax(this.stdRegInfoService.pageStdRegInfo(query, start, limit, order, type, stdRegInfo, optr));
+		return new Ajax(this.stdRegInfoService.pageStdRegInfo(query, start, limit, order, type, stdRegInfo, optr, real_data));
 	}
 	
 	
@@ -2547,6 +2547,14 @@ public class StdRegInfoControl extends FrameControl {
 		List<PlMajor> majorArray = this.plMajorService.queryMajorByStatus(1);
 		return new Ajax(majorArray);
 	}
+	
+	@RequestMapping("std/stdRegInfo/queryOpenMajorAndStdMajor")
+	public Ajax queryOpenMajorAndStdMajor(Integer major_id) {
+		// 获取的开考专业和考生专业
+		List<PlMajor> majorArray = this.plMajorService.queryOpenMajorAndStdMajor(major_id);
+		return new Ajax(majorArray);
+	}
+	
 
 	/**
 	 * @param cert_no:证件号码

+ 24 - 0
ses-manage/src/main/java/cn/hmsoft/ses/control/std/StdTicketControl.java

@@ -112,6 +112,30 @@ public class StdTicketControl extends FrameControl {
 		return ajax;
 
 	}
+	
+	/**
+	 * 准考证生成
+	 * 
+	 * @param exam_time_id
+	 * @return
+	 */
+	@RequestMapping("std/stdTicket/buildTicketForComputerTest")
+	public Ajax buildTicketForComputerTest(Integer exam_time_id, boolean again) {
+		Ajax ajax = new Ajax();
+		FrameOptr user = this.getFrameOptr();
+		CfOrganization org = this.cOrganizationService.find(user.getOptr_dept());
+
+		if (org.getOrg_type() != OrgType.PROVINCE_EXAM.ordinal()) {
+			ajax.setSuccess(false);
+			ajax.setErrorMsg("只允许省级账号操作。");
+			return ajax;
+		}
+
+		this.stdTicketService.buildTicketForComputerTest(exam_time_id, again);
+
+		return ajax;
+
+	}
 
 	/**
 	 * 准考证下载PDF

+ 18 - 8
ses-manage/src/main/java/cn/hmsoft/ses/control/sys/SysAppNewsControl.java

@@ -1,11 +1,15 @@
 package cn.hmsoft.ses.control.sys;
 
+import java.util.LinkedHashMap;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import cn.hmsoft.helper.StringHelper;
 import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import cn.hmsoft.jdbc.entity.QueryOrderType;
 import cn.hmsoft.ses.data.model.sys.SysAppNews;
 import cn.hmsoft.ses.service.iface.sys.ISysAppNewsService;
 import cn.hmsoft.web.control.AjaxControl;
@@ -28,24 +32,30 @@ public class SysAppNewsControl extends AjaxControl {
 
 	@RequestMapping("sys/sysAppNews/page")
 	public Ajax page(String query, Integer limit, Integer start, String order, String type) {
+		Pager page = null;
 		if (StringHelper.isEmpty(order)) {
-			order = "PUBLISHED_AT";
-			type = "desc";
+			LinkedHashMap<String, QueryOrderType> fields = new LinkedHashMap<String, QueryOrderType>();
+			fields.put("PUBLISHED_AT", QueryOrderType.DESC);
+			page = this.sysAppNewsService.page(query, start, limit, new QueryOrder(fields));
+		}else{
+			page = this.sysAppNewsService.page(query, start, limit, this.getQueryOrder(order, type));
 		}
 		
-		Pager page = this.sysAppNewsService.page(query, start, limit, this.getQueryOrder(order, type));
 		return new Ajax(page);
 	}
 	
 	@RequestMapping("sys/sysAppNews/pageForHome")
 	public Ajax pageForHome(String query, Integer limit, Integer start, String order, String type) {
+		Pager page = null;
 		if (StringHelper.isEmpty(order)) {
-			order = "PUBLISHED_AT";
-			type = "desc";
+			LinkedHashMap<String, QueryOrderType> fields = new LinkedHashMap<String, QueryOrderType>();
+			fields.put("topup", QueryOrderType.DESC);
+			fields.put("PUBLISHED_AT", QueryOrderType.DESC);
+			page = this.sysAppNewsService.page(query, start, limit, new QueryOrder(fields));
+		}else{
+			page = this.sysAppNewsService.page(query, start, limit, this.getQueryOrder(order, type));
 		}
-		
-		//Pager page = this.sysAppNewsService.page(query, start, limit, this.getQueryOrder(order, type));
-		return new Ajax();
+		return new Ajax(page.getRecords());
 	}
 
 	@RequestMapping("sys/sysAppNews/add")

+ 11 - 0
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/by/ByApplyDao.java

@@ -43,6 +43,8 @@ public class ByApplyDao extends PlatformDaoSupport<ByApply> {
 		sql.append("	   (select cf.org_name from pl_std_record sr,cf_organization cf where cf.id=sr.join_school_id and sr.status=3 and sr.std_type=1 and sr.std_reg_id=p.std_id and rownum=1) join_org_name,  			");
 		sql.append("	   m.major_name,m.major_code,m.major_level,o.org_code,o.org_name,decode(p.std_source,1,nvl(o3.org_name,o.org_name),3,o.org_name,nvl(o3.org_name,o.org_name)) school_name,  			");
 		sql.append("	   t.auth_remark,to_char(p.apply_date,'yyyyMM') year_code,");
+		sql.append(" (select t.exam_year || '年' || decode(t.exam_month,'4','06月','10','12月', t.exam_month || '月') from pl_exam_time t where t.id=p.exam_time_id) exam_year_month, ");
+
 		sql.append("	   p.*  			");
 		sql.append(" from by_apply p                                                                        		");
 		sql.append("	left join by_time_config g on g.id=p.by_time_config_id										");
@@ -554,4 +556,13 @@ public class ByApplyDao extends PlatformDaoSupport<ByApply> {
 		this.updateBySql(sql.toString(),id);
 	}
 	
+	public List<ByApply> queryIsAlreadyBy(Integer std_id,Integer major_id) {
+		StringBuilder sql = new StringBuilder();
+		sql.append(" select * from by_apply a where a.status in (3,5) ");
+		sql.append(" and a.std_id in (select id from std_reg_info ss where ss.cert_no_en in(select s.cert_no_en from std_reg_info s where s.id=?)) ");
+		sql.append(" and (a.major_id=? or exists (select * from pl_major_old_new mo where mo.new_major_id=? and mo.old_major_id=a.major_id)) ");
+		
+		return this.listBySql(sql.toString(), std_id,major_id,major_id);
+	}
+	
 }

+ 2 - 2
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/by/ByCertificateDao.java

@@ -88,7 +88,7 @@ public class ByCertificateDao extends PlatformDaoSupport<ByCertificate> {
 
 	public List<Map<String, Object>> getAllCertificateData(String query, QueryOrder queryOrder, Integer status, Integer examTimeId,String startTime,String endTime) {
 		StringBuilder sql = new StringBuilder();
-		sql.append("select bc.std_id,bc.ticket_no,bc.std_name,bc.cert_no,bc.diaplma_no,bc.major major_name,     ");
+		sql.append("select bc.app_id,bc.std_id,bc.ticket_no,bc.std_name,bc.cert_no,bc.diaplma_no,bc.major major_name,     ");
 		sql.append("	bc.major_level,bc.by_date app_apply_date,   ");
 		sql.append("    bc.by_photo,bc.by_photo_path,to_char(bc.apply_date,'yyyy-mm-dd')	apply_date,org.org_name,bc.school school_name,	 ");
 		sql.append(" (select to_char(t.by_date,'yyyy-mm-dd') from by_time_config t where t.exam_time_id=bc.exam_time_id and rownum=1) config_by_date ");
@@ -125,7 +125,7 @@ public class ByCertificateDao extends PlatformDaoSupport<ByCertificate> {
 	
 	public List<Map<String, Object>> getCertificateData(String ids,QueryOrder queryOrder) {
 		StringBuilder sql = new StringBuilder();
-		sql.append("select bc.std_id,bc.ticket_no,bc.std_name,bc.cert_no,bc.diaplma_no,bc.major major_name,     ");
+		sql.append("select bc.app_id,bc.std_id,bc.ticket_no,bc.std_name,bc.cert_no,bc.diaplma_no,bc.major major_name,     ");
 		sql.append("	bc.major_level,bc.by_date app_apply_date,   ");
 		sql.append("    bc.by_photo,bc.by_photo_path,to_char(bc.apply_date,'yyyy-mm-dd')	apply_date,org.org_name,bc.school school_name,	 ");
 		sql.append(" (select to_char(t.by_date,'yyyy-mm-dd') from by_time_config t where t.exam_time_id=bc.exam_time_id and rownum=1) config_by_date ");

+ 2 - 2
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/by/ByCourseReplDetailDao.java

@@ -45,10 +45,10 @@ public class ByCourseReplDetailDao extends PlatformDaoSupport<ByCourseReplDetail
 			sb.append("  and d.major_id = ").append(major_id);
 		}
 		if(StringHelper.isNotEmpty(old_course_id)) {
-			sb.append(" and d.old_course_ids = ").append(old_course_id);
+			sb.append(" and d.old_course_ids ='").append(old_course_id).append("'");
 		}
 		if(StringHelper.isNotEmpty(repl_course_id)) {
-			sb.append(" and d.repl_course_ids = ").append(repl_course_id);
+			sb.append(" and d.repl_course_ids ='").append(repl_course_id).append("'");
 		}
 		if (StringHelper.isEmpty(query)) {
 			return this.pageMapBySql(queryOrder, start, limit, sb.toString());

+ 106 - 0
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/by/ByCourseReplDetailPreDao.java

@@ -0,0 +1,106 @@
+package cn.hmsoft.ses.data.dao.by;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import cn.hmsoft.ses.data.model.by.ByCourseReplDetailPre;
+
+/**
+ * 课程顶替详情表 数据库处理.
+ * 
+ * @author: haoguanghui
+ * @date: 2019-01-07 16:16:11
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Repository
+public class ByCourseReplDetailPreDao extends PlatformDaoSupport<ByCourseReplDetailPre> {
+
+	/**
+	 * 分页查询课程顶替计划管理
+	 */
+	public Pager page(String query, Integer start, Integer limit, Integer major_id, Integer old_course_id,
+			Integer repl_course_id, QueryOrder queryOrder) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(" select d.id,                                                                   ");
+		sb.append("          d.major_id,                                                           ");
+		sb.append("          d.repl_course_names,                                                  ");
+		sb.append("          d.old_course_names,                                                   ");
+		sb.append("          m.year,                                                               ");
+		sb.append("          m.major_code,                                                         ");
+		sb.append("          m.major_name,                                                         ");
+		sb.append("          m.major_level,                                                        ");
+		sb.append("          m.total_credits,                                                      ");
+		sb.append("          r.remark                                                              ");
+		sb.append("     from by_course_repl_detail_pre d, by_course_repl_rule r, pl_major_pre m            ");
+		sb.append("    where d.major_id = m.id                                                     ");
+		sb.append("      and d.rule_id = r.id                                                      ");
+		if (StringHelper.isNotEmpty(major_id)) {
+			sb.append("  and d.major_id = ").append(major_id);
+		}
+		if (StringHelper.isNotEmpty(old_course_id)) {
+			sb.append(" and d.old_course_ids ='").append(old_course_id).append("'");
+		}
+		if (StringHelper.isNotEmpty(repl_course_id)) {
+			sb.append(" and d.repl_course_ids ='").append(repl_course_id).append("'");
+		}
+		if (StringHelper.isEmpty(query)) {
+			return this.pageMapBySql(queryOrder, start, limit, sb.toString());
+		} else {
+			String value = this.generateLikeParamter(query);
+			sb.append(
+					" and (m.major_code like ? or m.major_name like ? or d.old_course_names like ? or d.repl_course_names like ?)");
+			return this.pageMapBySql(queryOrder, start, limit, sb.toString(), value, value, value, value);
+		}
+	}
+
+	/**
+	 * 新增课程顶替详情-判断是否已经存在
+	 */
+	public ByCourseReplDetailPre findCourseReplDetail(ByCourseReplDetailPre detail) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select *                                    ");
+		sb.append("    from by_course_repl_detail_pre d              ");
+		sb.append("   where d.major_id = ?                       ");
+		sb.append("     and d.repl_course_ids = ?                ");
+		sb.append("     and d.repl_course_names = ?              ");
+		sb.append("     and d.old_course_ids = ?                 ");
+		sb.append("     and d.old_course_names = ?               ");
+		sb.append("     and d.rule_id = ?                        ");
+		sb.append("     and d.is_all = ?                         ");
+		sb.append("     and d.status = ?                         ");
+		return this.findBySql(sb.toString(), detail.getMajor_id(), detail.getRepl_course_ids(),
+				detail.getRepl_course_names(), detail.getOld_course_ids(), detail.getOld_course_names(),
+				detail.getRule_id(), detail.getIs_all(), detail.getStatus());
+	}
+
+	/**
+	 * @return 导出课程顶替详情
+	 */
+	public List<ByCourseReplDetailPre> listCourseReplDetail() {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select d.id,                                                                ");
+		sb.append("         d.major_id,                                                          ");
+		sb.append("         d.repl_course_names,                                                 ");
+		sb.append("         d.old_course_names,                                                  ");
+		sb.append("         m.year,                                                              ");
+		sb.append("         m.major_code,                                                        ");
+		sb.append("         m.major_name,                                                        ");
+		sb.append("         t.dict_text as major_level,                                          ");
+		sb.append("         m.total_credits,                                                     ");
+		sb.append("         r.remark                                                             ");
+		sb.append("    from by_course_repl_detail_pre d, by_course_repl_rule r, pl_major_pre m           ");
+		sb.append("    left join frame_dict t                                                    ");
+		sb.append("      on (t.dict_name = 'MajorLevel' and m.major_level = t.dict_value)        ");
+		sb.append("   where d.major_id = m.id                                                    ");
+		sb.append("     and d.rule_id = r.id                                                     ");
+		sb.append("   order by m.year desc, m.major_code asc                                     ");
+		return this.listBySql(sb.toString());
+	}
+}

+ 9 - 4
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/by/ByDiaplmaDao.java

@@ -190,7 +190,7 @@ public class ByDiaplmaDao extends PlatformDaoSupport<ByDiaplma> {
 		return this.listMapBySql(sql.toString());
 	}
 	
-	private String byNameListSql(Integer org_id, Integer school_id, Integer majorId, String query) {
+	private String byNameListSql(Integer org_id, Integer school_id, Integer majorId, String query,Integer status) {
 		StringBuilder sql = new StringBuilder();
 		sql.append("     select                                                                                       ");
 		sql.append("		 b.major_id,b.std_id,b.diaplma_no,'(' || m.major_code || ')' || m.major_name major_name,  ");
@@ -210,7 +210,12 @@ public class ByDiaplmaDao extends PlatformDaoSupport<ByDiaplma> {
 		sql.append("    left join frame_dict na on na.dict_name='std_nation'                                          ");
 		sql.append("                               and na.dict_value=b.nation                                         ");
 		sql.append("    left join pl_major m on m.id=b.major_id														  ");
-		sql.append(" where b.exam_time_id=?	and b.status in (2,3,5)							  					      ");
+		sql.append(" where b.exam_time_id=?								  					      ");
+		if (status != null) {
+			sql.append(" and b.status=").append(status);
+		}else{
+			sql.append(" and b.status in (2,3,5) ");
+		}
 		
 		if (org_id != null) {
 			sql.append(" and b.org_id=").append(org_id);
@@ -236,9 +241,9 @@ public class ByDiaplmaDao extends PlatformDaoSupport<ByDiaplma> {
 	}
 
 	//毕业生名册分页
-	public Pager nameListPage(String query, Integer exam_time_id, Integer org_id, Integer school_id, Integer major_id, Integer std_source, Integer start,
+	public Pager nameListPage(String query, Integer exam_time_id, Integer org_id, Integer school_id, Integer major_id, Integer std_source,Integer status, Integer start,
 			Integer limit, QueryOrder queryOrder) {
-		return this.pageMapBySql(queryOrder, start, limit, byNameListSql(org_id, school_id, major_id, query), exam_time_id);
+		return this.pageMapBySql(queryOrder, start, limit, byNameListSql(org_id, school_id, major_id, query,status), exam_time_id);
 	}
 	
 	/**

+ 7 - 2
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/by/ByScoreDao.java

@@ -408,7 +408,7 @@ public class ByScoreDao extends PlatformDaoSupport<ByScore> {
 	 * @param org_id
 	 * @return
 	 */
-	public List<Map<String,Object>> getMajorScoreforNameList(Integer exam_time_id, Integer major_id, Integer org_id,Integer schoolId) {
+	public List<Map<String,Object>> getMajorScoreforNameList(Integer exam_time_id, Integer major_id, Integer org_id,Integer schoolId,Integer status) {
 		
 		StringBuilder sql = new StringBuilder();
 		sql.append("select                                                              ");
@@ -442,7 +442,12 @@ public class ByScoreDao extends PlatformDaoSupport<ByScore> {
 		sql.append("      left join by_score s on (b.id=s.by_apply_id and s.status=1 and s.score is not null)");
 		sql.append("      where b.std_id=r.id");
 		sql.append("      and b.exam_time_id=? ");
-		sql.append("      and b.status in (2,3,5,7,8)");
+		if (status != null) {
+			sql.append("      and b.status=").append(status);
+		}else{
+			sql.append("      and b.status in (2,3,5,7,8)");
+		}
+		
 		//sql.append("      and s.status=1");
 		//sql.append("      and s.score is not null ");
 		if (org_id != null) {

+ 17 - 6
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/kj/KjCollegeScoreDetailDao.java

@@ -362,7 +362,9 @@ public class KjCollegeScoreDetailDao extends PlatformDaoSupport<KjCollegeScoreDe
 		sql.append("       else '6:4'");
 		sql.append("       end scale,");
 		sql.append("       '衔接合成' rec_type,c.school_id,c.std_reg_id,c.course_id,");
-		sql.append(" (select distinct o.org_code||'-'||o.org_name from  kj_college_score_detail d,cf_organization o where o.id=d.join_school_id and d.std_reg_id=c.std_reg_id and d.course_id=c.course_id and d.score_type=2 and d.status=3 and d.score_source=0 and rownum=1)join_school,");
+		sql.append(" (select distinct o.org_code||'-'||o.org_name from  pl_std_record d,cf_organization o where o.id=d.join_school_id and d.school_id=c.school_id and d.std_reg_id=c.std_reg_id and d.status=3 and rownum=1)join_school,");
+
+		//sql.append(" (select distinct o.org_code||'-'||o.org_name from  kj_college_score_detail d,cf_organization o where o.id=d.join_school_id and d.std_reg_id=c.std_reg_id and d.course_id=c.course_id and d.score_type=2 and d.status=3 and d.score_source=0 and rownum=1)join_school,");
 		sql.append(" (select m.major_code||'-'||m.major_name from pl_major m where m.id=c.major_id)major_name,");
 		sql.append(" (select max(kd.score) from kj_college_score_detail kd where kd.std_reg_id=u.std_reg_id and kd.course_id=u.course_id and kd.status=3 and kd.score_type=2 and kd.score_source=0) score");
 		sql.append("    from kj_unified_score_detail u");
@@ -378,7 +380,9 @@ public class KjCollegeScoreDetailDao extends PlatformDaoSupport<KjCollegeScoreDe
 			sql.append(" and c.school_id=").append(schoolId);
 		}
 		if (joinSchoolId != null) {
-			sql.append(" and c.join_school_id=").append(joinSchoolId);
+			//sql.append(" and c.join_school_id=").append(joinSchoolId);
+			sql.append(" and exists (select * from pl_std_record ss where ss.school_id=c.school_id and ss.std_reg_id=c.std_reg_id and ss.join_school_id=").append(joinSchoolId).append(") ");
+
 		}
 		if (majorId != null) {
 			sql.append(" and c.major_id=").append(majorId);
@@ -396,7 +400,9 @@ public class KjCollegeScoreDetailDao extends PlatformDaoSupport<KjCollegeScoreDe
 		sql.append("     (select max(re.year_code) from pl_std_record re where re.std_type = 1 and re.std_reg_id = u.std_reg_id) std_rec_year_code,");
 		sql.append("     '7:3' scale,");
 		sql.append("     '网考合成' rec_type,c.school_id,c.std_reg_id,c.course_id,");
-		sql.append(" (select distinct o.org_code||'-'||o.org_name from  kj_college_score_detail d,cf_organization o where o.id=d.join_school_id and d.std_reg_id=c.std_reg_id and d.course_id=c.course_id and d.score_type=1 and d.status=3 and d.score_source=0 and rownum=1)join_school,");
+		sql.append(" (select distinct o.org_code||'-'||o.org_name from  pl_std_record d,cf_organization o where o.id=d.join_school_id and d.school_id=c.school_id and d.std_reg_id=c.std_reg_id and d.status=3 and rownum=1)join_school,");
+
+		//sql.append(" (select distinct o.org_code||'-'||o.org_name from  kj_college_score_detail d,cf_organization o where o.id=d.join_school_id and d.std_reg_id=c.std_reg_id and d.course_id=c.course_id and d.score_type=1 and d.status=3 and d.score_source=0 and rownum=1)join_school,");
 		sql.append(" (select m.major_code||'-'||m.major_name from pl_major m where m.id=c.major_id)major_name,");
 		sql.append(" (select max(kd.score) from kj_college_score_detail kd where kd.std_reg_id=u.std_reg_id and kd.course_id=u.course_id and kd.status=3 and kd.score_type=1 and kd.score_source=0) score");
 		sql.append("  from kj_unified_score_detail u");
@@ -412,7 +418,9 @@ public class KjCollegeScoreDetailDao extends PlatformDaoSupport<KjCollegeScoreDe
 			sql.append("    and c.school_id=").append(schoolId);
 		}
 		if (joinSchoolId != null) {
-			sql.append(" and c.join_school_id=").append(joinSchoolId);
+			//sql.append(" and c.join_school_id=").append(joinSchoolId);
+			sql.append(" and exists (select * from pl_std_record ss where ss.school_id=c.school_id and ss.std_reg_id=c.std_reg_id and ss.join_school_id=").append(joinSchoolId).append(") ");
+
 		}
 		if (majorId != null) {
 			sql.append(" and c.major_id=").append(majorId);
@@ -430,7 +438,8 @@ public class KjCollegeScoreDetailDao extends PlatformDaoSupport<KjCollegeScoreDe
 		sql.append("     null std_rec_year_code,");
 		sql.append("     '100%' scale,");
 		sql.append("     '百分百合成' rec_type,c.school_id,c.std_reg_id,c.course_id,");
-		sql.append(" (select distinct o.org_code||'-'||o.org_name from  kj_college_score_detail d,cf_organization o where o.id=d.join_school_id and d.std_reg_id=c.std_reg_id and d.course_id=c.course_id and d.score_type in(1,2) and d.status=3 and d.score_source=0 and rownum=1)join_school,");
+		sql.append(" (select distinct o.org_code||'-'||o.org_name from  pl_std_record d,cf_organization o where o.id=d.join_school_id and d.school_id=c.school_id and d.std_reg_id=c.std_reg_id and d.status=3 and rownum=1)join_school,");
+		//sql.append(" (select distinct o.org_code||'-'||o.org_name from  kj_college_score_detail d,cf_organization o where o.id=d.join_school_id and d.std_reg_id=c.std_reg_id and d.course_id=c.course_id and d.score_type in(1,2) and d.status=3 and d.score_source=0 and rownum=1)join_school,");
 		sql.append(" (select m.major_code||'-'||m.major_name from pl_major m where m.id=c.major_id)major_name,");
 		sql.append(" (select max(kd.score) from kj_college_score_detail kd where kd.std_reg_id=c.std_reg_id and kd.course_id=c.course_id and kd.status=3 and kd.score_type in(1,2) and kd.score_source=0) score");
 		sql.append("    from kj_college_score_detail c ");
@@ -444,7 +453,9 @@ public class KjCollegeScoreDetailDao extends PlatformDaoSupport<KjCollegeScoreDe
 			sql.append("    and c.school_id=").append(schoolId);
 		}
 		if (joinSchoolId != null) {
-			sql.append(" and c.join_school_id=").append(joinSchoolId);
+			//sql.append(" and c.join_school_id=").append(joinSchoolId);
+			sql.append(" and exists (select * from pl_std_record ss where ss.school_id=c.school_id and ss.std_reg_id=c.std_reg_id and ss.join_school_id=").append(joinSchoolId).append(") ");
+
 		}
 		if (majorId != null) {
 			sql.append(" and c.major_id=").append(majorId);

+ 125 - 4
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/kj/KjUnifiedScoreDetailDao.java

@@ -239,6 +239,127 @@ public class KjUnifiedScoreDetailDao extends PlatformDaoSupport<KjUnifiedScoreDe
 		sql.append("	   to_number(to_char(sysdate,'yyyy'))-to_number(to_char(detail.std_birth,'yyyy')) std_age,");
 		sql.append("       detail.address, 	detail.std_source																      ");
 		sql.append("  from (                                                                   		 ");
+		
+		sql.append("  select               ");
+		sql.append("					b.diaplma_no,												 ");
+		sql.append("					b.pre_edu,													 ");
+		sql.append("					b.political,												 ");
+		sql.append("					b.nation,												 	 ");
+		sql.append("					b.address,												 	 ");
+		sql.append("					b.std_sex,												 	 ");
+		sql.append("					b.std_birth,												 ");
+		sql.append("                    b.course_id,                                                 ");
+		sql.append("                    b.origin_score,                                              ");
+		sql.append("                    b.detail_id,                                              ");
+		sql.append("                    b.final_score,                                               ");
+		sql.append("                    b.std_reg_id,                                                ");
+		sql.append("                    b.major_id,                                                  ");
+		sql.append("                    b.apply_id, b.std_source,                                              ");
+		sql.append("                    b.is_passed,                                               ");
+		sql.append("                    b.score_source,                                                ");
+		sql.append("                    '' remark,                                                   ");
+		sql.append("					null score_type                                              ");
+		
+		sql.append("   from kj_unified_score_detail_201910 b where 1=1              ");
+
+		
+		if(StringUtils.isEmpty(diaplma_no)){
+			sql.append("                    and b.exam_time_id=").append(exam_time_id);
+			sql.append("                    and b.status in (2,3,5)	 				 ");//终审通过待发放
+			if (org_id != null) {
+				sql.append("                and b.org_id=").append(org_id);
+			}
+			if (schoolId != null) {
+				sql.append("                and b.school_id=").append(schoolId);
+			}
+			if (major_id != null) {
+				sql.append("                and b.major_id=").append(major_id);
+			}
+			
+		}else{
+			sql.append("                and b.diaplma_no=").append(diaplma_no);
+		}
+		
+		sql.append("                                                                                 ");
+		sql.append("             union                                                               ");
+		sql.append("             select 			                                                 ");
+		sql.append("					b.diaplma_no,												 ");
+		sql.append("					b.pre_edu,													 ");
+		sql.append("					b.political,												 ");
+		sql.append("					b.nation,												 	 ");
+		sql.append("					b.address,												 	 ");
+		sql.append("					b.std_sex,												 	 ");
+		sql.append("					b.std_birth,												 ");
+		sql.append("              		b.course_id,                                                 ");
+		sql.append("                    '' origin_score,                                             ");
+		sql.append("                    null detail_id,                                              ");
+		sql.append("                    b.final_score,                                         ");
+		sql.append("                    b.std_reg_id,                                                ");
+		sql.append("                    b.major_id,                                                  ");
+		sql.append("                    b.apply_id,  b.std_source,                                             ");
+		sql.append("                    null is_passed,                                              ");//毕业名册-校考成绩sql中暂不判断及格
+		sql.append("                    b.score_source,                                                ");
+		sql.append("                    b.remark,                                                  ");
+		sql.append("					b.score_type                                                 ");
+		sql.append("    from kj_college_score_detail_201910 b where 1=1	 ");
+		
+		if(StringUtils.isEmpty(diaplma_no)){
+			sql.append("                    and b.exam_time_id=").append(exam_time_id);
+			if (org_id != null) {
+				sql.append("                and b.org_id=").append(org_id);
+			}
+			if (schoolId != null) {
+				sql.append("                and b.school_id=").append(schoolId);
+			}
+			if (major_id != null) {
+				sql.append("                and b.major_id=").append(major_id);
+			}
+		}else{
+			sql.append("                and b.diaplma_no=").append(diaplma_no);
+		}
+		
+		sql.append(" ) detail 														                                 	");
+		sql.append(" left join pl_course c on c.id = detail.course_id                                   				");
+		sql.append(" left join std_reg_info s on s.id=detail.std_reg_id 							 					");
+		sql.append(" left join frame_dict pl on (pl.dict_name='std_political_status' and pl.dict_value=detail.political)");
+		sql.append(" left join frame_dict he on (he.dict_name='std_healthy' and he.dict_value=s.std_healthy)            ");
+		sql.append(" left join frame_dict se on (se.dict_name='StdSexType' and se.dict_value=detail.std_sex)			");
+		sql.append(" left join frame_dict na on (na.dict_name='std_nation' and na.dict_value=detail.nation)				");
+		sql.append(" order by s.ticket_no,detail.apply_id,c.course_code,to_number(detail.final_score)			    ");
+		
+		return this.listMapBySql(sql.toString());
+	}
+	
+	public List<Map<String,Object>> getMajorScoreforNameListPdfbak(Integer exam_time_id, Integer major_id, Integer org_id,Integer schoolId,String diaplma_no) {
+		StringBuilder sql = new StringBuilder();
+		//查询专业对应所有的课程-对应的成绩
+		sql.append("select 				                                            				 ");
+		sql.append("       c.course_score,                               							 ");
+		sql.append("	   c.course_code,															 ");
+		sql.append("	   c.course_name,															 ");
+		sql.append("	   detail.course_id,														 ");
+		sql.append("       detail.apply_id,                                                          ");
+		sql.append("       round(detail.origin_score) origin_score,                                                      ");
+		sql.append("       detail.detail_id,                                                         ");
+		sql.append("       round(detail.final_score) final_score,                                                       ");
+		sql.append("       nvl(detail.is_passed,'0') is_passed,                                      ");
+		sql.append("       nvl(detail.score_source, '-1') score_source,                              ");
+		sql.append("       detail.score_type,                                                        ");
+		sql.append("       detail.std_reg_id,                                                        ");
+		sql.append("       detail.diaplma_no,      													 ");
+		sql.append("       pl.dict_text political,       											 ");
+		sql.append("       s.std_name,      													     ");
+		sql.append("       s.std_occupation,      													 ");
+		sql.append("       FUN_DECRYPTION(s.cert_no_en, '").append(SysConst.getAppConfig().getcKey()).append("') cert_no,      													 		 ");
+		sql.append("       s.ticket_no,      													 	 ");
+		sql.append("       he.dict_text std_healthy,      										     ");
+		sql.append("       se.dict_text std_sex,      										     	 ");
+		sql.append("       pl.dict_text political,      										     ");
+		sql.append("       na.dict_text nation,      										         ");
+		sql.append("       detail.pre_edu,      													 ");
+		sql.append("	   to_number(to_char(sysdate,'yyyy'))-to_number(to_char(detail.std_birth,'yyyy')) std_age,");
+		sql.append("       detail.address, 	detail.std_source																      ");
+		sql.append("  from (                                                                   		 ");
 		sql.append("              select 			                                                 ");
 		sql.append("					b.diaplma_no,												 ");
 		sql.append("					b.pre_edu,													 ");
@@ -1058,7 +1179,7 @@ public class KjUnifiedScoreDetailDao extends PlatformDaoSupport<KjUnifiedScoreDe
 		sb.append("         d.origin_score,                    ");
 		sb.append("         nvl((select fd.dict_text from frame_dict fd where fd.dict_name='score_flag' and fd.dict_value=d.final_score),d.final_score) final_score,                     ");
 		sb.append("         s.std_name,                        ");
-		sb.append("         c.course_name,                     ");
+		sb.append("         c.course_name, c.course_score,                    ");
 		sb.append("         nvl((select fd.dict_text from frame_dict fd where fd.dict_name='ScoreSource' and fd.dict_value=d.score_source),d.score_source) score_source_name,                     ");
 		sb.append("         '统考' score_type_name,                     ");
 		sb.append("         null score_type,                     ");
@@ -1109,7 +1230,7 @@ public class KjUnifiedScoreDetailDao extends PlatformDaoSupport<KjUnifiedScoreDe
 		sb.append("         '' origin_score,                         ");
 		sb.append("         y.score final_score,                     ");
 		sb.append("         s.std_name,                              ");
-		sb.append("         c.course_name,                           ");
+		sb.append("         c.course_name, c.course_score,                          ");
 		sb.append("         nvl((select fd.dict_text from frame_dict fd where fd.dict_name='ScoreSource' and fd.dict_value=y.score_source),y.score_source) score_source_name,                     ");
 		sb.append("         nvl((select fd.dict_text from frame_dict fd where fd.dict_name='CollegeScoreType' and fd.dict_value=y.score_type),y.score_type) score_type_name,                     ");
 		sb.append("         y.score_type,                     ");
@@ -1162,7 +1283,7 @@ public class KjUnifiedScoreDetailDao extends PlatformDaoSupport<KjUnifiedScoreDe
 		sb.append("         '' origin_score,                    ");
 		sb.append("         nvl((select fd.dict_text from frame_dict fd where fd.dict_name='PaperScoreLevel' and fd.dict_value=y.score),y.score) final_score,                     ");
 		sb.append("         s.std_name,                        ");
-		sb.append("         nvl(c.course_name,'毕业论文并答辩') course_name,                     ");
+		sb.append("         nvl(c.course_name,'毕业论文并答辩') course_name, '' course_score,                    ");
 		sb.append("         '毕业论文' score_source_name,                     ");
 		sb.append("         nvl((select fd.dict_text from frame_dict fd where fd.dict_name='CollegeScoreType' and fd.dict_value=y.score_type),y.score_type) score_type_name,                     ");
 		sb.append("         y.score_type,                     ");
@@ -1211,7 +1332,7 @@ public class KjUnifiedScoreDetailDao extends PlatformDaoSupport<KjUnifiedScoreDe
 		sb.append("         '' origin_score,                         ");
 		sb.append("         nvl((select fd.dict_text from frame_dict fd where fd.dict_name in('score_flag','PaperScoreLevel') and fd.dict_value=y.score and rownum=1),y.score) final_score,                     ");
 		sb.append("         s.std_name,                        ");
-		sb.append("         c.course_name,                     ");
+		sb.append("         c.course_name, c.course_score,                    ");
 		sb.append("         nvl((select fd.dict_text from frame_dict fd where fd.dict_name='ScoreSource' and fd.dict_value=y.score_source),y.score_source) score_source_name,                     ");
 		sb.append("         nvl((select fd.dict_text from frame_dict fd where fd.dict_name='CollegeScoreType' and fd.dict_value=y.score_type),y.score_type) score_type_name,                     ");
 		sb.append("         y.score_type,                     ");

+ 6 - 1
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlCourseDao.java

@@ -124,7 +124,7 @@ public class PlCourseDao extends PlatformDaoSupport<PlCourse> {
 	 * 无参-查询课程列表
 	 */
 	public List<PlCourse> listCourse() {
-		String sql = "select id,course_code,course_name,course_score,'(' || course_code || ')  ' || course_name code_course_name  from pl_course ";
+		String sql = "select id,course_code,course_name,course_score,'(' || course_code || ')  ' || course_name code_course_name  from pl_course order by course_code";
 		return this.listBySql(sql);
 	}
 	
@@ -281,5 +281,10 @@ public class PlCourseDao extends PlatformDaoSupport<PlCourse> {
 		String sql = "select * from pl_course where course_code = ?";
 		return this.findBySql(sql, courseCode);
 	}
+	
+	public PlCourse findCourseLimit(Integer course_id) {
+		String sql = "select * from PL_COURSE_limit a where a.id=? ";
+		return this.findBySql(sql, course_id);
+	}
 
 }

+ 286 - 0
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlCoursePreDao.java

@@ -0,0 +1,286 @@
+package cn.hmsoft.ses.data.dao.pl;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.stereotype.Repository;
+
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.ses.common.constants.ByConst.YesOrNo;
+import cn.hmsoft.ses.common.constants.PlConst.CourseFilter;
+import cn.hmsoft.ses.data.model.pl.PlCourse;
+import cn.hmsoft.ses.data.model.pl.PlCoursePre;
+
+/**
+ * 课程表 数据库处理.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-16 21:08:14
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Repository
+public class PlCoursePreDao extends PlatformDaoSupport<PlCoursePre> {
+
+	public Pager pagePlMergePublishPlan(String query, Integer year_code, String exam_batch, Integer start, Integer limit) {
+		StringBuilder sql = new StringBuilder();
+		sql.append(
+				" select c.* from pl_merge_publish_plan p,pl_course_pre c where c.id=p.course_id and p.year_code=? and p.exam_time=? ");
+
+		if (StringHelper.isEmpty(query)) {
+			sql.append(" order by c.course_code ");
+			return this.pageMapBySql(start, limit, sql.toString(),year_code,exam_batch);
+		} else {
+			String value = generateLikeParamter(query.trim());
+			sql.append(" and (c.course_code like ? or c.course_name like ?)");
+			sql.append(" order by c.course_code ");
+			return this.pageMapBySql(start, limit, sql.toString(),year_code,exam_batch, value, value);
+		}
+	}
+	
+	/**
+	 * @param special_flag:特殊课程标志
+	 */
+	public Pager pagePlCourse(String query, Integer start, Integer limit, String order, String type,
+			Integer is_nation_exam, Integer special_flag, Integer course_filter, Integer exam_time_id, Integer status,Integer is_net_mark) {
+		String sql = "";
+		if (StringHelper.isNotEmpty(course_filter)) {
+			if (course_filter == CourseFilter.COURSE_ASSIGN.ordinal()) {
+				sql = "select distinct p.*,'(' || p.course_code || ')  ' || p.course_name code_course_name from pl_course_pre p, "
+						+ " pl_exam_area_course ac,cf_fee_scale ca  where p.id=ac.course_id and p.fee_code=ca.fee_item_code and ac.exam_time_id = " + exam_time_id;
+			} else if (course_filter == CourseFilter.COURSE_LIMIT.ordinal()) {
+				sql = "select distinct p.*,'(' || p.course_code || ')  ' || p.course_name code_course_name,ca.price from pl_course_pre p, "
+						+ " pl_exam_area_course_limit al,cf_fee_scale ca  where p.id=al.course_id and p.fee_code=ca.fee_item_code and al.exam_time_id = "+ exam_time_id;
+			} else if (course_filter == CourseFilter.COURSE_SOCIAL_LIMIT.ordinal()) {
+				sql += " select p.*,'(' || p.course_code || ')  ' || p.course_name code_course_name, ca.price from pl_course_pre p left join cf_fee_scale ca"
+						+ " on p.fee_code=ca.fee_item_code  where p.is_social_enrol = " + YesOrNo.YES.ordinal();
+			}
+		} else {
+			 sql = "select p.*,'(' || p.course_code || ')  ' || p.course_name code_course_name, ca.price from pl_course_pre p left join cf_fee_scale ca "
+			 		+ " on p.fee_code=ca.fee_item_code where 1=1 ";
+		}
+		if (null != is_nation_exam) {
+			sql += " and p.is_nation_exam = " + is_nation_exam;
+		}
+		if(null != special_flag) {
+			sql += " and p.special_flag = " +special_flag;
+		}
+		if(null != status) {
+			sql += " and p.status= " + status;
+		}
+		if(null != is_net_mark) {
+			sql += " and p.is_net_mark = " +is_net_mark;
+		}
+		if (StringHelper.isEmpty(query)) {
+			return this.pageMapBySql(generateQueryOrder(order, type), start, limit, sql);
+		} else {
+			String value = generateLikeParamter(query);
+			sql += " and (p.course_code like ? or p.course_name like ? or p.course_score like ? )";
+			return this.pageMapBySql(generateQueryOrder(order, type), start, limit, sql, value, value, value);
+		}
+	}
+
+	/**
+	 * @param ids:课程ID集合
+	 * @param specialFlag:特殊课程标志
+	 * 有参-查询课程列表
+	 */
+	public List<PlCoursePre> listCourse(String ids, Integer specialFlag) {
+		String sql = "select id, course_code, course_name, '(' || course_code || ')  ' || course_name code_course_name  "
+				+ " from pl_course_pre where 1 = 1";
+		if (StringHelper.isNotEmpty(ids)) {
+			sql += " and id not in ( ";
+			String[] cids = ids.split(",");
+			for (String cid : cids) {
+				sql += cid + ",";
+			}
+			sql = sql.substring(0, sql.length() - 1) + " )";
+		}
+		if(StringHelper.isNotEmpty(specialFlag)) {
+			sql += " and special_flag is not null and  special_flag != " + specialFlag;
+		}
+		sql += " order by course_code ";
+		return this.listBySql(sql);
+	}
+	
+	/**
+	 * @param courseCode:课程代码
+	 * @param courseName:课程名称
+	 * 有参-查询课程
+	 */
+	public List<PlCoursePre> listCourse(String courseCode, String courseName) {
+		String sql = "select * from pl_course_pre where course_code = ? and course_name=?";
+		return this.listBySql(sql, courseCode, courseName);
+	}
+
+	public PlCoursePre findCourse(String courseCode, Integer specialFlag) {
+		String sql = "select * from pl_course_pre where course_code = ? and special_flag = ?";
+		return this.findBySql(sql, courseCode, specialFlag);
+	}
+
+	/**
+	 * 无参-查询课程列表
+	 */
+	public List<PlCoursePre> listCourse() {
+		String sql = "select id,course_code,course_name,course_score,'(' || course_code || ')  ' || course_name code_course_name  from pl_course_pre ";
+		return this.listBySql(sql);
+	}
+	
+	public List<PlCoursePre> listCourseByExamTimeId(Integer exam_time_id) {
+		StringBuffer sql = new StringBuffer();
+		sql.append("select id,course_code,course_name,course_score,'(' || course_code || ')  ' || course_name code_course_name  from pl_course_pre a where 1=1");
+		
+		if(null != exam_time_id){
+			sql.append(" and exists (select * from pl_merge_publish_plan p where p.course_id=a.id and p.exam_time_id=").append(exam_time_id).append(")");
+		}
+		sql.append(" order by a.course_code");
+		return this.listBySql(sql.toString());
+	}
+	
+	
+	
+	public List<PlCoursePre> listCourseByName(String name) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(" select * from (select id,course_code,course_name,course_score,'(' || course_code || ')  ' || course_name code_course_name  from pl_course_pre c ");
+		if(null != name && !"".equals(name)){
+			sb.append(" where (c.course_code like '%").append(name).append("%' or c.course_name like '%").append(name).append("%')   ");
+			sb.append(" order by course_code)");
+		}else{
+			sb.append(" order by course_code)");
+			sb.append(" where rownum <= 10");
+		}
+		
+		
+		return this.listBySql(sb.toString());
+	}
+	
+	/**
+	 * @param major_id:专业ID
+	 */
+	public List<PlCoursePre> listCourseScore(Integer major_id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("   select c.course_score                                       ");
+		sb.append("     from pl_major_pre m, pl_major_course_pre mc, pl_course_pre c          ");
+		sb.append("    where m.id = mc.major_id                                   ");
+		sb.append("      and mc.course_id = c.id                                  ");
+		sb.append("      and m.id = ?                                             ");
+		return this.listBySql(sb.toString(), major_id);
+	}
+	
+	public List<PlCoursePre> listCourseAll() {
+		String sql = "select id, course_code, course_name, '(' || course_code || ')  ' || course_name code_course_name  "
+				+ " from pl_course_pre where 1 = 1 order by course_code";
+		return this.listBySql(sql);
+	}
+
+	public List<PlCoursePre> listCourseByType(Integer course_exam_type, Integer special_flag) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("select id, course_code, course_name, '(' || course_code || ')  ' || course_name code_course_name from pl_course_pre c where 1=1 ");
+		if (course_exam_type != null) {
+			sb.append(" and c.course_exam_type=").append(course_exam_type);
+		}
+		if (special_flag != null) {
+			sb.append(" and c.special_flag=").append(special_flag);
+		}
+		return this.listBySql(sb.toString());
+	}
+	
+	public List<PlCoursePre> listCourseByMajorId(Integer major_id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("select c.id, c.course_code, c.course_name,'(' || c.course_code || ')  ' || c.course_name||' - '||(select f.dict_text from frame_dict f where f.dict_name='CourseNature' and f.dict_value=mc.course_nature) code_course_name from pl_major_course_pre mc ,pl_course_pre c where c.id=mc.course_id and mc.major_id=? order by decode(mc.course_nature,1,1,2,2,3,3,4,5,5,4), c.course_code ");
+		return this.listBySql(sb.toString(),major_id);
+	}
+	
+	public List<PlCoursePre> listCourseBymajorIdForCommunicate(Integer major_id,Integer school_id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("select c.id, c.course_code, c.course_name,'(' || c.course_code || ')  ' || c.course_name||' - '||(select f.dict_text from frame_dict f where f.dict_name='CourseNature' and f.dict_value=mc.course_nature)||' -('||nvl((select '已申报' from PL_COURSE_RECORD r where r.course_id=c.id and r.school_id=? and r.status=2 and rownum=1),'未申报')||')' code_course_name from pl_major_course_pre mc ,pl_course_pre c where c.id=mc.course_id and mc.major_id=? order by decode(mc.course_nature,1,1,2,2,3,3,4,5,5,4), c.course_code ");
+		return this.listBySql(sb.toString(),school_id,major_id);
+	}
+	
+	/**
+	 * @param year_code:批次码
+	 * @return
+	 */
+	public List<PlCoursePre> listPublishCouse(Integer exam_time_id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(" select distinct c.id,                                                       ");
+		sb.append("        c.course_code,                                                       ");
+		sb.append("        c.course_name,                                                       ");
+		sb.append("       '(' || c.course_code || ')' || c.course_name code_course_name         ");
+		sb.append("   from pl_merge_publish_plan p, pl_course_pre c                                 ");
+		sb.append("  where p.course_id = c.id                                                   ");
+		sb.append("    and p.exam_time_id = ?                                                   ");
+		return this.listBySql(sb.toString(), exam_time_id);
+	}
+	
+	/**
+	 * @return  命题:导出课程码表
+	 */
+	public List<Map<String,Object>> listSchoolCourse(Integer exam_year) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(" select distinct c.course_code,c.course_name from pl_course_pre c ");
+		sb.append(" where exists ");
+		sb.append(" (select 1 from pl_merge_publish_plan p, pl_exam_time t  ");
+		sb.append(" where p.course_id = c.id and p.exam_time_id = t.id and t.exam_year = ?) ");
+		sb.append(" order by c.course_code ");
+		
+		return this.listMapBySql(sb.toString(),exam_year);
+	}
+	
+	
+	public List<Map<String,Object>> listCourseDbf(Integer exam_time_id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select c.course_code kechengdai, c.course_name mingcheng     ");
+		sb.append("    from pl_course_pre c                                           ");
+		sb.append("   where exists (select 1                                      ");
+		sb.append("            from std_enrol e                                   ");
+		sb.append("           where e.course_id = c.id                            ");
+		sb.append("             and e.status >= 4                                 ");
+		sb.append("             and e.fee_status = 1                              ");
+		sb.append("             and e.exam_time_id = ?)                           ");
+		sb.append("   order by c.course_code                                      ");
+		return this.listMapBySql(sb.toString(), exam_time_id);
+	}
+	
+	public List<PlCoursePre> queryPlCourseByMajorId(Integer major_id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("select mc.course_nature,c.*");
+		sb.append("  from pl_major_course_pre mc, pl_course_pre c");
+		sb.append(" where mc.course_id = c.id");
+		sb.append("   and mc.major_id = ?");
+		sb.append(" order by decode(mc.course_nature,1,1,2,2,3,3,4,5,5,4), c.course_code");
+
+		return this.listBySql(sb.toString(), major_id);
+	}
+	
+	public List<PlCoursePre> queryPlCourseAndScoreByMajorId(Integer major_id,Integer std_reg_id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(" select mc.course_nature, ");
+		sb.append(" decode(mc.course_nature, ");
+		sb.append(" 4, ");
+		sb.append(" (select nvl((select fd.dict_text from frame_dict fd where fd.dict_name='PaperScoreLevel' and fd.dict_value=y.score),y.score) final_score from kj_college_score_detail y where y.score_type = 4 and y.status = 3 and y.std_reg_id=? and rownum=1), ");
+		sb.append(" ( nvl((select y.score final_score from kj_college_score_detail y where y.score_source in (7, 8, 9) and y.score >= 60 and (y.isrelease<>1 or y.isrelease is null) and y.std_reg_id=? and rownum=1 and y.course_id=c.id), ");
+		sb.append("      nvl((select d.final_score from kj_unified_score_detail d where d.final_score >= 60 and (d.isrelease<>1 or d.isrelease is null) and d.std_reg_id=? and rownum=1 and d.course_id=c.id), ");
+		sb.append("          (select y.score final_score from kj_college_score_detail y where y.score_type in(0,3) and y.status = 3 and (y.score >= 60 or y.score in (select fd.dict_value from frame_dict fd where fd.dict_name='PaperScoreLevel')) and y.std_reg_id=? and rownum=1 and y.course_id=c.id) ");
+		sb.append("      ) ");
+		sb.append("   ) ");
+		sb.append(" ) ");
+		sb.append(" ) final_score, ");
+		sb.append(" c.* ");
+		sb.append("       from pl_major_course_pre mc, pl_course_pre c ");
+		sb.append("      where mc.course_id = c.id ");
+		sb.append("        and mc.major_id = ? ");
+		sb.append("      order by decode(mc.course_nature,1,1,2,2,3,3,4,5,5,4), c.course_code ");
+
+		return this.listBySql(sb.toString(),std_reg_id,std_reg_id,std_reg_id,std_reg_id,major_id);
+	}
+	
+	public PlCoursePre queryCourseBycourseCode(String courseCode) {
+		String sql = "select * from pl_course_pre where course_code = ?";
+		return this.findBySql(sql, courseCode);
+	}
+
+}

+ 1 - 1
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlCourseTextbookDao.java

@@ -127,7 +127,7 @@ public class PlCourseTextbookDao extends PlatformDaoSupport<PlCourseTextbook> {
 		sb.append("   order by et.year_code,c.course_code                                                          ");*/
 		
 		sb.append(" select e.year_code,c.course_code, '1' status, ");
-		sb.append(" (select * from (select t.textbook_code from pl_course_textbook_log l,pl_exam_time et,pl_textbook t where t.id=l.textbook_id and et.id=l.exam_time_id and l.course_id=c.id and et.year_code>=202001 and et.year_code<=e.year_code order by et.year_code desc) where rownum=1) textbook_code ");
+		sb.append(" (select * from (select t.textbook_code from pl_textbook t where t.exam_time_id=e.id and t.course_id=c.id order by t.exam_time_id desc) where rownum=1) textbook_code ");
 		sb.append(" from pl_exam_time e,pl_merge_publish_plan p,pl_course c where p.exam_time_id=e.id and c.id=p.course_id and e.exam_year=? ");
 		sb.append(" order by e.year_code,c.course_code ");
 		

+ 78 - 0
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlCourseTextbookLogPreDao.java

@@ -0,0 +1,78 @@
+package cn.hmsoft.ses.data.dao.pl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbookLog;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbookLogPre;
+
+/**
+ * 课程教材关联历史表 数据库处理.
+ * 
+ * @author: haoguanghui
+ * @date: 2019-01-25 11:06:51
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Repository
+public class PlCourseTextbookLogPreDao extends PlatformDaoSupport<PlCourseTextbookLogPre> {
+
+	/**
+	 * 构建QueryOrder(order,type)过滤.
+	 * @param query
+	 * @param start
+	 * @param limit
+	 * @param order
+	 * @param type
+	 * @return
+	 */
+	public Pager page(String query, Integer start, Integer limit, QueryOrder queryOrder) {
+		String sql = "select * from pl_course_textbook_log_pre ";
+		if (StringHelper.isEmpty(query)) {
+			return this.pageMapBySql(queryOrder, start, limit, sql);
+		} else {
+			return this.pageMapBySql(queryOrder, start, limit,
+					sql + "where 1 like ?", generateLikeParamter(query));		
+		}
+	}
+
+	public List<PlCourseTextbookLogPre> listCourseTextbookLog(Integer course_id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select ct.*, c.course_name, t.textbook_name, e.year_code       ");
+		sb.append("    from pl_course_textbook_log_pre ct,                              ");
+		sb.append("         pl_course_pre              c,                               ");
+		sb.append("         pl_textbook_pre            t,                               ");
+		sb.append("         pl_exam_time           e                                ");
+		sb.append("   where ct.course_id = c.id                                     ");
+		sb.append("     and ct.textbook_id = t.id                                   ");
+		sb.append("     and ct.exam_time_id = e.id                                  ");
+		sb.append("     and ct.course_id = ?                                        ");
+		sb.append("     order by e.year_code desc,ct.oper_time desc                                   ");
+		return this.listBySql(sb.toString(), course_id);
+	}
+	
+	public List<PlCourseTextbookLogPre> listCourseTextbookLog(Integer course_id,Integer exam_time_id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select * from pl_course_textbook_log_pre a where a.course_id=? and a.exam_time_id=?       ");
+		
+		return this.listBySql(sb.toString(), course_id,exam_time_id);
+	}
+	
+	public void synTextbookLog(Integer exam_time_id,Integer old_exam_time_id,String optr){
+		StringBuffer sb = new StringBuffer();
+		sb.append(" insert into pl_course_textbook_log_pre (id ,course_id,textbook_id,oper_time,operator,type,exam_time_id ) ");
+		sb.append(" select SEQ_pl_course_textbook_log.Nextval, a.course_id,a.textbook_id,sysdate,'").append(optr).append("',0,").append(exam_time_id);
+		sb.append(" from pl_course_textbook_log_pre a where a.exam_time_id=").append(old_exam_time_id);
+		sb.append(" and not exists (select 1 from pl_course_textbook_log_pre b where b.course_id=a.course_id and b.exam_time_id=").append(exam_time_id).append(")");
+		
+		this.updateBySql(sb.toString());
+	}
+	
+	
+}

+ 139 - 0
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlCourseTextbookPreDao.java

@@ -0,0 +1,139 @@
+package cn.hmsoft.ses.data.dao.pl;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.stereotype.Repository;
+
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbook;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbookPre;
+
+/**
+ * 课程教材关联表 课程对应的教材,一门课程可以对应多个教材 数据库处理.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-17 15:55:47
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Repository
+public class PlCourseTextbookPreDao extends PlatformDaoSupport<PlCourseTextbookPre> {
+
+	/**
+	 * 构建QueryOrder(order,type)过滤.
+	 * @param query
+	 * @param start
+	 * @param limit
+	 * @param order
+	 * @param type
+	 * @return
+	 */
+	public Pager pagePlCourseTextbook(String query, Integer start, Integer limit, String order, String type) {
+		String sql = "select * from pl_course_textbook_pre ";
+		if (StringHelper.isEmpty(query)) {
+			return this.pageMapBySql(generateQueryOrder(order, type), start, limit, sql);
+		} else {
+			return this.pageMapBySql(generateQueryOrder(order, type), start, limit,
+					sql + "where 1 like ?", generateLikeParamter(query));		
+		}
+	}
+
+	public List<PlCourseTextbookPre> listTextBookCourse(Integer course_id) {
+		String sql = "select * from pl_course_textbook_pre where course_id = ?";
+		return this.listBySql(sql, course_id);
+	}
+
+	public List<Map<String, Object>> listCourseTextBook(Integer id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(" select distinct c.id course_id,                 ");
+		sb.append("                 c.course_code,                  ");
+		sb.append("                 c.course_name,                  ");
+		sb.append("                 c.course_score,                 ");
+		sb.append("                 c.course_standard_code,         ");
+		sb.append("                 t.id,                		    ");
+		sb.append("                 t.textbook_id,            		");
+		sb.append("                 t.exam_time_id,e.year_code,              		");
+		sb.append("       decode(e.exam_year,null,e.year_code||'',e.exam_year || '年' || decode(e.exam_month,'4','上半年','10','下半年', e.exam_month || '月')) exam_year_month           ");
+
+		sb.append("   from pl_course_textbook_pre t, pl_course_pre c,pl_exam_time e        ");
+		sb.append("  where t.course_id = c.id and e.id=t.exam_time_id                       ");
+		sb.append("    and t.textbook_id = ?                        ");
+		return this.listMapBySql(sb.toString(), id);
+	}
+	
+	/**
+	 * @param course_id: 课程ID
+	 * @param year_code:批次码
+	 * @return 查找课程关联的教材信息
+	 */
+	public List<PlCourseTextbookPre> listTextBookCourse(Integer course_id, String year_code) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select ct.*, t.textbook_name,e.year_code                                      ");
+		sb.append("    from pl_course_textbook_pre ct, pl_textbook_pre t, pl_exam_time e      ");
+		sb.append("   where ct.textbook_id = t.id                                     ");
+		sb.append("     and ct.exam_time_id = e.id                                    ");
+		sb.append("     and ct.course_id = ?                                          ");
+		sb.append("     and e.year_code >= ?                                          ");
+		sb.append("     order by e.year_code desc                                          ");
+		return this.listBySql(sb.toString(), course_id,year_code);
+	}
+	
+
+	/**
+	 * @param course_id:课程ID
+	 * @param textbook_id:教材ID
+	 * @return 根据条件查找教材课程关联信息
+	 */
+	public PlCourseTextbookPre findCourseTextbook(Integer course_id, Integer textbook_id) {
+		String sql = "select * from pl_course_textbook_pre ct where ct.course_id = ? and ct.textbook_id = ? order by exam_time_id ";
+		return this.findBySql(sql, course_id, textbook_id);
+	}
+
+	/**
+	 * @param book:已经存在的课程教材关系
+	 * @param ctBook:要替换的课程教材关系
+	 * 用新的课程教材关系 更新 旧的课程教材关系
+	 */
+	public void updateCourseTextbook(PlCourseTextbookPre book, PlCourseTextbookPre ctBook) {
+		if (book != null && ctBook != null) {
+			String sql = "update pl_course_textbook_pre ct set ct.exam_time_id = ? "
+					+ " where  ct.course_id = ? and ct.textbook_id = ? and ct.exam_time_id = ?";
+			this.updateBySql(sql, ctBook.getExam_time_id(), book.getCourse_id(), book.getTextbook_id(),
+					book.getExam_time_id());
+		}
+	}
+
+	public void updateTextbookBatch(Integer id, Integer exam_time_id) {
+		String sql = "update pl_course_textbook_pre set exam_time_id = ? where id = ?  ";
+		this.updateBySql(sql, exam_time_id, id);
+	}
+	
+	
+	/**
+	 * @param exam_time_id
+	 * @return  命题导出:课程教材信息
+	 */
+	public List<Map<String,Object>> listCourseTextbook(Integer year_code) {
+		StringBuffer sb = new StringBuffer();
+		/*sb.append("  select et.year_code, c.course_code, t.textbook_code, '1' status                        ");
+		sb.append("    from pl_course_textbook_log ct, pl_course c, pl_textbook t, pl_exam_time et,pl_merge_publish_plan p         ");
+		sb.append("   where ct.course_id = c.id                                                           ");
+		sb.append("     and ct.textbook_id = t.id                                                         ");
+		sb.append("     and ct.exam_time_id = et.id and p.exam_time_id=et.id and p.course_id=ct.course_id                                                      ");
+		sb.append("     and et.exam_year = ?                                                             ");
+		sb.append("   order by et.year_code,c.course_code                                                          ");*/
+		
+		sb.append(" select e.year_code,c.course_code, '1' status, ");
+		sb.append(" (select * from (select t.textbook_code from pl_course_textbook_log_pre l,pl_exam_time et,pl_textbook_pre t where t.id=l.textbook_id and et.id=l.exam_time_id and l.course_id=c.id and et.year_code>=202001 and et.year_code<=e.year_code order by et.year_code desc) where rownum=1) textbook_code ");
+		sb.append(" from pl_exam_time e,pl_merge_publish_plan p,pl_course_pre c where p.exam_time_id=e.id and c.id=p.course_id and e.exam_year=? ");
+		sb.append(" order by e.year_code,c.course_code ");
+		
+		return this.listMapBySql(sb.toString(), year_code);
+		
+	}
+	
+}

+ 19 - 0
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlExamTimeDao.java

@@ -148,6 +148,18 @@ public class PlExamTimeDao extends PlatformDaoSupport<PlExamTime> {
 		sb.append("   order by year_code , et.exam_month                                    ");
 		return this.listMapBySql(sb.toString(), exam_year);
 	}
+	
+	public List<PlExamTime> queryExamTimeByExamYear(Integer exam_year) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select et.id,et.exam_year,                                          ");
+		sb.append("         et.exam_month,                                         ");
+		sb.append("         to_char(et.exam_first_day, 'dd') first_day,            ");
+		sb.append("         to_char(et.exam_second_day, 'dd') second_day           ");
+		sb.append("    from pl_exam_time et                                        ");
+		sb.append("   where et.exam_year = ?                                      ");
+		sb.append("   order by year_code , et.exam_month                                    ");
+		return this.listBySql(sb.toString(),exam_year);
+	}
 
 	/**
 	 * @param exam_time_id:批次ID
@@ -228,4 +240,11 @@ public class PlExamTimeDao extends PlatformDaoSupport<PlExamTime> {
 		String sql = "select * from (select year_code from pl_exam_time where year_code <? order by year_code desc) where rownum=1";
 		return this.findObject(Integer.class, sql, yearCode);
 	}
+	
+	public PlExamTime queryPlExamTimeByYearCode(Integer yearCode) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("   select s.* from pl_exam_time s                 ");
+		sb.append("    where s.year_code = ?                         ");
+		return this.findBySql(sb.toString(), yearCode);
+	}
 }

+ 48 - 0
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlMajorApplyProDao.java

@@ -0,0 +1,48 @@
+package cn.hmsoft.ses.data.dao.pl;
+
+import org.springframework.stereotype.Repository;
+
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import cn.hmsoft.ses.data.model.pl.PlMajorApplyPro;
+
+/**
+ * 专业申报主表 数据库处理.
+ * 
+ * @author: zq
+ * @date: 2018-11-30 16:55:33
+ * @version: 1.0
+ * @email: zhanqiang@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Repository
+public class PlMajorApplyProDao extends PlatformDaoSupport<PlMajorApplyPro> {
+
+	public Pager page(String query, Integer year, Integer school_id,Integer join_school_id, Integer major_id, Integer start, Integer limit) {
+		StringBuilder sql = new StringBuilder();
+		sql.append("select m.major_code,m.major_name,            	");
+		sql.append("    c1.org_code||'-'||c1.org_name master_school,c2.org_code||'-'||c2.org_name join_school,a.id detail_id,d.*     			");
+		sql.append(" from pl_major_apply_pro d,pl_major_apply_pro_detail a,pl_major m,cf_organization c1,cf_organization c2 ");
+			sql.append(" where a.major_id=m.id and d.id=a.apply_id and	c1.id=d.school_id and  c2.id=d.join_school_id 	");
+		if (year != null) {
+			sql.append(" and d.year=").append(year);
+		}
+
+		if (school_id != null) {
+			sql.append(" and d.school_id=").append(school_id);
+		}
+		if (join_school_id != null) {
+			sql.append(" and d.join_school_id=").append(join_school_id);
+		}
+		if (major_id != null) {
+			sql.append(" and a.major_id=").append(major_id);
+		}
+
+		sql.append(" order by d.apply_date desc,m.major_code ");
+
+		return this.pageBySql(start, limit, sql.toString());
+	}
+	
+
+}

+ 26 - 0
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlMajorApplyProDetailDao.java

@@ -0,0 +1,26 @@
+package cn.hmsoft.ses.data.dao.pl;
+
+import org.springframework.stereotype.Repository;
+
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.ses.data.model.pl.PlMajorApplyPro;
+import cn.hmsoft.ses.data.model.pl.PlMajorApplyProDetail;
+
+/**
+ * 数据库处理.
+ * 
+ * @author: zhanqiang
+ * @date: 2019-04-21 20:44:55
+ * @version: 1.0
+ * @email: zhanqiang@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Repository
+public class PlMajorApplyProDetailDao extends PlatformDaoSupport<PlMajorApplyProDetail> {
+	public PlMajorApplyProDetail queryPlMajorApplyPro(Integer year, Integer school_id, Integer join_school_id, Integer major_id){
+		StringBuilder sql = new StringBuilder();
+		sql.append("select * from pl_major_apply_pro a,pl_major_apply_pro_detail b where b.apply_id=a.id and a.year=? and a.school_id=? and a.join_school_id=? and b.major_id=?          	");
+		return this.findBySql(sql.toString(), year,school_id,join_school_id,major_id);
+		
+	}
+}

+ 6 - 8
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlMajorCourseDao.java

@@ -100,7 +100,7 @@ public class PlMajorCourseDao extends PlatformDaoSupport<PlMajorCourse> {
 	 * 查询专业的课程信息和教材信息
 	 * 关联教材的时候,由于教材没有批次的信息,取最新的时间ID
 	 */
-	public List<Map<String, Object>> listCourseTextbook(Integer major_id, String content) {
+	public List<Map<String, Object>> listCourseTextbook(Integer major_id, String content,Integer exam_time_id) {
 		StringBuffer sb = new StringBuffer();
 		sb.append("  select distinct c.course_code,                                             ");
 		sb.append("                  c.course_name,                                             ");
@@ -108,25 +108,23 @@ public class PlMajorCourseDao extends PlatformDaoSupport<PlMajorCourse> {
 		sb.append("                  t.textbook_name,                                           ");
 		sb.append("                  t.textbook_writer,                                         ");
 		sb.append("                  t.textbook_publisher,                                      ");
-		sb.append("                  t.textbook_revision,                                       ");
+		sb.append("                  t.textbook_revision, t.id textbook_id, t.file_path,         ");
 		sb.append("                  mc.course_nature, t.textbook_outline,                                            ");
 		sb.append("                  (select * from (select decode(p.is_nation_exam,1,'国考','区考') from pl_merge_publish_plan p where p.course_id=mc.course_id order by p.year_code desc) where rownum=1) is_nation_exam ");
 		sb.append("    from pl_major_course mc                                                  ");
 		sb.append("    left join pl_course c                                                    ");
 		sb.append("      on mc.course_id = c.id                                                 ");
-		sb.append("    left join pl_course_textbook ct                                          ");
-		sb.append("      on c.id = ct.course_id                                                 ");
 		sb.append("    left join pl_textbook t                                                  ");
-		sb.append("      on ct.textbook_id = t.id                                               ");
-		sb.append("   where mc.major_id = ?                                                     ");
+		sb.append("      on c.id = t.course_id and exam_time_id=?             ");
+		sb.append("   where mc.major_id = ?            ");
 		if(StringHelper.isNotEmpty(content)) {
 			String value = this.generateLikeParamter(content);
 			sb.append(" and (c.course_name like ? or c.course_code like ?)");
 			sb.append(" order by decode(mc.course_nature,1,1,2,2,3,3,4,5,5,4), c.course_code ");
-			return this.listMapBySql(sb.toString(), major_id, value, value);
+			return this.listMapBySql(sb.toString(), exam_time_id,major_id, value, value);
 		} else {
 			sb.append(" order by decode(mc.course_nature,1,1,2,2,3,3,4,5,5,4), c.course_code ");
-			return this.listMapBySql(sb.toString(), major_id);
+			return this.listMapBySql(sb.toString(), exam_time_id,major_id);
 		}
 //		sb.append("     and ct.exam_time_id =                                                   ");
 //		sb.append("         (select max(exam_time_id)                                           ");

+ 211 - 0
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlMajorCoursePreDao.java

@@ -0,0 +1,211 @@
+package cn.hmsoft.ses.data.dao.pl;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.stereotype.Repository;
+
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.ses.data.model.pl.PlMajorCoursePre;
+
+/**
+ * 专业课程对应表 数据库处理.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-17 10:03:45
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Repository
+public class PlMajorCoursePreDao extends PlatformDaoSupport<PlMajorCoursePre> {
+
+	/**
+	 * 构建QueryOrder(order,type)过滤.
+	 * @param query
+	 * @param start
+	 * @param limit
+	 * @param order
+	 * @param type
+	 * @return
+	 */
+	public Pager pagePlMajorCourse(String query, Integer start, Integer limit, String order, String type) {
+		String sql = "select * from pl_major_course_pre ";
+		if (StringHelper.isEmpty(query)) {
+			return this.pageMapBySql(generateQueryOrder(order, type), start, limit, sql);
+		} else {
+			return this.pageMapBySql(generateQueryOrder(order, type), start, limit,
+					sql + "where 1 like ?", generateLikeParamter(query));		
+		}
+	}
+
+	public List<PlMajorCoursePre> listMajorCourse(Integer major_id, String keyword) {
+		StringBuffer sb = new StringBuffer("");
+		sb.append("  select mc.*,                                         ");
+		sb.append("         c.course_code,                                ");
+		sb.append("         c.course_name,                                ");
+		sb.append("         c.course_score,                               ");
+		sb.append("         c.course_exam_type,                           ");
+		sb.append("         c.status                                      ");
+		sb.append("    from pl_major_course_pre mc                            ");
+		sb.append("    left join pl_course_pre c                              ");
+		sb.append("      on mc.course_id = c.id                           ");
+		sb.append("   where mc.major_id = ?                               ");
+		if(StringHelper.isNotEmpty(keyword)) {
+			String value = this.generateLikeParamter(keyword);
+			sb.append(" and (c.course_code like ? or c.course_name like ?)");
+			sb.append(" order by mc.course_nature,c.course_code");
+			return this.listBySql(sb.toString(), major_id, value, value);
+		} else {
+			sb.append(" order by mc.course_nature,c.course_code");
+			return this.listBySql(sb.toString(), major_id);
+		}
+	}
+
+	public List<Map<String, Object>> findMajorByCourse(Integer id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(" select ma.major_code,                            ");
+		sb.append("        ma.major_name,                            ");
+		sb.append("        ma.major_level,                           ");
+		sb.append("        ma.total_credits,                         ");
+		sb.append("        ma.status,                                ");
+		sb.append("        ma.year                                   ");
+		sb.append("   from pl_major_course_pre mc, pl_major_pre ma           ");
+		sb.append("  where mc.major_id = ma.id                       ");
+		sb.append("    and mc.course_id = ?                          ");
+		sb.append("  order by ma.status desc,ma.major_level desc, ma.major_code            ");
+		return this.listMapBySql(sb.toString(),id);
+	}
+
+	public PlMajorCoursePre findMajorByCourse(Integer major_id, Integer course_id) {
+		String sql = "select * from pl_major_course_pre where major_id = ? and course_id = ? ";
+		return this.findBySql(sql, major_id, course_id);
+	}
+	
+	public PlMajorCoursePre findMajorByCourseForAddScore(Integer major_id, Integer course_id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("select * from pl_major_course_special a where a.major_id = ? and a.course_id = ? ");
+		sb.append("union ");
+		sb.append("select * from pl_major_course_pre a where a.major_id = ? and a.course_id = ? ");
+		sb.append("and not exists (select * from pl_major_course_special mc where mc.major_id=a.major_id and mc.course_id=a.course_id)");
+
+		return this.findBySql(sb.toString(), major_id, course_id, major_id, course_id);
+	}
+	
+	
+	/**
+	 * @param major_id:专业ID
+	 * 查询专业的课程信息和教材信息
+	 * 关联教材的时候,由于教材没有批次的信息,取最新的时间ID
+	 */
+	public List<Map<String, Object>> listCourseTextbook(Integer major_id, String content) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select distinct c.course_code,                                             ");
+		sb.append("                  c.course_name,                                             ");
+		sb.append("                  c.course_score,                                            ");
+		sb.append("                  t.textbook_name,                                           ");
+		sb.append("                  t.textbook_writer,                                         ");
+		sb.append("                  t.textbook_publisher,                                      ");
+		sb.append("                  t.textbook_revision,                                       ");
+		sb.append("                  mc.course_nature, t.textbook_outline,ct.exam_time_id,                                            ");
+		sb.append("                   decode(c.is_nation_exam,1,'国考','区考') is_nation_exam, ");
+		sb.append("         (select p.exam_year || '年' || decode(p.exam_month,'4','上半年','10','下半年', p.exam_month || '月') from pl_exam_time p where p.id=ct.exam_time_id)  exam_year_month ");
+
+		sb.append("    from pl_major_course_pre mc                                                  ");
+		sb.append("    left join pl_course_pre c                                                    ");
+		sb.append("      on mc.course_id = c.id                                                 ");
+		sb.append("    left join pl_course_textbook_pre ct                                          ");
+		sb.append("      on c.id = ct.course_id                                                 ");
+		sb.append("    left join pl_textbook_pre t                                                  ");
+		sb.append("      on ct.textbook_id = t.id                                               ");
+		sb.append("   where mc.major_id = ?                                                     ");
+		if(StringHelper.isNotEmpty(content)) {
+			String value = this.generateLikeParamter(content);
+			sb.append(" and (c.course_name like ? or c.course_code like ?)");
+			sb.append(" order by decode(mc.course_nature,1,1,2,2,3,3,4,5,5,4), c.course_code,ct.exam_time_id desc ");
+			return this.listMapBySql(sb.toString(), major_id, value, value);
+		} else {
+			sb.append(" order by decode(mc.course_nature,1,1,2,2,3,3,4,5,5,4), c.course_code,ct.exam_time_id desc ");
+			return this.listMapBySql(sb.toString(), major_id);
+		}
+//		sb.append("     and ct.exam_time_id =                                                   ");
+//		sb.append("         (select max(exam_time_id)                                           ");
+//		sb.append("            from pl_major m, pl_major_course mc, pl_course_textbook ct       ");
+//		sb.append("           where m.id = mc.major_id                                          ");
+//		sb.append("             and mc.course_id = ct.course_id                                 ");
+//		sb.append("             and m.id = ?)                                                   ");
+		
+	}
+
+	public void updatePlMajorCourse(Integer major_id, Integer course_id, Integer course_nature) {
+		String sql = " update pl_major_course_pre set course_nature = ? where major_id = ? and course_id = ?";
+		this.updateBySql(sql, course_nature, major_id, course_id);
+	}
+
+	/**
+	 * @param major_id
+	 * @param course_id
+	 * @param direct_remark
+	 * 更新专业课程选修方向
+	 */
+	public void updateMcDirect(Integer major_id, Integer course_id, String direct_remark,String course_nature) {
+		String sql = "update pl_major_course_pre set direct_remark=?,course_nature=? where major_id = ? and course_id = ? ";
+		this.updateBySql(sql, direct_remark,course_nature, major_id, course_id);
+	}
+	
+	/**
+	 * @param course_id
+	 * @param course_score
+	 * 更新专业课程学分
+	 */
+	public void updateCourseScore(Integer course_id, String course_score) {
+		String sql = "update pl_course_pre set course_score=? where id = ? ";
+		this.updateBySql(sql, course_score, course_id);
+	}
+	
+	/**
+	 * 更新专业课程合成比例
+	 * @param major_id
+	 * @param course_id
+	 * @param scale
+	 */
+	public void updateCourseIscompose(Integer major_id,Integer course_id, String iscompose) {
+		String sql = "update pl_major_course_pre set iscompose = ? where major_id = ? and course_id = ? ";
+		this.updateBySql(sql, iscompose, major_id,course_id);
+	}
+	
+	/**
+	 * 实践课.
+	 * @return
+	 */
+	public List<Map<String, Object>> findPracticalCourseList() {
+		StringBuilder sql = new StringBuilder();
+		// 20230202 by蒋老师环境设计130502,网页设计(课程代码:03841)课程允许通过实践课程方式上报
+		// 20230202 by 蒋老师视觉传达设计130503,计算机室内设计绘图 CAD(课程代码:05341)课程允许通过实践课程方式上报
+		sql.append(" select m.major_code,m.major_name,mc.major_id,mc.course_id,pc.course_code,pc.course_name  ");
+		sql.append("     from pl_major_course_special mc,pl_course_pre pc,pl_major_pre m  ");
+		sql.append("     where  mc.course_id=pc.id  ");
+		sql.append("     and m.id=mc.major_id ");
+		sql.append("     and m.status=1 ");
+		sql.append("     and mc.course_nature=5  ");
+		sql.append("    union ");
+		sql.append(" select m.major_code,m.major_name,mc.major_id,mc.course_id,pc.course_code,pc.course_name  ");
+		sql.append("     from pl_major_course_pre mc,pl_course_pre pc,pl_major_pre m  ");
+		sql.append("     where  mc.course_id=pc.id  ");
+		sql.append("     and m.id=mc.major_id ");
+		sql.append("     and m.status=1 ");
+		sql.append("     and mc.course_nature=5  ");
+		sql.append("    order by major_code,course_code ");
+		return this.listMapBySql(sql.toString());
+	}
+	
+	public List<PlMajorCoursePre> listByMajorCourse(Integer majorId) {
+		StringBuilder sql = new StringBuilder();
+		sql.append("select pc.course_code,pc.course_name,pc.course_score,pc.course_code||'-'||pc.course_name full_name,m.* from pl_major_course_pre m ");
+		sql.append("left join pl_course_pre pc on pc.id=m.course_id      				");
+		sql.append(" where major_id=? order by decode(m.course_nature,1,1,2,2,3,3,4,5,5,4),pc.course_code       ");
+		return this.listBySql(sql.toString(), majorId);
+	}
+}

+ 38 - 8
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlMajorDao.java

@@ -122,32 +122,30 @@ public class PlMajorDao extends PlatformDaoSupport<PlMajor> {
 	 * @param id 专业ID
 	 * 根据专业ID查找相关的课程和教材
 	 */
-	public List<PlMajor> findCourseAndBook(Integer id) {
+	public List<PlMajor> findCourseAndBook(Integer id,Integer exam_time_id) {
 		StringBuffer sb = new StringBuffer();
 		sb.append("  select ma.major_code,                              ");
 		sb.append("         ma.major_name,                              ");
 		sb.append("         c.course_code,                              ");
 		sb.append("         c.course_name,                              ");
 		sb.append("         c.course_score,                             ");
-		sb.append("         t.textbook_name,                            ");
+		sb.append("         t.textbook_name,t.textbook_outline,         ");
 		sb.append("         t.textbook_publisher,                       ");
-		sb.append("         t.textbook_revision ,(select p.year_code from pl_exam_time p where p.id=b.exam_time_id)  year_code, ");
-		sb.append("         (select p.exam_year || '年' || decode(p.exam_month,'4','上半年','10','下半年', p.exam_month || '月') from pl_exam_time p where p.id=b.exam_time_id)  exam_year_month, ");
+		sb.append("         t.textbook_revision ,(select p.year_code from pl_exam_time p where p.id=t.exam_time_id)  year_code, ");
+		sb.append("         (select p.exam_year || '年' || decode(p.exam_month,'4','上半年','10','下半年', p.exam_month || '月') from pl_exam_time p where p.id=t.exam_time_id)  exam_year_month, ");
 
 		sb.append("         c.id                                        ");
 		sb.append("    from pl_major_course mc                          ");
 		sb.append("    left join pl_course c                            ");
 		sb.append("      on mc.course_id = c.id                         ");
-		sb.append("    left join pl_course_textbook b                   ");
-		sb.append("      on c.id = b.course_id                          ");
 		sb.append("    left join pl_textbook t                          ");
-		sb.append("      on b.textbook_id = t.id                        ");
+		sb.append("      on c.id = t.course_id and t.exam_time_id=?     ");
 		sb.append("    left join pl_major ma                            ");
 		sb.append("      on mc.major_id = ma.id                         ");
 		sb.append("   where mc.major_id= ?                              ");
 		sb.append("   order by decode(mc.course_nature,1,1,2,2,3,3,4,5,5,4), c.course_code ");
 		
-		return this.listBySql(sb.toString(), id);
+		return this.listBySql(sb.toString(), exam_time_id,id);
 	}
 	
 	/**
@@ -309,4 +307,36 @@ public class PlMajorDao extends PlatformDaoSupport<PlMajor> {
 		return this.listBySql(sb.toString(), status);
 	}
 	
+	public List<PlMajor> queryOpenMajorAndStdMajor(Integer major_id) {
+		StringBuffer sb = new StringBuffer();
+		//sb.append("  select * from (                                                                           ");
+		//sb.append("  select a.*,                                                                           ");
+		//sb.append("         a.major_code || ' | ' || a.major_name major_full_name         ");
+		//sb.append("    from pl_major a                                                                    ");
+		//sb.append("   where a.id = ?                                                                    ");
+		//sb.append("  union                                                                           ");
+		sb.append("  select a.*,                                                                           ");
+		sb.append("         a.major_code || ' | ' || a.major_name major_full_name         ");
+		sb.append("    from pl_major a                                                                    ");
+		//sb.append("   where a.status = 1                                                                    ");
+		//sb.append("   )                                                                  ");
+		sb.append("   order by major_level,major_code													");
+		
+		
+		return this.listBySql(sb.toString());
+	}
+	
+	public List<PlMajor> queryMajorByStatus(Integer status,Integer major_level) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select a.*,                                                                           ");
+		sb.append("         a.major_code || '-' || a.major_name||' | '||decode(a.major_level,1,'本科','专科') full_name         ");
+
+		sb.append("    from pl_major a                                                                    ");
+		sb.append("   where a.status = ?  and a.major_level=?                                              ");
+		sb.append("   order by a.major_level,a.major_code													");
+		
+		
+		return this.listBySql(sb.toString(), status,major_level);
+	}
+	
 }

+ 313 - 0
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlMajorPreDao.java

@@ -0,0 +1,313 @@
+package cn.hmsoft.ses.data.dao.pl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import cn.hmsoft.helper.CollectionHelper;
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.ses.data.model.pl.PlMajor;
+import cn.hmsoft.ses.data.model.pl.PlMajorPre;
+
+/**
+ * 专业信息表 dao.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-16 15:40:22
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Repository
+public class PlMajorPreDao extends PlatformDaoSupport<PlMajorPre> {
+
+	public List<PlMajorPre> queryMajor(){
+		StringBuffer sb = new StringBuffer();
+		sb.append("select a.major_code||'|'||a.major_name||'-'||decode(a.major_level,1,'本科','专科') major_full_name,a.* from pl_major_pre a where a.status=1 order by a.major_level desc ,a.major_code");
+		return this.listBySql(sb.toString());
+	}
+	
+	public List<PlMajorPre> queryAllMajor(){
+		StringBuffer sb = new StringBuffer();
+		sb.append("select a.major_code||'|'||a.major_name||'-'||decode(a.major_level,1,'本科','专科') major_full_name,a.* from pl_major_pre a order by a.major_level desc ,a.major_code");
+		return this.listBySql(sb.toString());
+	}
+	
+	/**
+	 * 构建QueryOrder(order,type)过滤.
+	 * @param year 
+	 * @param status :状态(启用和禁用)
+	 */
+	public Pager pagePlMajor(String query, Integer start, Integer limit, String order, String type, Integer major_level,
+			Integer nation_exam, Integer year, Integer status, Integer schoolId, Integer org_id, Integer is_net_exam, Integer is_live_enrol) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select m.*, s.subject_name, o.id org_id,o.org_name             ");
+		sb.append("    from pl_major_pre m                                  ");
+		sb.append("    left join pl_subject s                           ");
+		sb.append("      on m.subject_id = s.id                         ");
+		sb.append("    left join pl_school_major_pre sm                     ");
+		sb.append("      on m.major_code = sm.major_code                ");
+		sb.append("    left join cf_organization o                      ");
+		sb.append("      on sm.school_id = o.id                         ");
+		sb.append("    where 1 = 1                                      ");
+		if (StringHelper.isNotEmpty(major_level)) {
+			sb.append(" and m.major_level = " + major_level);
+		}
+		if (StringHelper.isNotEmpty(nation_exam)) {
+			sb.append(" and m.is_nation_exam = " + nation_exam);
+		}
+		if (StringHelper.isNotEmpty(year)) {
+			sb.append(" and m.year = " + year);
+		}
+		if (StringHelper.isNotEmpty(status)) {
+			sb.append(" and m.status = " + status);
+		}
+		if(StringHelper.isNotEmpty(schoolId)) {
+			sb.append(" and sm.school_id = " + schoolId);
+		}
+		if(StringHelper.isNotEmpty(org_id)) {
+			sb.append("and sm.school_id =" + org_id);
+		}
+		if (is_net_exam != null) {
+			sb.append("and m.is_net_exam =" + is_net_exam);
+		}
+		if (is_live_enrol != null) {
+			sb.append("and m.is_live_enrol =" + is_live_enrol);
+		}
+		if (StringHelper.isEmpty(query)) {
+			return this.pageMapBySql(generateQueryOrder(order, type), start, limit, sb.toString());
+		} else {
+			String value = generateLikeParamter(query);
+			sb.append(" and (m.major_code like ? or m.major_name like ? )");
+			return this.pageMapBySql(generateQueryOrder(order, type), start, limit, sb.toString(), value, value);
+		}
+	}
+
+	public List<PlMajorPre> findMajorByCode(String major_code, Integer year) {
+		String sql = "select * from pl_major_pre where major_code= ? and year = ? ";
+		return this.listBySql(sql, major_code, year);
+	}
+
+	/**
+	 * @param ids:排除的专业ID集合
+	 * @param is_new_major:是否新专业
+	 * 查询所有的专业,以年度码降序排序
+	 */
+	public List<PlMajorPre> listMajor(String ids, Integer year, Integer is_new_major) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select id,                                                                           ");
+		sb.append("         major_code,                                                                   ");
+		sb.append("         major_name,                                                                   ");
+		sb.append("         major_level,                                                                  ");
+		sb.append("         start_exam_type,                                                              ");
+		sb.append("         year,                                                                         ");
+		sb.append("         '(' || major_code || ')' || major_name || '-' || year major_full_name         ");
+		sb.append("    from pl_major_pre                                                                      ");
+		sb.append("   where status = 1                                                                    ");
+		if(StringHelper.isNotEmpty(ids)) {
+			sb.append("and id not in ("+ CollectionHelper.join(ids.split(","), ",")+")");
+		}
+		if(StringHelper.isNotEmpty(year)) {
+			sb.append(" and year = " + year);
+		}
+		if(StringHelper.isNotEmpty(is_new_major)) {
+			sb.append(" and is_new_major = " + is_new_major);
+		}
+		sb.append("order by year desc ") ;
+		return this.listBySql(sb.toString());
+	}
+
+	/**
+	 * @param id 专业ID
+	 * 根据专业ID查找相关的课程和教材
+	 */
+	public List<PlMajorPre> findCourseAndBook(Integer id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select ma.major_code,                              ");
+		sb.append("         ma.major_name,                              ");
+		sb.append("         c.course_code,                              ");
+		sb.append("         c.course_name,                              ");
+		sb.append("         c.course_score,                             ");
+		sb.append("         t.textbook_name,                            ");
+		sb.append("         t.textbook_publisher,                       ");
+		sb.append("         t.textbook_revision ,(select p.year_code from pl_exam_time p where p.id=b.exam_time_id)  year_code, ");
+		sb.append("         (select p.exam_year || '年' || decode(p.exam_month,'4','上半年','10','下半年', p.exam_month || '月') from pl_exam_time p where p.id=b.exam_time_id)  exam_year_month, ");
+
+		sb.append("         c.id                                        ");
+		sb.append("    from pl_major_course_pre mc                          ");
+		sb.append("    left join pl_course_pre c                            ");
+		sb.append("      on mc.course_id = c.id                         ");
+		sb.append("    left join pl_course_textbook_pre b                   ");
+		sb.append("      on c.id = b.course_id                          ");
+		sb.append("    left join pl_textbook_pre t                          ");
+		sb.append("      on b.textbook_id = t.id                        ");
+		sb.append("    left join pl_major_pre ma                            ");
+		sb.append("      on mc.major_id = ma.id                         ");
+		sb.append("   where mc.major_id= ?                              ");
+		sb.append("   order by decode(mc.course_nature,1,1,2,2,3,3,4,5,5,4), c.course_code ");
+		
+		return this.listBySql(sb.toString(), id);
+	}
+	
+	/**
+	 * 查找专业所有的ID
+	 * @param year 
+	 */
+	public String[] listMajorIds(Integer year) {
+		String temp = "";
+		List<PlMajorPre> list = this.listBySql("select id from pl_major_pre where year = ? ", year);
+		for (PlMajorPre major : list) {
+			temp = temp+major.getId()+",";
+		}
+		return  (temp.substring(0, temp.length() - 1)).split(",");
+	}
+	
+	/**
+	 * 根据ID查找专业信息,主要是把学科的父ID查出来
+	 */
+	public PlMajorPre findMajor(Integer id) {
+		String sql = "select m.*, s.pid subject_pid,s.subject_name from pl_major_pre m left join pl_subject s on m.subject_id = s.id where m.id = ?";
+		return this.findBySql(sql, id);
+	}
+	
+	/**
+	 * 根据ID查找专业主考学校
+	 */
+	public PlMajorPre findMajorSchool(Integer exam_time_id,Integer org_id,Integer major_id,Integer school_id) {
+		String sql = "select o.org_code,o.org_name from by_apply a,cf_organization o  where o.id=a.school_id and  a.exam_time_id=? and a.major_id=? and a.status in (2,3,5) and rownum=1";
+		if(null != org_id){
+			sql += " and a.org_id="+org_id;
+		}
+		
+		if(null != school_id){
+			sql += " and a.school_id="+school_id;
+		}
+
+		return this.findBySql(sql, exam_time_id,major_id);
+	}
+
+	/**
+	 * @param course_ids
+	 * @param major_id:排除的专业ID
+	 * 查询含有相应课程的专业信息
+	 */
+	public List<PlMajorPre> listMajor(Integer[] course_ids, Integer major_id) {
+		String ids = CollectionHelper.join(course_ids, ",");
+		StringBuffer sb = new StringBuffer();
+		sb.append(" select m.*                                    ");
+		sb.append("   from (select major_id, count(1) num         ");
+		sb.append("           from pl_major_course_pre                ");
+		sb.append("          where major_id != ?                  ");
+		sb.append("            and course_id in ( " + ids + " )   ");
+		sb.append("          group by major_id                    ");
+		sb.append("         having count(1) = ? ) t,              ");
+		sb.append("        pl_major_pre m                             ");
+		sb.append("  where t.major_id = m.id                      ");
+		return this.listBySql(sb.toString(), major_id, course_ids.length);
+	}
+	
+	/**
+	 * @param start_exam_type:开考类型
+	 * @return 根据开考类型-查找专业列表
+	 */
+	public List<PlMajorPre> listMajor(Integer start_exam_type) {
+		String sql = "select * from pl_major_pre where status = 1 and start_exam_type = ? ";
+		return this.listBySql(sql, start_exam_type);
+	}
+
+	/**
+	 * @param major_code:专业代码
+	 * @param major_name:专业名称
+	 * @return
+	 */
+	public List<PlMajorPre> listPlMajor(String major_code, String major_name) {
+		String sql = "select * from pl_major_pre where major_code = ? and major_name = ? and status=1 ";
+		return this.listBySql(sql, major_code, major_name);
+	}
+	
+	
+	/**
+	 * @param id:主键ID
+	 * @return
+	 */
+	public PlMajorPre findMajorAndSchool(Integer id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select m.*, org.id org_id,org.org_code, org.org_name,mo.old_major_status      ");
+		sb.append("    from pl_major_pre m                                 ");
+		sb.append("    left join pl_school_major_pre sm                    ");
+		sb.append("      on m.major_code = sm.major_code               ");
+		sb.append("    left join cf_organization org                   ");
+		sb.append("      on sm.school_code = org.org_code              ");
+		sb.append("     and org.org_type = 1                           ");
+		sb.append("    left join pl_major_old_new mo                   ");
+		sb.append("     on mo.old_major_id = m.id                      ");
+		sb.append("   where m.id = ?                                   ");
+		return this.findBySql(sb.toString(), id);
+	}
+	
+	
+	/**
+	 * @return  命题导出:专业信息
+	 */
+	public List<PlMajorPre> listMajor() {
+		String sql = "       select distinct m.major_code,m.major_name,m.major_standard_code,m.major_standard_name,decode(m.major_level,0,'专科','本科') remark,(select sm.school_code from pl_school_major_pre sm where sm.major_code=m.major_code and rownum=1)||'' org_name from pl_major_pre m where status = 1 order by major_code       ";
+		return this.listBySql(sql);
+	}
+
+	public List<PlMajorPre> listMajorIsAllowGraduate(Integer isAllowFlag) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select id,                                                                           ");
+		sb.append("         major_code,                                                                   ");
+		sb.append("         major_name,                                                                   ");
+		sb.append("         major_level,                                                                  ");
+		sb.append("         start_exam_type,                                                              ");
+		sb.append("         year,                                                                         ");
+		sb.append("         '(' || major_code || ')' || major_name major_full_name         ");
+		sb.append("    from pl_major_pre                                                                      ");
+		sb.append("   where status = 1                                                                    ");
+		sb.append("     and is_allow_graduate=?															  ");
+		
+		return this.listBySql(sb.toString(), isAllowFlag);
+	}
+	
+	public List<PlMajorPre> listMajorByOrgId(Integer exam_time_id,Integer org_id,Integer isAllowFlag) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select id,                                                                           ");
+		sb.append("         major_code,                                                                   ");
+		sb.append("         major_name,                                                                   ");
+		sb.append("         major_level,                                                                  ");
+		sb.append("         start_exam_type,                                                              ");
+		sb.append("         year,                                                                         ");
+		sb.append("         '(' || major_code || ')' || major_name major_full_name         ");
+		sb.append("    from pl_major_pre a                                                                    ");
+		sb.append("   where status = 1                                                                    ");
+		sb.append("     and is_allow_graduate=?															  ");
+		sb.append("     and exists (select * from by_apply b where b.major_id=a.id  ");
+		if(null != exam_time_id){
+			sb.append("    and b.exam_time_id=").append(exam_time_id);
+		}
+		
+		if(null != org_id){
+			sb.append(" and b.org_id=").append(org_id);
+		}
+		
+		sb.append(" ) ");
+		
+		return this.listBySql(sb.toString(), isAllowFlag);
+	}
+	
+	public List<PlMajorPre> queryMajorByStatus(Integer status) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select a.*,                                                                           ");
+		sb.append("         a.major_code || ' | ' || a.major_name major_full_name         ");
+		sb.append("    from pl_major_pre a                                                                    ");
+		sb.append("   where a.status = ?                                                                    ");
+		sb.append("   order by a.major_level,a.major_code													");
+		
+		
+		return this.listBySql(sb.toString(), status);
+	}
+	
+}

+ 14 - 16
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlMergePublishPlanDao.java

@@ -131,40 +131,38 @@ public class PlMergePublishPlanDao extends PlatformDaoSupport<PlMergePublishPlan
 		}
 	}
 	
-	public Pager courseTextbookPage(String query, Integer isNationExam, Integer examYear, Integer examMonth, String exam_time,Integer limit,Integer start) {
+	public Pager queryCourseTextbook(String query, Integer isNationExam, Integer exam_time_id, String exam_time) {
 		StringBuilder sql = new StringBuilder();
-		sql.append("select distinct c.*,v.textbook_code,v.textbook_name,v.textbook_writer,v.textbook_publisher,v.textbook_revision, v.year_code,  ");
-		sql.append("       decode(v.exam_year,null,v.year_code||'',v.exam_year || '年' || decode(v.exam_month,'4','上半年','10','下半年', v.exam_month || '月')) exam_year_month           ");
-
-		sql.append(" from pl_merge_publish_plan p,pl_exam_time e,pl_course c,(select t.*,l.course_id,et.year_code,et.exam_year,et.exam_month from pl_course_textbook_log l,pl_textbook t,pl_exam_time et where l.exam_time_id=et.id and l.textbook_id=t.id and et.year_code>202001) v ");
+		sql.append("select distinct c.course_code,c.course_name,c.course_score,v.textbook_code,v.textbook_name,v.textbook_writer,v.textbook_publisher,v.textbook_revision,v.textbook_outline, e.year_code,  ");
+		sql.append("       decode(e.exam_year,null,e.year_code||'',e.exam_year || '年' || decode(e.exam_month,'4','上半年','10','下半年', e.exam_month || '月')) exam_year_month           ");
+		sql.append(" from pl_merge_publish_plan p ");
+		sql.append("  left join pl_course c on p.course_id=c.id  ");
+		sql.append(" left join pl_exam_time e on p.exam_time_id=e.id ");
+		sql.append(" left join pl_textbook v on (c.id = v.course_id and v.exam_time_id=e.id) ");
 		sql.append(" where p.exam_time_id=e.id ");
-		sql.append(" and p.course_id=c.id ");
-		sql.append(" and v.course_id=c.id ");
-		sql.append(" and v.year_code<=e.year_code ");
-		sql.append(" and e.exam_year=?  ");
+		sql.append(" and p.exam_time_id=?  ");
 
 		if (isNationExam != null) {
 			sql.append(" and p.is_nation_exam=").append(isNationExam);
 		}
 		
-		if (examMonth != null) {
-			sql.append(" and e.exam_month=").append(examMonth);
-		}
+		
 		if (StringHelper.isNotEmpty(exam_time)) {
 			sql.append(" and p.exam_time='").append(exam_time).append("'");
 		}
 		
 		if (StringHelper.isEmpty(query)) {
-			sql.append(" order by  c.course_code,v.year_code desc ");
-			return this.pageMapBySql(start, limit, sql.toString(),examYear);
+			sql.append(" order by  c.course_code,e.year_code desc ");
+			return this.pageMapBySql(0,Integer.MAX_VALUE,sql.toString(),exam_time_id);
 		} else {
 			String value = generateLikeParamter(query);
 			sql.append(" and (c.course_code like ? or c.course_name like ?)");
-			sql.append(" order by  c.course_code,v.year_code desc ");
-			return this.pageMapBySql(start, limit, sql.toString(),examYear, value, value);
+			sql.append(" order by  c.course_code,e.year_code desc ");
+			return this.pageMapBySql(0,Integer.MAX_VALUE,sql.toString(),exam_time_id, value, value);
 		}
 	}
 	
+	
 	public List<PlMergePublishPlan> getExamDate(String currentYearCode) {
 		StringBuffer sb = new StringBuffer();
 		sb.append("  select distinct p.exam_time, t.id exam_time_id,                                                               ");

+ 66 - 0
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlSchoolMajorPreDao.java

@@ -0,0 +1,66 @@
+package cn.hmsoft.ses.data.dao.pl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import cn.hmsoft.ses.data.model.pl.PlSchoolMajorPre;
+
+/**
+ * 专业对应的主考学校 主考学校开考了哪些专业 数据库处理.
+ * 
+ * @author: haoguanghui
+ * @date: 2019-06-04 15:53:34
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Repository
+public class PlSchoolMajorPreDao extends PlatformDaoSupport<PlSchoolMajorPre> {
+
+	/**
+	 * 构建QueryOrder(order,type)过滤.
+	 * 
+	 * @param query
+	 * @param start
+	 * @param limit
+	 * @param order
+	 * @param type
+	 * @return
+	 */
+	public Pager page(String query, Integer start, Integer limit, QueryOrder queryOrder) {
+		String sql = "select * from pl_school_major_pre ";
+		if (StringHelper.isEmpty(query)) {
+			return this.pageMapBySql(queryOrder, start, limit, sql);
+		} else {
+			return this.pageMapBySql(queryOrder, start, limit, sql + "where 1 like ?", generateLikeParamter(query));
+		}
+	}
+
+	public PlSchoolMajorPre findSchoolMajor(Integer school_id, String major_code) {
+		String sql = "select * from pl_school_major_pre where school_id = ? and major_code = ?";
+		return this.findBySql(sql, school_id, major_code);
+	}
+
+	public List<PlSchoolMajorPre> listSchoolMajor(String major_code) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select sm.*, org.org_name                              ");
+		sb.append("    from pl_school_major_pre sm, cf_organization org         ");
+		sb.append("   where sm.school_id = org.id                           ");
+		sb.append("     and sm.major_code = ?                               ");
+		return this.listBySql(sb.toString(), major_code);
+	}
+
+	public void updateSchoolMajorByMajorCode(String major_code, Integer org_id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append(
+				"update pl_school_major_pre a set a.school_id=?,a.school_code=(select o.org_code from cf_organization o where o.id=?) where a.major_code=?");
+		this.updateBySql(sb.toString(), org_id, org_id, major_code);
+
+	}
+
+}

+ 14 - 9
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlStdRecordDao.java

@@ -35,7 +35,7 @@ public class PlStdRecordDao extends PlatformDaoSupport<PlStdRecord> {
 	 * @return 分页查询专本衔接考生和网络助学考生
 	 */
 	public Pager page(String query, Integer start, Integer limit, QueryOrder queryOrder, Integer year_code,
-			Integer status, Integer mk_id, Integer school_id,Integer std_type, Integer join_school_id,String remark,String is_xj) {
+			Integer status, Integer mk_id, Integer school_id,Integer std_type, Integer join_school_id,String remark,String is_xj,String major_code) {
 		
 		StringBuffer sb = new StringBuffer();
 		sb.append(getSql());
@@ -62,6 +62,10 @@ public class PlStdRecordDao extends PlatformDaoSupport<PlStdRecord> {
 			sb.append(" and r.status=1 and r.yxmc is null ");
 		}
 		
+		if(StringHelper.isNotEmpty(major_code)) {
+			sb.append(" and r.join_major_code = '").append(major_code).append("' ");
+		}
+		
 		if (StringHelper.isEmpty(query)) {
 			return this.pageMapBySql(queryOrder, start, limit, sb.toString(), school_id, std_type);
 		} else {
@@ -177,7 +181,7 @@ public class PlStdRecordDao extends PlatformDaoSupport<PlStdRecord> {
 		sb.append("    from pl_std_record r                                             ");
 		sb.append("    left join cf_organization o                                      ");
 		sb.append("      on (r.school_id = o.id and o.org_type = 1)                     ");
-		sb.append("    left join pl_major_record d                                      ");
+		sb.append("    left join (select id,major_id from pl_major_record union all select id,id major_id from pl_major) d                                      ");
 		sb.append("      on r.major_record_id = d.id                                    ");
 		sb.append("    left join cf_organization org                 ");
 		sb.append("      on r.join_school_id = org.id                ");
@@ -259,7 +263,7 @@ public class PlStdRecordDao extends PlatformDaoSupport<PlStdRecord> {
 		sb.append("          on (r.school_id = o.id)    ");
 		sb.append("        left join cf_organization org                                     ");
 		sb.append("          on (r.join_school_id = org.id)                      ");
-		sb.append("        left join pl_major_record d                                      ");
+		sb.append("        left join (select id,major_id from pl_major_record union all select id,id major_id from pl_major) d                                      ");
 		sb.append("          on r.major_record_id = d.id                                    ");
 		sb.append("        left join (select maj.*                                          ");
 		sb.append("                     from pl_major maj                                   ");
@@ -435,7 +439,7 @@ public class PlStdRecordDao extends PlatformDaoSupport<PlStdRecord> {
 		sb.append("      on (r.school_id = o.id )                             					");
 		sb.append("    left join cf_organization org                                            ");
 		sb.append("      on (r.join_school_id = org.id)                   					    ");
-		sb.append("    left join pl_major_record d                                              ");
+		sb.append("    left join (select id,major_id from pl_major_record union all select id,id major_id from pl_major) d                                              ");
 		sb.append("      on r.major_record_id = d.id                                            ");
 		sb.append("    left join pl_major m                                                     ");
 		sb.append("      on d.major_id = m.id                                                   ");
@@ -513,7 +517,7 @@ public class PlStdRecordDao extends PlatformDaoSupport<PlStdRecord> {
 		sb.append("         sr.std_name,                                                          ");
 		sb.append("         '(' || sr.join_major_code || ')' || m.major_name major_full_name            ");
 		sb.append("    from pl_std_record sr                                                      ");
-		sb.append("    left join pl_major_record mr                                               ");
+		sb.append("    left join (select id,major_id from pl_major_record union all select id,id major_id from pl_major) mr                                               ");
 		sb.append("      on sr.major_record_id = mr.id                                            ");
 		sb.append("    left join pl_major m                                                       ");
 		sb.append("      on sr.join_major_code = m.major_code                                                    ");
@@ -588,11 +592,12 @@ public class PlStdRecordDao extends PlatformDaoSupport<PlStdRecord> {
 		sb.append(" select a.*,(select o.org_name from cf_organization o where o.id=a.school_id) org_name from pl_std_record a where a.ticket_no=? and a.std_type=?");
 		// 如果存在专本衔接备案,但已经有本科毕业,则允许网络助学考生备案 by蒋小兵 20230321
 		sb.append(" and not exists (select * from by_apply b,pl_major m where m.id=b.major_id and b.status in (3,5) and m.major_level=1 and a.std_reg_id=b.std_id)");
-		// 如果存在专本衔接备案,但备案已经超过7年(大于等于7年),以考生专本衔接备案批次为依据,则允许网络助学考生备案。
-		// 如:如现在进行202304网络助学考生备案,则2017年04批次或以前专本衔接考生备案的考生,可以进行网络助学考生备案。
-		sb.append(" and a.year_code>to_char(ADD_MONTHS(to_date(substr(?,1,4),'YYYY'), -12*6),'yyyy')||substr(?,5,6)");
+		// 如果存在专本衔接备案,但备案已经超过7年(大于等于7年),以考生专本衔接备案批次为依据,则允许网络助学考生备案。--作废
+		// 如:如现在进行202304网络助学考生备案,则2017年04批次或以前专本衔接考生备案的考生,可以进行网络助学考生备案。--作废
+		// 梁有日:20241126 只要有专本衔接备案就不允许网络助学备案
+		//sb.append(" and a.year_code>to_char(ADD_MONTHS(to_date(substr(?,1,4),'YYYY'), -12*6),'yyyy')||substr(?,5,6)");
 
-		return this.listBySql(sb.toString(),ticket_no,apply_form,year_code,year_code);
+		return this.listBySql(sb.toString(),ticket_no,apply_form);
 	}
 
 	public List<PlStdRecord> findStdRecord(String ticket_no, String join_major_code, Integer apply_form){

+ 73 - 33
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlTextbookDao.java

@@ -1,6 +1,7 @@
 package cn.hmsoft.ses.data.dao.pl;
 
 import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
 import cn.hmsoft.helper.StringHelper;
 
 import java.util.List;
@@ -29,61 +30,100 @@ public class PlTextbookDao extends PlatformDaoSupport<PlTextbook> {
 	 * @param type
 	 * @return
 	 */
-	public Pager pagePlTextbook(String query, Integer start, Integer limit, String order, String type, Integer status,Integer exam_time_id) {
+	public Pager pagePlTextbook(String query, Integer start, Integer limit, QueryOrder queryOrder, Integer status,Integer exam_time_id,Integer is_unified) {
 		StringBuffer sb = new StringBuffer();
 		sb.append("  select t.*, c.course_code, c.course_name, et.year_code,        ");
 		sb.append("       decode(et.exam_year,null,et.year_code||'',et.exam_year || '年' || decode(et.exam_month,'4','上半年','10','下半年', et.exam_month || '月')) exam_year_month           ");
 
-		sb.append("    from pl_textbook t                                          ");
-		sb.append("    left join pl_course_textbook ct                             ");
-		sb.append("      on t.id = ct.textbook_id                                  ");
-		sb.append("    left join pl_course c                                       ");
-		sb.append("      on ct.course_id = c.id                                    ");
-		sb.append("    left join pl_exam_time et                                   ");
-		sb.append("      on ct.exam_time_id = et.id                                ");
-		sb.append("   where 1 = 1                                                  ");
-		if(StringHelper.isNotEmpty(status)) {
+		sb.append("    from pl_textbook t,pl_course c,pl_exam_time et                                         ");
+		sb.append("   where c.id=t.course_id and t.exam_time_id=et.id                                         ");
+		if(null != status) {
 			sb.append("and t.status= " + status);
 		}
-		if(StringHelper.isNotEmpty(exam_time_id)) {
+		if(null != exam_time_id) {
 			sb.append(" and et.id=" + exam_time_id);
 		}
 		
+		
+		if(null != is_unified && is_unified.intValue() == 0) {
+			sb.append(" and not exists (select * from pl_merge_publish_plan p where p.course_id=t.course_id ");
+			if(null != exam_time_id) {
+				sb.append(" and p.exam_time_id=t.exam_time_id ");
+			}
+			
+			sb.append(" ) ");
+		}
+		
+		if(null != is_unified && is_unified.intValue() == 1) {
+			sb.append(" and exists (select * from pl_merge_publish_plan p where p.course_id=t.course_id ");
+			if(null != exam_time_id) {
+				sb.append(" and p.exam_time_id=t.exam_time_id ");
+			}
+			
+			sb.append(" ) ");
+			
+		}
+		
 		if (StringHelper.isEmpty(query)) {
-			return this.pageMapBySql(generateQueryOrder(order, type), start, limit, sb.toString());
+			return this.pageMapBySql(queryOrder, start, limit, sb.toString());
 		} else {
 			String value = generateLikeParamter(query);
-			sb.append("and (textbook_name like ? or textbook_publisher like ? ");
-			sb.append(" or textbook_writer like ? or textbook_code like ? ");
+			sb.append("and (t.textbook_name like ? or t.textbook_publisher like ? ");
+			sb.append(" or t.textbook_writer like ? or t.textbook_code like ? ");
 			sb.append(" or c.course_code like ? or c.course_name like ? )");
-			return this.pageMapBySql(generateQueryOrder(order, type), start, limit, sb.toString(), 
+			return this.pageMapBySql(queryOrder, start, limit, sb.toString(), 
 					value, value, value, value, value, value);
 		}
 	}
 	
+	/**
+	 * @param query
+	 * @param start
+	 * @param limit
+	 * @param order
+	 * @param type
+	 * @return
+	 */
+	public Pager pagePlTextbookForUnified(Integer start, Integer limit, QueryOrder queryOrder, Integer exam_time_id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select c.course_code,c.course_name,'' textbook_name,'' textbook_outline,'' textbook_writer,'' textbook_publisher,'' textbook_revision, p.year_code from pl_merge_publish_plan p,pl_course c where c.id=p.course_id and p.exam_time_id= ?  ");
+		sb.append(" and not exists (select * from pl_textbook t where t.exam_time_id=p.exam_time_id and t.course_id=c.id) ");
+		return this.pageMapBySql(queryOrder, start, limit, sb.toString(),exam_time_id);
+	}
+	
+	
 	public List<PlTextbook> queryPlTextBookByExamYear(Integer exam_year){
 		StringBuffer sb = new StringBuffer();
-		/*sb.append("  select *  ");
-		sb.append("    from pl_textbook a  ");
-		sb.append("   where exists (select 1  ");
-		sb.append("            from pl_course_textbook_log b, pl_exam_time e,pl_merge_publish_plan p  ");
-		sb.append("           where a.id = b.textbook_id  ");
-		sb.append("             and p.exam_time_id=e.id  ");
-		sb.append("             and p.course_id=b.course_id  ");
-		sb.append("             and b.exam_time_id = e.id  ");
-		sb.append("             and e.exam_year = ?)  ");
-		sb.append("   order by a.textbook_code  ");*/
 		
-		sb.append(" select a.*,ep.course_id,to_char(t.year_code) year_code  ");
-		sb.append(" from pl_textbook a ,pl_course_textbook_log b,pl_exam_time t, (select distinct p.course_id from pl_exam_time e,pl_merge_publish_plan p where p.exam_time_id=e.id and e.exam_year=?) ep ");
-		sb.append(" where a.id = b.textbook_id  ");
-		sb.append(" and ep.course_id=b.course_id ");
-		sb.append(" and t.id=b.exam_time_id ");
-		sb.append(" and t.year_code>202001 and t.exam_year<=?");
-		sb.append(" order by ep.course_id,t.year_code desc ");
+		sb.append(" select a.*,to_char(t.year_code) year_code  ");
+		sb.append(" from pl_textbook a ,pl_exam_time t ");
+		sb.append(" where t.id=a.exam_time_id ");
+		sb.append(" and t.exam_year=?");
+		sb.append(" order by a.course_id,t.year_code desc ");
 		
 		
-		return this.listBySql(sb.toString(), exam_year,exam_year);
+		return this.listBySql(sb.toString(), exam_year);
+	}
+	
+	public PlTextbook queryPlTextBookByCourseAndExamYear(Integer course_id,Integer exam_time_id){
+		StringBuffer sb = new StringBuffer();
+		sb.append(" select * from pl_textbook a where a.exam_time_id=? and a.course_id=?  ");
+		
+		return this.findBySql(sb.toString(), exam_time_id,course_id);
+	}
+	
+	public void publishPlTextbook(Integer exam_time_id){
+		StringBuffer sb = new StringBuffer();
+		sb.append(" update pl_textbook a set a.status=1 where a.exam_time_id=?  ");
+		this.updateBySql(sb.toString(), exam_time_id);
 	}
 	
+	public void regressionPlTextbook(Integer exam_time_id){
+		StringBuffer sb = new StringBuffer();
+		sb.append(" update pl_textbook a set a.status=0 where a.exam_time_id=?  ");
+		this.updateBySql(sb.toString(), exam_time_id);
+	}
+	
+	
+	
 }

+ 92 - 0
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/pl/PlTextbookPreDao.java

@@ -0,0 +1,92 @@
+package cn.hmsoft.ses.data.dao.pl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.ses.data.model.pl.PlTextbookPre;
+
+/**
+ * 教材表 旧表-jc_jiaocai 数据库处理.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-17 14:49:52
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Repository
+public class PlTextbookPreDao extends PlatformDaoSupport<PlTextbookPre> {
+
+	/**
+	 * @param query
+	 * @param start
+	 * @param limit
+	 * @param order
+	 * @param type
+	 * @return
+	 */
+	public Pager pagePlTextbook(String query, Integer start, Integer limit, String order, String type, Integer status,
+			Integer exam_time_id) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("  select t.*, c.course_code, c.course_name, et.year_code,        ");
+		sb.append(
+				"       decode(et.exam_year,null,et.year_code||'',et.exam_year || '年' || decode(et.exam_month,'4','上半年','10','下半年', et.exam_month || '月')) exam_year_month           ");
+
+		sb.append("    from pl_textbook_pre t                                          ");
+		sb.append("    left join pl_course_textbook_pre ct                             ");
+		sb.append("      on t.id = ct.textbook_id                                  ");
+		sb.append("    left join pl_course_pre c                                       ");
+		sb.append("      on ct.course_id = c.id                                    ");
+		sb.append("    left join pl_exam_time et                                   ");
+		sb.append("      on ct.exam_time_id = et.id                                ");
+		sb.append("   where 1 = 1                                                  ");
+		if (StringHelper.isNotEmpty(status)) {
+			sb.append("and t.status= " + status);
+		}
+		if (StringHelper.isNotEmpty(exam_time_id)) {
+			sb.append(" and et.id=" + exam_time_id);
+		}
+
+		if (StringHelper.isEmpty(query)) {
+			return this.pageMapBySql(generateQueryOrder(order, type), start, limit, sb.toString());
+		} else {
+			String value = generateLikeParamter(query);
+			sb.append("and (textbook_name like ? or textbook_publisher like ? ");
+			sb.append(" or textbook_writer like ? or textbook_code like ? ");
+			sb.append(" or c.course_code like ? or c.course_name like ? )");
+			return this.pageMapBySql(generateQueryOrder(order, type), start, limit, sb.toString(), value, value, value,
+					value, value, value);
+		}
+	}
+
+	public List<PlTextbookPre> queryPlTextBookByExamYear(Integer exam_year) {
+		StringBuffer sb = new StringBuffer();
+		/*
+		 * sb.append("  select *  "); sb.append("    from pl_textbook a  ");
+		 * sb.append("   where exists (select 1  "); sb.
+		 * append("            from pl_course_textbook_log b, pl_exam_time e,pl_merge_publish_plan p  "
+		 * ); sb.append("           where a.id = b.textbook_id  ");
+		 * sb.append("             and p.exam_time_id=e.id  ");
+		 * sb.append("             and p.course_id=b.course_id  ");
+		 * sb.append("             and b.exam_time_id = e.id  ");
+		 * sb.append("             and e.exam_year = ?)  ");
+		 * sb.append("   order by a.textbook_code  ");
+		 */
+
+		sb.append(" select a.*,ep.course_id,to_char(t.year_code) year_code  ");
+		sb.append(
+				" from pl_textbook_pre a ,pl_course_textbook_log_pre b,pl_exam_time t, (select distinct p.course_id from pl_exam_time e,pl_merge_publish_plan p where p.exam_time_id=e.id and e.exam_year=?) ep ");
+		sb.append(" where a.id = b.textbook_id  ");
+		sb.append(" and ep.course_id=b.course_id ");
+		sb.append(" and t.id=b.exam_time_id ");
+		sb.append(" and t.year_code>202001 and t.exam_year<=?");
+		sb.append(" order by ep.course_id,t.year_code desc ");
+
+		return this.listBySql(sb.toString(), exam_year, exam_year);
+	}
+
+}

+ 20 - 0
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/std/StdBreakDisciplineFileDao.java

@@ -0,0 +1,20 @@
+package cn.hmsoft.ses.data.dao.std;
+
+import org.springframework.stereotype.Repository;
+
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.ses.data.model.std.StdBreakDisciplineFile;
+
+@Repository
+public class StdBreakDisciplineFileDao extends PlatformDaoSupport<StdBreakDisciplineFile> {
+
+	public StdBreakDisciplineFile queryStdBreakDisciplineFile(String ticket_no, Integer exam_time_id,String file_type) {
+		String sql = "select a.*,t.exam_year || '年' || decode(t.exam_month,'4','上半年','10','下半年', t.exam_month || '月') exam_year_month from std_break_discipline_file a,pl_exam_time t where t.id=a.exam_time_id and a.ticket_no=? and a.exam_time_id=? and a.file_type=? ";
+		return this.findBySql(sql, ticket_no, exam_time_id,file_type);
+	}
+	
+	public void deleteStdBreakDisciplineFile(String ticket_no, Integer exam_time_id,String file_type) {
+		String sql = "delete from std_break_discipline_file a where  a.ticket_no=? and a.exam_time_id=? and a.file_type=? ";
+		this.updateBySql(sql, ticket_no, exam_time_id,file_type);
+	}
+}

+ 10 - 2
ses-manage/src/main/java/cn/hmsoft/ses/data/dao/std/StdEnrolDao.java

@@ -1182,6 +1182,14 @@ public class StdEnrolDao extends PlatformDaoSupport<StdEnrol> {
 		return this.listMapBySql(sql.toString(), Integer.parseInt(course_id), exam_time_id, std_id);
 	}
 	
+	public List<Map<String, Object>> getStdCourseUnitMapForComputerTest(Integer exam_time_id,String ticket_no) { 
+		StringBuilder sql = new StringBuilder();
+		sql.append("select c.id course_id,c.course_code,c.course_name,d.org_code,d.exam_date,d.unit_name,d.seat_no,d.room_code,d.address,(select decode(count(1),0,'',c.course_code||'-'||c.course_name) from pl_course_calculator pc where pc.course_id=c.id) calculator from kw_layout_detail_computer d,pl_course c where c.course_code=d.course_code and d.exam_time_id=? and d.ticket_no=? order by d.exam_date ");
+
+		return this.listMapBySql(sql.toString(), exam_time_id, ticket_no);
+	}
+	
+	
 	/**
 	 *佳发编排,获取编排后的准考证信息
 	 * @param exam_time_id
@@ -1592,14 +1600,14 @@ public class StdEnrolDao extends PlatformDaoSupport<StdEnrol> {
 	public void updateKwLayoutDetailUploadQk(Integer year_code){
 		StringBuffer sql = new StringBuffer();
 		sql.append("  update kw_layout_detail_upload a set a.bk_qk=1 where a.bk_cj=-9");
-		this.updateBySql(sql.toString(), year_code,year_code);
+		this.updateBySql(sql.toString());
 		
 	}
 	
 	public void updateKwLayoutDetailUploadWj(Integer year_code){
 		StringBuffer sql = new StringBuffer();
 		sql.append("  update kw_layout_detail_upload a set a.bk_wj=decode(bk_cj,-1,'75',-3,'59','00')  where a.bk_cj in (-1,-3)");
-		this.updateBySql(sql.toString(), year_code,year_code);
+		this.updateBySql(sql.toString());
 		
 	}
 	

+ 2 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/by/IByApplyService.java

@@ -91,4 +91,6 @@ public interface IByApplyService extends IBaseService<ByApply> {
 	String setStdByPhoto(Integer id);
 	
 	String batchSubmitApply(Integer exam_time_id, Integer std_source, Integer school_id,Integer order_org_id,CfOrganization curOrg);
+	
+	List<ByApply> queryIsAlreadyBy(Integer std_id,Integer major_id);
 }

+ 28 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/by/IByCourseReplDetailPreService.java

@@ -0,0 +1,28 @@
+package cn.hmsoft.ses.service.iface.by;
+
+import java.util.List;
+
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import cn.hmsoft.ses.data.model.by.ByCourseReplDetailPre;
+import cn.hmsoft.web.service.IBaseService;
+
+/**
+ * 课程顶替详情表 服务接口.
+ * 
+ * @author: haoguanghui
+ * @date: 2019-01-07 16:16:11
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+public interface IByCourseReplDetailPreService extends IBaseService<ByCourseReplDetailPre> {
+
+	Pager page(String query, Integer start, Integer limit, Integer major_id, Integer old_course_id,
+			Integer repl_course_id, QueryOrder queryOrder);
+
+	void insertReplyDetail(ByCourseReplDetailPre byCourseReplDetail);
+
+	List<ByCourseReplDetailPre> listCourseReplDetail();
+
+}

+ 3 - 3
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/by/IByDiaplmaService.java

@@ -38,10 +38,10 @@ public interface IByDiaplmaService extends IBaseService<ByDiaplma> {
 	
 	String buildDiaplmaNo(Integer std_id, Integer major_id);
 
-	File getNameListPdf(Integer examTimeId, Integer majorId, Integer orgId, Integer schoolId);
-	List<List<Object>> getNameListXls(Integer examTimeId, Integer majorId, Integer orgId, Integer schoolId);
+	File getNameListPdf(Integer examTimeId, Integer majorId, Integer orgId, Integer schoolId,Integer status);
+	List<List<Object>> getNameListXls(Integer examTimeId, Integer majorId, Integer orgId, Integer schoolId,Integer status);
 
-	Pager nameListPage(String query, Integer exam_time_id, Integer org_id, Integer school_id, Integer major_id, Integer std_source, Integer start,
+	Pager nameListPage(String query, Integer exam_time_id, Integer org_id, Integer school_id, Integer major_id, Integer std_source,Integer status, Integer start,
 			Integer limit, QueryOrder queryOrder);
 
 	File exportCardCorePdf(String query, Integer exam_time_id, String org_id, Integer school_id,Integer major_id,boolean is_city) throws DocumentException, IOException;

+ 55 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlCoursePreService.java

@@ -0,0 +1,55 @@
+package cn.hmsoft.ses.service.iface.pl;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.ses.data.model.pl.PlCoursePre;
+import cn.hmsoft.web.service.IBaseService;
+
+/**
+ * 课程表 服务接口.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-16 21:08:14
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+public interface IPlCoursePreService extends IBaseService<PlCoursePre> {
+
+	Pager pagePlMergePublishPlan(String query, Integer year_code, String exam_batch, Integer start, Integer limit);
+
+	Pager pagePlCourse(String query, Integer start, Integer limit, String order, String type, Integer is_nation_exam,
+			Integer special_flag, Integer course_filter, Integer stauts, Integer is_net_mark);
+
+	List<PlCoursePre> listCourseByCode(String course_code);
+
+	List<PlCoursePre> listCourse(String ids, Integer specialFlag, Integer exam_time_id);
+
+	List<PlCoursePre> listCourse(String courseCode, String courseName);
+
+	PlCoursePre findCourse(String courseCode, Integer specialFlag);
+
+	PlCoursePre queryCourseBycourseCode(String courseCode);
+
+	List<PlCoursePre> listCourse();
+
+	List<PlCoursePre> listCourseByExamTimeId(Integer exam_time_id);
+
+	List<PlCoursePre> listCourseByType(Integer course_exam_type, Integer special_flag);
+
+	File exportCourse(Integer exam_year);
+
+	File exportCourseDbf(String year_code);
+
+	List<Map<String, Object>> listCourseDbf(String year_code);
+
+	List<PlCoursePre> listCourseByMajorId(Integer major_id);
+
+	List<PlCoursePre> listCourseBymajorIdForCommunicate(Integer major_id, Integer school_id);
+
+	List<PlCoursePre> listCourseByName(String name);
+
+}

+ 31 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlCourseTextbookLogPreService.java

@@ -0,0 +1,31 @@
+package cn.hmsoft.ses.service.iface.pl;
+
+import java.util.List;
+
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbookLogPre;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbookPre;
+import cn.hmsoft.web.service.IBaseService;
+
+/**
+ * 课程教材关联历史表 服务接口.
+ * 
+ * @author: haoguanghui
+ * @date: 2019-01-25 11:06:51
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+public interface IPlCourseTextbookLogPreService extends IBaseService<PlCourseTextbookLogPre> {
+
+	Pager page(String query, Integer start, Integer limit, QueryOrder queryOrder);
+
+	void insertCourseTextBookLog(Integer course_id, Integer type);
+
+	List<PlCourseTextbookLogPre> listCourseTextbookLog(Integer course_id);
+	List<PlCourseTextbookLogPre> listCourseTextbookLog(Integer course_id,Integer exam_time_id) ;
+
+	void insertCourseTextBookLog(PlCourseTextbookPre courseTextbook, Integer type);
+	void synTextbookLog(Integer exam_time_id,Integer old_exam_time_id,String optr);
+}

+ 35 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlCourseTextbookPreService.java

@@ -0,0 +1,35 @@
+package cn.hmsoft.ses.service.iface.pl;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbookPre;
+import cn.hmsoft.web.service.IBaseService;
+
+/**
+ * 课程教材关联表 课程对应的教材,一门课程可以对应多个教材 服务接口.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-17 15:55:47
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+public interface IPlCourseTextbookPreService extends IBaseService<PlCourseTextbookPre> {
+
+	Pager pagePlCourseTextbook(String query, Integer start, Integer limit, String order, String type);
+
+	List<PlCourseTextbookPre> listTextBookCourse(Integer course_id);
+
+	List<Map<String, Object>> listCourseTextBook(Integer id);
+
+	void addCourseTextbook(List<PlCourseTextbookPre> result);
+
+	void insertTextbook(PlCourseTextbookPre ctBook);
+
+	void updateTextbookBatch(Integer id, Integer exam_time_id);
+
+	File exportCtbook(Integer exam_year);
+}

+ 3 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlExamTimeService.java

@@ -6,6 +6,7 @@ import java.util.Map;
 
 import cn.hmsoft.jdbc.entity.Pager;
 import cn.hmsoft.ses.data.model.pl.PlExamTime;
+import cn.hmsoft.ses.data.model.pl.PlMergePublishPlan;
 import cn.hmsoft.web.service.IBaseService;
 
 /**
@@ -36,4 +37,6 @@ public interface IPlExamTimeService extends IBaseService<PlExamTime> {
 	File exportExamTimeDbf(String year_code);
 
 	List<Map<String, Object>> listExamTimeDbf(String year_code);
+	List<PlExamTime> queryExamTimeByExamYear(Integer exam_year);
+	PlExamTime queryPlExamTimeByYearCode(Integer yearCode);
 }

+ 23 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlMajorApplyProService.java

@@ -0,0 +1,23 @@
+package cn.hmsoft.ses.service.iface.pl;
+
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import cn.hmsoft.ses.data.model.pl.PlMajorApplyPro;
+import cn.hmsoft.ses.data.model.pl.PlMajorApplyProDetail;
+import cn.hmsoft.web.service.IBaseService;
+
+/**
+ * 专业申报主表 服务接口.
+ * 
+ * @author: zq
+ * @date: 2018-11-30 16:55:33
+ * @version: 1.0
+ * @email: zhanqiang@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+public interface IPlMajorApplyProService extends IBaseService<PlMajorApplyPro> {
+	Pager page(String query, Integer year, Integer school_id,Integer join_school_id, Integer major_id, Integer start, Integer limit) ;
+	void create(PlMajorApplyPro plMajorApply);
+	void deleteMajorApply(Integer id,Integer detail_id);
+	PlMajorApplyProDetail queryPlMajorApplyPro(Integer year, Integer school_id, Integer join_school_id, Integer major_id);
+}

+ 42 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlMajorCoursePreService.java

@@ -0,0 +1,42 @@
+package cn.hmsoft.ses.service.iface.pl;
+
+import java.util.List;
+import java.util.Map;
+
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.ses.data.model.pl.PlMajorCoursePre;
+import cn.hmsoft.web.service.IBaseService;
+
+/**
+ * 专业课程对应表 服务接口.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-17 10:03:45
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+public interface IPlMajorCoursePreService extends IBaseService<PlMajorCoursePre> {
+
+	Pager pagePlMajorCourse(String query, Integer start, Integer limit, String order, String type);
+
+	List<PlMajorCoursePre> listMajorCourse(Integer major_id, String keyword);
+
+	List<Map<String, Object>> findMajorByCourse(Integer id);
+
+	PlMajorCoursePre findMajorCourse(Integer major_id, Integer course_id);
+
+	List<Map<String, Object>> listCourseTextbook(Integer major_id, String content);
+
+	void editPlMajorCourse(Integer major_id, Integer[] course_ids, Integer[] course_natures);
+
+	String findMajorScore(Integer major_id);
+
+	void updateMcDirect(Integer major_id, Integer course_id, String direct_remark,String course_nature);
+
+	void updateCourseScore(Integer course_id, String course_score);
+
+	void updateCourseIscompose(Integer major_id, Integer course_id, String iscompose);
+
+	List<PlMajorCoursePre> listByMajorCourse(Integer majorId);
+}

+ 1 - 1
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlMajorCourseService.java

@@ -26,7 +26,7 @@ public interface IPlMajorCourseService extends IBaseService<PlMajorCourse> {
 
 	PlMajorCourse findMajorCourse(Integer major_id, Integer course_id);
 
-	List<Map<String, Object>> listCourseTextbook(Integer major_id, String content);
+	List<Map<String, Object>> listCourseTextbook(Integer major_id, String content,Integer exam_time_id);
 
 	void editPlMajorCourse(Integer major_id, Integer[] course_ids, Integer[] course_natures);
 

+ 62 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlMajorPreService.java

@@ -0,0 +1,62 @@
+package cn.hmsoft.ses.service.iface.pl;
+
+import java.io.File;
+import java.util.List;
+
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.ses.data.model.cf.CfOrganization;
+import cn.hmsoft.ses.data.model.pl.PlMajorPre;
+import cn.hmsoft.web.service.IBaseService;
+
+/**
+ * 专业信息表 服务接口.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-16 15:40:22
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+public interface IPlMajorPreService extends IBaseService<PlMajorPre> {
+
+	Pager pagePlMajor(String query, Integer start, Integer limit, String order, String type, Integer major_level,
+			Integer nation_exam, Integer year, Integer status, Integer schoolId, Integer org_id, Integer is_net_exam, Integer is_live_enrol);
+
+	List<PlMajorPre> findMajorByCode(String major_code, Integer year);
+
+	List<PlMajorPre> findMajorBySubject(Integer subject_id);
+
+	List<PlMajorPre> listMajor(String ids);
+
+	File makeCourseBook(String[] ids);
+
+	List<PlMajorPre> findCourseAndBook(Integer id);
+
+	PlMajorPre findMajor(Integer id);
+
+	List<PlMajorPre> listMajor(Integer[] course_ids, Integer major_id);
+
+	List<PlMajorPre> listMajorByType(Integer exam_start_type);
+
+	List<PlMajorPre> listByCurrentYear(Integer currentYear);
+
+	List<PlMajorPre> listMajor(String major_code, String major_name);
+
+	List<PlMajorPre> listMajorNewOld(Integer is_new_major);
+
+	PlMajorPre findMajorSchool(Integer id);
+
+	void insertMajor(PlMajorPre plMajor, CfOrganization org);
+
+	void deletePlMajor(Integer id);
+
+	File exportDbf();
+
+	List<PlMajorPre> listMajorIsAllowGraduate(Integer isAllowFlag);
+	List<PlMajorPre> listMajorByOrgId(Integer exam_time_id,Integer org_id,Integer isAllowFlag);
+	List<PlMajorPre> queryMajor();
+	List<PlMajorPre> queryAllMajor();
+	
+	List<PlMajorPre> queryMajorByStatus(Integer status);
+
+}

+ 5 - 2
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlMajorService.java

@@ -28,9 +28,9 @@ public interface IPlMajorService extends IBaseService<PlMajor> {
 
 	List<PlMajor> listMajor(String ids);
 
-	File makeCourseBook(String[] ids);
+	File makeCourseBook(String[] ids,Integer exam_time_id);
 
-	List<PlMajor> findCourseAndBook(Integer id);
+	List<PlMajor> findCourseAndBook(Integer id,Integer exam_time_id);
 
 	PlMajor findMajor(Integer id);
 
@@ -58,5 +58,8 @@ public interface IPlMajorService extends IBaseService<PlMajor> {
 	List<PlMajor> queryAllMajor();
 	
 	List<PlMajor> queryMajorByStatus(Integer status);
+	List<PlMajor> queryMajorByStatus(Integer status,Integer major_level);
+	List<PlMajor> queryOpenMajorAndStdMajor(Integer major_id);
+
 
 }

+ 3 - 2
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlMergePublishPlanService.java

@@ -27,8 +27,7 @@ public interface IPlMergePublishPlanService extends IBaseService<PlMergePublishP
 
 	Pager courseDetailPage(String query, Integer isNationExam, Integer examYear, Integer examMonth, String exam_time,Integer limit, 
     		Integer start, QueryOrder queryOrder);
-	Pager courseTextbookPage(String query, Integer isNationExam, Integer examYear, Integer examMonth, String exam_time,Integer limit, 
-    		Integer start);
+	
 	
 /*	void pubfirst(Integer year, Integer[] months);
 
@@ -72,4 +71,6 @@ public interface IPlMergePublishPlanService extends IBaseService<PlMergePublishP
 			Integer majortype);
 	
 	File exportCoursePbf(String query, Integer isNationExam, Integer examYear, Integer examMonth, String exam_time) ;
+	Pager queryCourseTextbook(String query, Integer isNationExam, Integer exam_time_id, String exam_time);
+
 }

+ 3 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlPublishPlanMainService.java

@@ -1,5 +1,6 @@
 package cn.hmsoft.ses.service.iface.pl;
 
+import cn.hmsoft.frame.data.model.FrameOptr;
 import cn.hmsoft.jdbc.entity.Pager;
 import cn.hmsoft.jdbc.entity.QueryOrder;
 import cn.hmsoft.web.service.IBaseService;
@@ -19,4 +20,6 @@ public interface IPlPublishPlanMainService extends IBaseService<PlPublishPlanMai
 	Pager page(String query, Integer examTimeId, Integer start, Integer limit, QueryOrder queryOrder);
 	
 	void deleteMainAndDetail(Integer mainId);
+	void publish(Integer[] ids,FrameOptr optr);
+	void regression(Integer[] ids);
 }

+ 26 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlSchoolMajorPreService.java

@@ -0,0 +1,26 @@
+package cn.hmsoft.ses.service.iface.pl;
+
+import java.util.List;
+
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import cn.hmsoft.ses.data.model.pl.PlSchoolMajorPre;
+import cn.hmsoft.web.service.IBaseService;
+
+/**
+ * 专业对应的主考学校 主考学校开考了哪些专业 服务接口.
+ * 
+ * @author: haoguanghui
+ * @date: 2019-06-06 13:46:59
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+public interface IPlSchoolMajorPreService extends IBaseService<PlSchoolMajorPre> {
+
+	Pager page(String query, Integer start, Integer limit, QueryOrder queryOrder);
+
+	List<PlSchoolMajorPre> listSchoolMajor(String major_code);
+	
+	List<PlSchoolMajorPre> listSchoolMajor(Integer major_id);
+}

+ 1 - 1
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlStdRecordService.java

@@ -20,7 +20,7 @@ import cn.hmsoft.ses.data.model.pl.PlStdRecord;
 public interface IPlStdRecordService extends IBaseService<PlStdRecord> {
 
 	Pager page(String query, Integer start, Integer limit, QueryOrder queryOrder, Integer year_code, Integer status,
-			Integer mk_id,Integer std_type, Integer join_school_id,Integer school_id,String is_xj);
+			Integer mk_id,Integer std_type, Integer join_school_id,Integer school_id,String is_xj,String major_code);
 
 	void submit(Integer year_code, Integer[] ids, Integer status,Integer std_type);
 

+ 27 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlTextbookPreService.java

@@ -0,0 +1,27 @@
+package cn.hmsoft.ses.service.iface.pl;
+
+import java.io.File;
+import java.util.List;
+
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.ses.data.model.pl.PlTextbookPre;
+import cn.hmsoft.web.service.IBaseService;
+
+/**
+ * 教材表 旧表-jc_jiaocai 服务接口.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-17 14:49:52
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+public interface IPlTextbookPreService extends IBaseService<PlTextbookPre> {
+
+	Pager pagePlTextbook(String query, Integer start, Integer limit, String order, String type, Integer status,
+			Integer exam_time_id);
+
+	List<PlTextbookPre> listTextbook(String textbookName, String writer, String publisher);
+
+	File exportDbf(Integer exam_year);
+}

+ 6 - 1
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/pl/IPlTextbookService.java

@@ -4,6 +4,7 @@ import java.io.File;
 import java.util.List;
 
 import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
 import cn.hmsoft.web.service.IBaseService;
 import cn.hmsoft.ses.data.model.pl.PlTextbook;
 
@@ -18,9 +19,13 @@ import cn.hmsoft.ses.data.model.pl.PlTextbook;
  */
 public interface IPlTextbookService extends IBaseService<PlTextbook> {
 
-	Pager pagePlTextbook(String query, Integer start, Integer limit, String order, String type, Integer status,Integer exam_time_id);
+	Pager pagePlTextbook(String query, Integer start, Integer limit, QueryOrder queryOrder, Integer status,Integer exam_time_id,Integer is_unified);
+	Pager pagePlTextbookForUnified(Integer start, Integer limit, QueryOrder queryOrder, Integer exam_time_id);
 
 	List<PlTextbook> listTextbook(String textbookName, String writer, String publisher);
 
 	File exportDbf(Integer exam_year);
+	
+	PlTextbook queryPlTextBookByCourseAndExamYear(Integer course_id,Integer exam_time_id);
+	void addPlTextbook(List<PlTextbook> list);
 }

+ 6 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/std/IStdBlackListService.java

@@ -1,7 +1,10 @@
 package cn.hmsoft.ses.service.iface.std;
 
+import org.springframework.web.multipart.MultipartFile;
+
 import cn.hmsoft.jdbc.entity.Pager;
 import cn.hmsoft.ses.data.model.std.StdBlackList;
+import cn.hmsoft.ses.data.model.std.StdBreakDisciplineFile;
 import cn.hmsoft.web.service.IBaseService;
 
 /**
@@ -16,4 +19,7 @@ import cn.hmsoft.web.service.IBaseService;
 public interface IStdBlackListService extends IBaseService<StdBlackList> {
 
 	Pager pageStdBlackList(String query, Integer start, Integer limit, String order, String type, StdBlackList stdblackList);
+	StdBreakDisciplineFile queryStdBreakDisciplineFile(String ticket_no, Integer exam_time_id,String file_type);
+	void uploadFile(MultipartFile file, StdBreakDisciplineFile stdBreakDisciplineFile);
+	void deleteStdBreakDisciplineFile(String ticket_no, Integer exam_time_id,String file_type);
 }

+ 1 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/std/IStdEnrolService.java

@@ -99,5 +99,6 @@ public interface IStdEnrolService extends IBaseService<StdEnrol> {
 	List<Map<String, Object>> statisEnrolMajorLevel(Integer exam_time_id);
 	
 	StdEnrol queryStdEnrolByStdAndCourse(Integer std_id, Integer course_id,String year_code,Integer enrol_agent_id);
+	File downTicketForComputerTest(Integer exam_time_id,StdRegInfo std,boolean is_encryption,boolean is_log,String path);
 
 }

+ 1 - 1
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/std/IStdRegInfoService.java

@@ -23,7 +23,7 @@ public interface IStdRegInfoService extends IBaseService<StdRegInfo> {
 
 	StdRegInfo getStdReg(String ticketNo, String stdName, String certNo);
 	
-	Pager pageStdRegInfo(String query, Integer start, Integer limit, String order, String type, StdRegInfo stdRegInfo,FrameOptr optr);
+	Pager pageStdRegInfo(String query, Integer start, Integer limit, String order, String type, StdRegInfo stdRegInfo,FrameOptr optr,Integer real_data);
 	Pager pageStdForBatch(String query, Integer start, Integer limit, String order, String type, StdRegInfo stdRegInfo,FrameOptr optr);
 
 	

+ 1 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/iface/std/IStdTicketService.java

@@ -10,4 +10,5 @@ public interface IStdTicketService extends IBaseService<StdTicket> {
 	
 	StdTicket queryStdTicketByTicket(Integer exam_time_id,String ticket_no);
 	void updateStdNameById(String std_name, Integer id) ;
+	void buildTicketForComputerTest(Integer exam_time_id,boolean again);
 }

+ 6 - 1
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/by/ByApplyServiceImpl.java

@@ -945,7 +945,7 @@ public class ByApplyServiceImpl extends BaseServiceImpl<ByApply> implements IByA
 		// 地级市自考办 审核
 		final Table table2 = new Table(new float[] { 23, 470 }).setWidthPercent(100);
 		table2.setMarginLeft(35).setMarginRight(35);
-		table2.addCell(new Cell(2, 1).add("设区市自考办︵助学院校︶意见").setHeight(CELL_HEIGHT * 6)
+		table2.addCell(new Cell(2, 1).add("初审单位意见").setHeight(CELL_HEIGHT * 6)
 				.setTextAlignment(TextAlignment.CENTER).setVerticalAlignment(VerticalAlignment.MIDDLE)
 				.setBorderLeft(new SolidBorder(0.8f)).setFontSize(nomalSize));
 		table2.addCell(new Cell(1, 1)
@@ -3656,4 +3656,9 @@ public class ByApplyServiceImpl extends BaseServiceImpl<ByApply> implements IByA
 		return sb.toString();
 
 	}
+
+	@Override
+	public List<ByApply> queryIsAlreadyBy(Integer std_id, Integer major_id) {
+		return this.byApplyDao.queryIsAlreadyBy(std_id, major_id);
+	}
 }

+ 21 - 1
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/by/ByCertificateServiceImpl.java

@@ -13,6 +13,7 @@ import cn.hmsoft.ses.service.iface.by.IByCertificateService;
 import cn.hmsoft.ses.service.iface.cf.ICfOrganizationService;
 import cn.hmsoft.ses.util.StudyFileHelper;
 import cn.hmsoft.ses.util.YearCodeHelper;
+import cn.hmsoft.ses.data.model.by.ByApply;
 import cn.hmsoft.ses.data.model.by.ByCertificate;
 import cn.hmsoft.ses.data.model.by.ByTimeConfig;
 import cn.hmsoft.ses.data.model.cf.CfOrganization;
@@ -21,6 +22,7 @@ import cn.hmsoft.ses.common.constants.SysConst;
 import cn.hmsoft.ses.common.constants.ByConst.ByFinalAuth;
 import cn.hmsoft.ses.common.constants.OrgConst;
 import cn.hmsoft.ses.common.constants.OrgConst.OrgType;
+import cn.hmsoft.ses.data.dao.by.ByApplyDao;
 import cn.hmsoft.ses.data.dao.by.ByCertificateDao;
 import cn.hmsoft.ses.data.dao.by.ByTimeConfigDao;
 import cn.hmsoft.ses.data.dao.std.StdRegInfoDao;
@@ -81,6 +83,9 @@ public class ByCertificateServiceImpl extends BaseServiceImpl<ByCertificate> imp
 	@Autowired
 	private ByTimeConfigDao byTimeConfigDao;
 	
+	@Autowired
+	private ByApplyDao byApplyDao;
+	
 	@Override
 	public PlatformDaoSupport<ByCertificate> getDao() {
 		return this.byCertificateDao;
@@ -121,6 +126,7 @@ public class ByCertificateServiceImpl extends BaseServiceImpl<ByCertificate> imp
 		FileOutputStream out;//保存pdf路径
 		BaseFont bfChinese;
 		List<String> files = new ArrayList<String>(list.size());
+		Integer temp_examTimeId = null;
 		try {
 			bfChinese = BaseFont.createFont(SpringConfig.WebServletContext.getRealPath("/") + "fonts" + File.separator + "STSONG.TTF",
 					PdfEncodings.IDENTITY_H, false);
@@ -171,7 +177,21 @@ public class ByCertificateServiceImpl extends BaseServiceImpl<ByCertificate> imp
 				ad.setScaleIcon(PushbuttonField.SCALE_ICON_ALWAYS);
 				ad.setIconHorizontalAdjustment(100);
 				ad.setIconVerticalAdjustment(100);
-				ad.setImage(Image.getInstance(this.getPhotoUrl(map,examTimeId)));
+				
+				 
+				String app_id = map.get("app_id") != null ? map.get("app_id").toString() : null;
+				if (null == app_id) {
+					temp_examTimeId = 207;
+				} else {
+					ByApply byApply = this.byApplyDao.find(app_id);
+					if (null != byApply) {
+						temp_examTimeId = byApply.getExam_time_id();
+					} else {
+						temp_examTimeId = 207;
+					}
+				}
+					
+				ad.setImage(Image.getInstance(this.getPhotoUrl(map,temp_examTimeId)));
 				form.replacePushbuttonField("photo", ad.getField());
 				stamp.setFormFlattening(true);//生成的pdf不能编辑
 				stamp.close();

+ 117 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/by/ByCourseReplDetailPreServiceImpl.java

@@ -0,0 +1,117 @@
+package cn.hmsoft.ses.service.impl.by;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.helper.StringTypeEntityHelper;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import cn.hmsoft.ses.common.constants.ByConst.YesOrNo;
+import cn.hmsoft.ses.common.constants.KwConst.EnableStatus;
+import cn.hmsoft.ses.data.dao.by.ByCourseReplDetailPreDao;
+import cn.hmsoft.ses.data.dao.pl.PlCoursePreDao;
+import cn.hmsoft.ses.data.dao.pl.PlMajorPreDao;
+import cn.hmsoft.ses.data.model.by.ByCourseReplDetailPre;
+import cn.hmsoft.ses.data.model.pl.PlCoursePre;
+import cn.hmsoft.ses.data.model.pl.PlMajorPre;
+import cn.hmsoft.ses.service.iface.by.IByCourseReplDetailPreService;
+import cn.hmsoft.web.service.impl.BaseServiceImpl;
+
+/**
+ * 课程顶替详情表 服务实现.
+ * 
+ * @author: haoguanghui
+ * @date: 2019-01-07 16:16:11
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Service
+public class ByCourseReplDetailPreServiceImpl extends BaseServiceImpl<ByCourseReplDetailPre>
+		implements IByCourseReplDetailPreService {
+
+	@Autowired
+	private ByCourseReplDetailPreDao byCourseReplDetailDao;
+	@Autowired
+	private PlMajorPreDao majorDao;
+	@Autowired
+	private PlCoursePreDao courseDao;
+
+	@Override
+	public PlatformDaoSupport<ByCourseReplDetailPre> getDao() {
+		return this.byCourseReplDetailDao;
+	}
+
+	/**
+	 * 分页查询.
+	 */
+	public Pager page(String query, Integer start, Integer limit, Integer major_id, Integer old_course_id,
+			Integer repl_course_id, QueryOrder queryOrder) {
+		Pager pageByCourseReplDetail = this.byCourseReplDetailDao.page(query, start, limit, major_id, old_course_id,
+				repl_course_id, queryOrder);
+		return pageByCourseReplDetail;
+	}
+
+	/**
+	 * 保存课程顶替详情
+	 */
+	@Override
+	public void insertReplyDetail(ByCourseReplDetailPre detail) {
+		detail.setStatus(EnableStatus.enable.ordinal());
+		// 不存在,则插入
+		if (this.byCourseReplDetailDao.findCourseReplDetail(detail) == null) {
+			PlMajorPre major = majorDao.find(detail.getMajor_id());
+			detail.setMajor_code(major.getMajor_code());
+			detail.setRepl_course_names(getCourseNames(detail.getRepl_course_ids()));
+			detail.setOld_course_names(getCourseNames(detail.getOld_course_ids()));
+			this.byCourseReplDetailDao.insert(detail);
+		}
+		// 只适用部分专业
+		if (detail.getIs_all() == YesOrNo.YES.ordinal()) {
+			for (Integer majorId : detail.getMajor_ids()) {
+				ByCourseReplDetailPre otherDetail = new ByCourseReplDetailPre();
+				otherDetail = StringTypeEntityHelper.copy(otherDetail.getClass(), detail);
+				otherDetail.setId(null);
+				// 课程信息
+				otherDetail.setRepl_course_names(getCourseNames(otherDetail.getRepl_course_ids()));
+				otherDetail.setOld_course_names(getCourseNames(otherDetail.getOld_course_ids()));
+				// 专业信息
+				otherDetail.setMajor_id(majorId);
+				otherDetail.setMajor_code(majorDao.find(majorId).getMajor_code());
+				if (this.byCourseReplDetailDao.findCourseReplDetail(otherDetail) == null) {
+					this.byCourseReplDetailDao.insert(otherDetail);
+				}
+			}
+		}
+
+	}
+
+	/**
+	 * @param course_ids:课程ID,多个课程ID以逗号分隔
+	 *            返回:课程代码-课程名称-课程学分|
+	 */
+	private String getCourseNames(String course_ids) {
+		String courseNames = "";
+		if (StringHelper.isNotEmpty(course_ids)) {
+			String[] courseIds = course_ids.split(",");
+			for (int i = 0; i < courseIds.length; i++) {
+				PlCoursePre course = this.courseDao.find(courseIds[i]);
+				courseNames += course.getCourse_code() + "-" + course.getCourse_name() + "-" + course.getCourse_score();
+				if (i != courseIds.length - 1) {
+					courseNames += "|";
+				}
+			}
+		}
+		return courseNames;
+	}
+
+	@Override
+	public List<ByCourseReplDetailPre> listCourseReplDetail() {
+		return this.byCourseReplDetailDao.listCourseReplDetail();
+	}
+
+}

+ 15 - 15
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/by/ByDiaplmaServiceImpl.java

@@ -785,9 +785,9 @@ public class ByDiaplmaServiceImpl extends BaseServiceImpl<ByDiaplma> implements
 	
 	//毕业生名册分页
 	@Override
-	public Pager nameListPage(String query, Integer exam_time_id, Integer org_id, Integer school_id, Integer major_id, Integer std_source, Integer start,
+	public Pager nameListPage(String query, Integer exam_time_id, Integer org_id, Integer school_id, Integer major_id, Integer std_source,Integer status, Integer start,
 			Integer limit, QueryOrder queryOrder) {
-		Pager pager = this.byDiaplmaDao.nameListPage(query, exam_time_id, org_id, school_id, major_id, std_source, start, limit, queryOrder);
+		Pager pager = this.byDiaplmaDao.nameListPage(query, exam_time_id, org_id, school_id, major_id, std_source,status, start, limit, queryOrder);
 		List<Map<String, Object>> list = (List<Map<String, Object>>)pager.getRecords();
 		for (Map<String, Object> map : list) {
 			//课程显示占位字段
@@ -1300,7 +1300,7 @@ public class ByDiaplmaServiceImpl extends BaseServiceImpl<ByDiaplma> implements
 	
 	//毕业名册XLS
 	@Override
-	public List<List<Object>> getNameListXls(Integer examTimeId, Integer majorId, Integer orgId, Integer schoolId) {
+	public List<List<Object>> getNameListXls(Integer examTimeId, Integer majorId, Integer orgId, Integer schoolId,Integer status) {
 		List<List<Object>> values = new ArrayList<List<Object>>();
 		List<Object> headerList = new ArrayList<Object>();
 		headerList.add("序号");
@@ -1398,14 +1398,14 @@ public class ByDiaplmaServiceImpl extends BaseServiceImpl<ByDiaplma> implements
 		
 		// 如果majorId为空,导出当前受理单位当前批次所有专业
 		if (null != majorId) {
-			getNameListXlsForOne(values, examTimeId, majorId, orgId, schoolId);
+			getNameListXlsForOne(values, examTimeId, majorId, orgId, schoolId,status);
 		} else {
 			// 根据受理单位当前批次查询批次所有毕业专业
 			List<ByApply> majorList = byApplyDao.queryApplyMajorByOrgId(examTimeId, orgId,schoolId);
 			if (null != majorList && !majorList.isEmpty()) {
 				for (ByApply byApply : majorList) {
 					if (null != byApply.getMajor_id() && !"".equals(byApply.getMajor_id())) {
-						getNameListXlsForOne(values, examTimeId, byApply.getMajor_id(), orgId, schoolId);
+						getNameListXlsForOne(values, examTimeId, byApply.getMajor_id(), orgId, schoolId,status);
 					}
 
 				}
@@ -1417,7 +1417,7 @@ public class ByDiaplmaServiceImpl extends BaseServiceImpl<ByDiaplma> implements
 	}
 		
 	public void getNameListXlsForOne(List<List<Object>> values, Integer examTimeId, Integer majorId, Integer orgId,
-			Integer schoolId) {
+			Integer schoolId,Integer status) {
 		int showCourseCnt = 24;// 最多显示24个课程
 
 	    List<Map<String, Object>> nameList = null;
@@ -1426,7 +1426,7 @@ public class ByDiaplmaServiceImpl extends BaseServiceImpl<ByDiaplma> implements
 		if(208 == examTimeId.intValue()){
 			nameList = this.getMajorScoreforNameListPdf(examTimeId, majorId, orgId, showCourseCnt,schoolId);
 		}else{
-			nameList = this.queryMajorScoreforNameList(examTimeId, majorId, orgId, showCourseCnt,schoolId);
+			nameList = this.queryMajorScoreforNameList(examTimeId, majorId, orgId, showCourseCnt,schoolId,status);
 		}
 
 		PlMajor major = this.plMajorDao.find(majorId);
@@ -1690,7 +1690,7 @@ public class ByDiaplmaServiceImpl extends BaseServiceImpl<ByDiaplma> implements
 
 	//毕业名册pdf
 	@Override
-	public File getNameListPdf(Integer examTimeId, Integer majorId, Integer orgId, Integer schoolId) {
+	public File getNameListPdf(Integer examTimeId, Integer majorId, Integer orgId, Integer schoolId,Integer status) {
 		Document doc = null;
 		File tempFile = null;
 		try {
@@ -1716,7 +1716,7 @@ public class ByDiaplmaServiceImpl extends BaseServiceImpl<ByDiaplma> implements
 			
 			// 如果majorId为空,导出当前受理单位当前批次所有专业
 			if (null != majorId) {
-				getNameListPdfForOne(doc, tempFile, examTimeId, majorId, orgId, schoolId);
+				getNameListPdfForOne(doc, tempFile, examTimeId, majorId, orgId, schoolId,status);
 			} else {
 				// 根据受理单位当前批次查询批次所有毕业专业
 				List<ByApply> majorList = byApplyDao.queryApplyMajorByOrgId(examTimeId, orgId,schoolId);
@@ -1731,7 +1731,7 @@ public class ByDiaplmaServiceImpl extends BaseServiceImpl<ByDiaplma> implements
 
 							i++;
 							
-							getNameListPdfForOne(doc, tempFile, examTimeId, byApply.getMajor_id(), orgId, schoolId);
+							getNameListPdfForOne(doc, tempFile, examTimeId, byApply.getMajor_id(), orgId, schoolId,status);
 						}
 						
 					}
@@ -1753,9 +1753,9 @@ public class ByDiaplmaServiceImpl extends BaseServiceImpl<ByDiaplma> implements
 	}
 	
 	public List<Map<String, Object>> queryMajorScoreforNameList(Integer exam_time_id, Integer major_id, Integer org_id,
-			int showCourseCnt, Integer schoolId) {
+			int showCourseCnt, Integer schoolId,Integer status) {
 		final List<Map<String, Object>> stdList = this.byScoreDao.getMajorScoreforNameList(exam_time_id, major_id,
-				org_id, schoolId);
+				org_id, schoolId,status);
 		List<Map<String, Object>> nameList = new ArrayList<Map<String, Object>>();
 
 		if (null != stdList) {
@@ -1806,7 +1806,7 @@ public class ByDiaplmaServiceImpl extends BaseServiceImpl<ByDiaplma> implements
 		return nameList;
 	}
 	
-	public void getNameListPdfForOne(Document doc,File tempFile,Integer examTimeId, Integer majorId, Integer orgId, Integer schoolId) {
+	public void getNameListPdfForOne(Document doc,File tempFile,Integer examTimeId, Integer majorId, Integer orgId, Integer schoolId,Integer status) {
 		float CELL_HEIGHT = 20;
 		int nomalSize = 9;
 		int pageSize = 6;
@@ -1819,7 +1819,7 @@ public class ByDiaplmaServiceImpl extends BaseServiceImpl<ByDiaplma> implements
 			throw new BusinessException("毕业日期没有配置,请联系系统管理员");
 		}
 		
-		final List<Map<String, Object>> nameList = this.queryMajorScoreforNameList(examTimeId, majorId, orgId, showCourseCnt,schoolId);
+		final List<Map<String, Object>> nameList = this.queryMajorScoreforNameList(examTimeId, majorId, orgId, showCourseCnt,schoolId,status);
 		
 		
 		int totalPages = ((nameList.size() % pageSize == 0) ? (nameList.size()/pageSize) : (nameList.size()/pageSize + 1));
@@ -1907,7 +1907,7 @@ public class ByDiaplmaServiceImpl extends BaseServiceImpl<ByDiaplma> implements
 		
 		cityTb.addCell(new Cell(1,2).add(page).setTextAlignment(TextAlignment.LEFT).setFontSize(11).setMarginLeft(20).setMarginTop(0).setMarginBottom(0).setPaddingTop(0).setPaddingBottom(0)
 				.setBorder(new SolidBorder(new DeviceRgb(255,255,255), 0)))
-		.addCell(new Cell(1,2).add("地市自考办(高校自考办)负责人:").setTextAlignment(TextAlignment.LEFT).setMarginTop(0).setMarginBottom(0).setFontSize(11).setMarginLeft(20).setPaddingTop(0).setPaddingBottom(0)
+		.addCell(new Cell(1,2).add("初审单位负责人:").setTextAlignment(TextAlignment.LEFT).setMarginTop(0).setMarginBottom(0).setFontSize(11).setMarginLeft(20).setPaddingTop(0).setPaddingBottom(0)
 									.setBorder(new SolidBorder(new DeviceRgb(255,255,255), 0)))
 			  
 			  .addCell(new Cell(1,2).add("(加盖公章)").setTextAlignment(TextAlignment.LEFT).setFontSize(11).setMarginLeft(170).setMarginTop(0).setMarginBottom(0).setPaddingTop(0).setPaddingBottom(0)

+ 12 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/by/ByTurnOutApplyServiceImpl.java

@@ -277,6 +277,10 @@ public class ByTurnOutApplyServiceImpl extends BaseServiceImpl<ByTurnOutApply> i
 				if(!StringUtils.isEmpty(apply.getZw_flow_no())){
 					// 20231212 办件同步一网通,此时政务已不再受理因此同时不再同步政务
 					this.mkCertEduApplyService.atg_repotStatus(apply.getZw_flow_no(), optr);
+					try {
+						Thread.sleep(1000);
+					} catch (InterruptedException e) {
+					}
 					this.mkCertEduApplyService.atg_repotStatusEnd(apply.getZw_flow_no(), optr);
 					
 					/*this.zw_repotStatus(apply, optr);
@@ -290,6 +294,10 @@ public class ByTurnOutApplyServiceImpl extends BaseServiceImpl<ByTurnOutApply> i
 				if(!StringUtils.isEmpty(apply.getZw_flow_no())){
 					// 20231212 办件同步一网通,此时政务已不再受理因此同时不再同步政务
 					this.mkCertEduApplyService.atg_repotStatus(apply.getZw_flow_no(), optr);
+					try {
+						Thread.sleep(1000);
+					} catch (InterruptedException e) {
+					}
 					this.mkCertEduApplyService.atg_repotStatusEnd(apply.getZw_flow_no(), optr);
 				}
 				
@@ -306,6 +314,10 @@ public class ByTurnOutApplyServiceImpl extends BaseServiceImpl<ByTurnOutApply> i
 
 					// 20231212 办件同步一网通,此时政务已不再受理因此同时不再同步政务
 					this.mkCertEduApplyService.atg_repotStatus(apply.getZw_flow_no(), optr);
+					try {
+						Thread.sleep(1000);
+					} catch (InterruptedException e) {
+					}
 					this.mkCertEduApplyService.atg_repotStatusEnd(apply.getZw_flow_no(), optr);
 				}
 			} else {

+ 27 - 5
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/by/CountryTurnServiceImpl.java

@@ -114,14 +114,18 @@ public class CountryTurnServiceImpl implements ICountryTurnService{
 		ByTurnTimeConfig time = this.timeDao.find(time_config_id);
 		int i=0;
 		StringBuffer sb = null;
+		StringBuffer can_not_sb = null;
 		int not_import_course = 0;
 		int import_course = 0;
+		int can_not_import_course = 0;
 		
 		for (String[] strings : studentlist) {
 			i++;
 			sb = new StringBuffer();
+			can_not_sb = new StringBuffer();
 			not_import_course = 0;
 			import_course = 0;
+			can_not_import_course = 0;
 			
 			ByTurnInApplyResult result = new ByTurnInApplyResult();
 			
@@ -363,11 +367,20 @@ public class CountryTurnServiceImpl implements ICountryTurnService{
 						not_import_course++;
 					}else{
 						// 20231205 by 卿玲 国家转考数据导入我区系统,转考课程代码和课程名称必须两项都跟广西一致才能导入
-						String course_name = courseList.get(0).getCourse_name();
+						//2024040903 去掉20231205这个政策
+						/*String course_name = courseList.get(0).getCourse_name();
 						if(!course_name.equals(score[2])){
 							sb.append(score[1]).append("-").append(score[2]).append(",");
 							not_import_course++;
-						}
+						}*/
+						
+						// 2024年7月1号停考的专业下面的课程(其他还在开考的专业没有这些课程,且这些课程不在选考课程之内https://www.gxeea.cn/view/content_1148_15806.htm),不允许转入
+						// 2024040903 去掉2024年7月1号停考的专业下面的课程这个政策
+						/*PlCourse plCourse = this.courseDao.findCourseLimit(courseList.get(0).getId());
+						if(null != plCourse){
+							can_not_sb.append(score[1]).append("-").append(score[2]).append(",");
+							can_not_import_course++;
+						}*/
 					}
 				}
 			}
@@ -387,11 +400,20 @@ public class CountryTurnServiceImpl implements ICountryTurnService{
 			}
 			
 			if(not_import_course == 0){
-				result.setRemark("转入导入成功。总共有"+import_course+"门课程成绩。");
+				if(can_not_import_course==0){
+					result.setRemark("转入导入成功。总共有"+import_course+"门课程成绩。");
+				}else{
+					result.setRemark("转入导入成功。总共有"+import_course+"门课程成绩。有"+can_not_import_course+"门课程成绩因属于停考的专业下面的课程,而不导入系统,课程包括:"+can_not_sb.toString());
+				}
 			}else{
-				result.setRemark("转入导入成功。总共有"+import_course+"门课程成绩。有"+not_import_course+"门课程成绩因在区内不存在对应的课程代码,而不导入系统,课程包括:"+sb.toString());
+				if(can_not_import_course==0){
+					result.setRemark("转入导入成功。总共有"+import_course+"门课程成绩。有"+not_import_course+"门课程成绩因在区内不存在对应的课程代码,而不导入系统,课程包括:"+sb.toString());
+				}else{
+					result.setRemark("转入导入成功。总共有"+import_course+"门课程成绩。有"+not_import_course+"门课程成绩因在区内不存在对应的课程代码,而不导入系统,课程包括:"+sb.toString()+"。有"+can_not_import_course+"门课程成绩因属于停考的专业下面的课程,而不导入系统,课程包括:"+can_not_sb.toString());
+				}
 			}
 			
+			
 			this.byTurnInApplyResultDao.insert(result);
 		}
 		
@@ -413,7 +435,7 @@ public class CountryTurnServiceImpl implements ICountryTurnService{
 			//只有存在的课程才会插入
 			List<PlCourse> courseList = this.courseDao.list("course_code", kscj.getKc_dm());
 			if(courseList != null && courseList.size() > 0) {
-				// 20220916 byhuangzibo 梁老师要求转入的课程名称取广西自考系统课程代码对应的课程名称(07564 唐宋词研究名称不一样)
+				// 20220916 by huangzibo 梁老师要求转入的课程名称取广西自考系统课程代码对应的课程名称(07564 唐宋词研究名称不一样)
 				kscj.setKc_mc(courseList.get(0).getCourse_name());
 				
 				// 查询考生成绩是否已经转入

+ 2 - 2
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/kj/KjCollegeScoreMainServiceImpl.java

@@ -608,7 +608,7 @@ public class KjCollegeScoreMainServiceImpl extends BaseServiceImpl<KjCollegeScor
 			String ticketNo = getStringTrimVal(list.get(1));
 			String majorCode = getStringTrimVal(list.get(2));
 			String majorName = getStringTrimVal(list.get(3));
-			String paperTitle = getStringTrimVal(list.get(4));
+			String paperTitle = list.get(4);
 			String paperScore = getStringTrimVal(list.get(5));
 			String remark = getStringTrimVal(list.get(6));
 			
@@ -670,7 +670,7 @@ public class KjCollegeScoreMainServiceImpl extends BaseServiceImpl<KjCollegeScor
 			if (StringHelper.isEmpty(paperTitle)) {
 				errSb.append("论文标题不能为空!");
 			} else {
-				detail.setPaper_title(paperTitle);
+				detail.setPaper_title(paperTitle.trim());
 			}
 			if (StringHelper.isEmpty(paperScore)) {
 				errSb.append("论文成绩不能为空!");

+ 32 - 1
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/mk/MkCertEduApplyServiceImpl.java

@@ -6,6 +6,7 @@ import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -585,11 +586,22 @@ public class MkCertEduApplyServiceImpl extends BaseServiceImpl<MkCertEduApply> i
 
 	/*Map <String,String> extInfo = new HashMap<String,String>(); 
 	    atgBizAffairAcceptRequest.setExtInfo(extInfo);*/
+	    
 
+	    Date currentDate = new Date();
+ 
+        // 使用Calendar类调整时间
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(currentDate);
+        calendar.add(Calendar.MINUTE, -1); // 减去一分钟
+ 
+        // 得到调整后的时间
+        Date adjustedDate = calendar.getTime();
+        
 	    /** 
 	    * 办件受理时间
 	     */
-	    atgBizAffairAcceptRequest.setGmtAccept(new Date());
+	    atgBizAffairAcceptRequest.setGmtAccept(adjustedDate);
 
 	    /** 
 	    * 备注
@@ -659,6 +671,25 @@ public class MkCertEduApplyServiceImpl extends BaseServiceImpl<MkCertEduApply> i
 	    }
 	}
 	
+	 public static void main(String[] args) {
+		 long timestamp = 1720592954385L; // 示例时间戳
+		 Date date = new Date(timestamp);
+		 System.out.println(date);
+		 
+	        // 获取当前日期和时间
+	        Date currentDate = new Date();
+	        System.out.println("当前时间: " + currentDate);
+	 
+	        // 使用Calendar类调整时间
+	        Calendar calendar = Calendar.getInstance();
+	        calendar.setTime(currentDate);
+	        calendar.add(Calendar.MINUTE, -1); // 减去一分钟
+	 
+	        // 得到调整后的时间
+	        Date adjustedDate = calendar.getTime();
+	        System.out.println("调整后时间: " + adjustedDate);
+	    }
+	
 	
 	/**
 	 * 一网通网-atg.biz.affair.accept ( 办件中心-办件受理服务 )

+ 283 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlCoursePreServiceImpl.java

@@ -0,0 +1,283 @@
+package cn.hmsoft.ses.service.impl.pl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import cn.hmsoft.frame.data.model.FrameOptr;
+import cn.hmsoft.frame.util.FrameAssertUtil;
+import cn.hmsoft.frame.util.RequestContextUtil;
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.ses.common.constants.SysConst;
+import cn.hmsoft.ses.data.dao.pl.PlCoursePreDao;
+import cn.hmsoft.ses.data.dao.pl.PlCourseTextbookPreDao;
+import cn.hmsoft.ses.data.dao.pl.PlExamTimeDao;
+import cn.hmsoft.ses.data.model.pl.PlCoursePre;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbookPre;
+import cn.hmsoft.ses.data.model.pl.PlExamTime;
+import cn.hmsoft.ses.service.iface.pl.IPlCoursePreService;
+import cn.hmsoft.ses.util.YearCodeHelper;
+import cn.hmsoft.ses.util.dbf.DBFField;
+import cn.hmsoft.ses.util.dbf.DBFWriter;
+import cn.hmsoft.web.service.impl.BaseServiceImpl;
+
+/**
+ * 课程表 服务实现.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-16 21:08:14
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Service
+public class PlCoursePreServiceImpl extends BaseServiceImpl<PlCoursePre> implements IPlCoursePreService {
+
+	@Autowired
+	private PlCoursePreDao plCourseDao;
+	@Autowired
+	private PlCourseTextbookPreDao ctBookDao;
+	@Autowired
+	private PlExamTimeDao timeDao;
+
+	@Autowired
+
+	@Override
+	public PlatformDaoSupport<PlCoursePre> getDao() {
+		return this.plCourseDao;
+	}
+
+	@Override
+	public Pager pagePlMergePublishPlan(String query, Integer year_code, String exam_batch, Integer start,
+			Integer limit) {
+		return this.plCourseDao.pagePlMergePublishPlan(query, year_code, exam_batch, start, limit);
+	}
+
+	/**
+	 * 分页查询.
+	 * 
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public Pager pagePlCourse(String query, Integer start, Integer limit, String order, String type,
+			Integer is_nation_exam, Integer special_flag, Integer course_filter, Integer stauts, Integer is_net_mark) {
+		Pager pagePlCourse = this.plCourseDao.pagePlCourse(query, start, limit, order, type, is_nation_exam,
+				special_flag, course_filter, getExamTimeId(), stauts, is_net_mark);
+		List<Map<String, Object>> list = (List<Map<String, Object>>) pagePlCourse.getRecords();
+		for (Map<String, Object> map : list) {
+			map.put("textbook_name", getTextbookName(Integer.parseInt("" + map.get("id"))));
+		}
+		return pagePlCourse;
+	}
+
+	private Integer getExamTimeId() {
+		PlExamTime time = this.timeDao.find("year_code", YearCodeHelper.getCurrentYearCode());
+		if (time != null) {
+			return time.getId();
+		}
+		return null;
+	}
+
+	// 查询教材名称
+	private String getTextbookName(Integer course_id) {
+		String textbook_name = "";
+		List<PlCourseTextbookPre> bookList = this.ctBookDao.listTextBookCourse(course_id,
+				YearCodeHelper.getCurrentYearCode());
+		for (PlCourseTextbookPre book : bookList) {
+			textbook_name += book.getTextbook_name() + "-" + book.getYear_code() + "<br>";
+		}
+		return textbook_name;
+	}
+
+	@Override
+	public List<PlCoursePre> listCourseByCode(String course_code) {
+		return this.plCourseDao.list("course_code", course_code);
+	}
+
+	@Override
+	public List<PlCoursePre> listCourse(String ids, Integer specialFlag, Integer exam_time_id) {
+		FrameOptr optr = RequestContextUtil.currentLoginUser();
+		FrameAssertUtil.isNotNull(optr, "请登录");
+		if (exam_time_id == null) {
+			PlExamTime time = this.timeDao.find("year_code", YearCodeHelper.getCurrentYearCode());
+			exam_time_id = (time != null) ? time.getId() : null;
+		}
+		return this.plCourseDao.listPublishCouse(exam_time_id);
+	}
+
+	@Override
+	public List<PlCoursePre> listCourse(String courseCode, String courseName) {
+		courseCode = (StringHelper.isNotEmpty(courseCode)) ? courseCode.trim() : courseCode;
+		courseName = (StringHelper.isNotEmpty(courseName)) ? courseName.trim() : courseName;
+		return this.plCourseDao.listCourse(courseCode, courseName);
+	}
+
+	@Override
+	public PlCoursePre findCourse(String courseCode, Integer specialFlag) {
+		return this.plCourseDao.findCourse(courseCode, specialFlag);
+	}
+
+	@Override
+	public List<PlCoursePre> listCourse() {
+		return this.plCourseDao.listCourse();
+	}
+
+	@Override
+	public List<PlCoursePre> listCourseByExamTimeId(Integer exam_time_id) {
+		return this.plCourseDao.listCourseByExamTimeId(exam_time_id);
+	}
+
+	@Override
+	public List<PlCoursePre> listCourseByName(String name) {
+		return this.plCourseDao.listCourseByName(name);
+	}
+
+	@Override
+	public List<PlCoursePre> listCourseByType(Integer course_exam_type, Integer special_flag) {
+		return this.plCourseDao.listCourseByType(course_exam_type, special_flag);
+	}
+
+	@Override
+	public List<PlCoursePre> listCourseByMajorId(Integer major_id) {
+		return this.plCourseDao.listCourseByMajorId(major_id);
+	}
+
+	@Override
+	public List<PlCoursePre> listCourseBymajorIdForCommunicate(Integer major_id, Integer school_id) {
+		return this.plCourseDao.listCourseBymajorIdForCommunicate(major_id, school_id);
+	}
+
+	@Override
+	public File exportCourse(Integer exam_year) {
+		List<Map<String, Object>> list = this.plCourseDao.listSchoolCourse(exam_year);
+		File serverFile = new File(
+				SysConst.getAppConfig().getDownloadTemp() + System.currentTimeMillis() + "course.dbf");
+		OutputStream fos = null;
+		try {
+			DBFField[] fields = new DBFField[2];
+			// 课程代号
+			fields[0] = new DBFField();
+			fields[0].setName("kechengdai");
+			fields[0].setDataType(DBFField.FIELD_TYPE_C);
+			fields[0].setFieldLength(10);
+			fields[0].setDecimalCount(0);
+			// 课程名称
+			fields[1] = new DBFField();
+			fields[1].setName("mingcheng");
+			fields[1].setDataType(DBFField.FIELD_TYPE_C);
+			fields[1].setFieldLength(100);
+			fields[1].setDecimalCount(0);
+			// // 院校
+			// fields[2] = new DBFField();
+			// fields[2].setName("yuanxiao");
+			// fields[2].setDataType(DBFField.FIELD_TYPE_C);
+			// fields[2].setFieldLength(100);
+			// fields[2].setDecimalCount(0);
+			// // 层次
+			// fields[3] = new DBFField();
+			// fields[3].setName("cengci");
+			// fields[3].setDataType(DBFField.FIELD_TYPE_C);
+			// fields[3].setFieldLength(10);
+			// fields[3].setDecimalCount(0);
+
+			DBFWriter writer = new DBFWriter();
+			writer.setFields(fields);
+
+			for (Map<String, Object> map : list) {
+				Object[] rowData = new Object[2];
+				rowData[0] = map.get("course_code");
+				rowData[1] = map.get("course_name");
+				// rowData[2] = map.get("org_name");
+				// if(map.get("major_level") != null &&
+				// map.get("major_level").toString().equals("0")) {
+				// rowData[3] = "专科";
+				// } else if(map.get("major_level") != null &&
+				// map.get("major_level").toString().equals("1")) {
+				// rowData[3] ="本科";
+				// } else {
+				// rowData[3] ="";
+				// }
+				writer.addRecord(rowData);
+			}
+			// 定义输出流,并关联的一个文件
+			fos = new FileOutputStream(serverFile);
+			// 写入数据
+			writer.write(fos);
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			try {
+				fos.close();
+			} catch (Exception e) {
+			}
+		}
+		return serverFile;
+	}
+
+	@Override
+	public File exportCourseDbf(String year_code) {
+		FrameAssertUtil.isNotNull(year_code, "请选择批次码");
+		PlExamTime time = this.timeDao.find("year_code", year_code);
+		List<Map<String, Object>> list = this.plCourseDao.listCourseDbf(time != null ? time.getId() : null);
+		File serverFile = new File(
+				SysConst.getAppConfig().getDownloadTemp() + System.currentTimeMillis() + "coursedb.dbf");
+		OutputStream fos = null;
+		try {
+			DBFField[] fields = new DBFField[2];
+			// 课程代号
+			fields[0] = new DBFField();
+			fields[0].setName("kechengdai");
+			fields[0].setDataType(DBFField.FIELD_TYPE_C);
+			fields[0].setFieldLength(10);
+			fields[0].setDecimalCount(0);
+			// 课程名称
+			fields[1] = new DBFField();
+			fields[1].setName("mingcheng");
+			fields[1].setDataType(DBFField.FIELD_TYPE_C);
+			fields[1].setFieldLength(100);
+			fields[1].setDecimalCount(0);
+
+			DBFWriter writer = new DBFWriter();
+			writer.setFields(fields);
+
+			for (Map<String, Object> map : list) {
+				Object[] rowData = new Object[2];
+				rowData[0] = map.get("kechengdai");
+				rowData[1] = map.get("mingcheng");
+				writer.addRecord(rowData);
+			}
+			// 定义输出流,并关联的一个文件
+			fos = new FileOutputStream(serverFile);
+			// 写入数据
+			writer.write(fos);
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			try {
+				fos.close();
+			} catch (Exception e) {
+			}
+		}
+		return serverFile;
+	}
+
+	@Override
+	public List<Map<String, Object>> listCourseDbf(String year_code) {
+		FrameAssertUtil.isNotNull(year_code, "请选择批次码");
+		PlExamTime time = this.timeDao.find("year_code", year_code);
+		return this.plCourseDao.listCourseDbf(time != null ? time.getId() : null);
+	}
+
+	@Override
+	public PlCoursePre queryCourseBycourseCode(String courseCode) {
+		return this.plCourseDao.queryCourseBycourseCode(courseCode);
+	}
+
+}

+ 4 - 9
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlCourseServiceImpl.java

@@ -17,10 +17,8 @@ import cn.hmsoft.jdbc.core.PlatformDaoSupport;
 import cn.hmsoft.jdbc.entity.Pager;
 import cn.hmsoft.ses.common.constants.SysConst;
 import cn.hmsoft.ses.data.dao.pl.PlCourseDao;
-import cn.hmsoft.ses.data.dao.pl.PlCourseTextbookDao;
 import cn.hmsoft.ses.data.dao.pl.PlExamTimeDao;
 import cn.hmsoft.ses.data.model.pl.PlCourse;
-import cn.hmsoft.ses.data.model.pl.PlCourseTextbook;
 import cn.hmsoft.ses.data.model.pl.PlExamTime;
 import cn.hmsoft.ses.service.iface.pl.IPlCourseService;
 import cn.hmsoft.ses.util.YearCodeHelper;
@@ -43,8 +41,6 @@ public class PlCourseServiceImpl extends BaseServiceImpl<PlCourse> implements IP
 	@Autowired
 	private PlCourseDao plCourseDao;
 	@Autowired
-	private PlCourseTextbookDao  ctBookDao;
-	@Autowired
 	private PlExamTimeDao timeDao;
 	@Autowired
 	
@@ -62,15 +58,14 @@ public class PlCourseServiceImpl extends BaseServiceImpl<PlCourse> implements IP
 	 * 分页查询.
 	 * @return
 	 */
-	@SuppressWarnings("unchecked")
 	public Pager pagePlCourse(String query, Integer start, Integer limit, String order, String type,
 			Integer is_nation_exam, Integer special_flag, Integer course_filter, Integer stauts,Integer is_net_mark) {
 		Pager pagePlCourse = this.plCourseDao.pagePlCourse(query, start, limit, order, type, is_nation_exam,
 				special_flag, course_filter,getExamTimeId(), stauts,is_net_mark);
-		List<Map<String, Object>> list = (List<Map<String, Object>>) pagePlCourse.getRecords();
+		/*List<Map<String, Object>> list = (List<Map<String, Object>>) pagePlCourse.getRecords();
 		for (Map<String, Object> map : list) {
 			map.put("textbook_name", getTextbookName(Integer.parseInt("" + map.get("id"))));
-		}
+		}*/
 		return pagePlCourse;
 	}
 	
@@ -83,7 +78,7 @@ public class PlCourseServiceImpl extends BaseServiceImpl<PlCourse> implements IP
 	}
 	
 	//查询教材名称
-	private String getTextbookName(Integer course_id) {
+	/*private String getTextbookName(Integer course_id) {
 		String textbook_name = "";
 		List<PlCourseTextbook> bookList = this.ctBookDao.listTextBookCourse(course_id,
 				YearCodeHelper.getCurrentYearCode());
@@ -91,7 +86,7 @@ public class PlCourseServiceImpl extends BaseServiceImpl<PlCourse> implements IP
 			textbook_name += book.getTextbook_name() +"-"+book.getYear_code()+ "<br>";
 		}
 		return textbook_name;
-	}
+	}*/
 
 	@Override
 	public List<PlCourse> listCourseByCode(String course_code) {

+ 106 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlCourseTextbookLogPreServiceImpl.java

@@ -0,0 +1,106 @@
+package cn.hmsoft.ses.service.impl.pl;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import cn.hmsoft.frame.data.model.FrameOptr;
+import cn.hmsoft.frame.util.RequestContextUtil;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import cn.hmsoft.ses.data.dao.pl.PlCourseTextbookLogPreDao;
+import cn.hmsoft.ses.data.dao.pl.PlCourseTextbookPreDao;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbookLog;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbookLogPre;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbookPre;
+import cn.hmsoft.ses.service.iface.pl.IPlCourseTextbookLogPreService;
+import cn.hmsoft.web.service.impl.BaseServiceImpl;
+
+/**
+ * 课程教材关联历史表 服务实现.
+ * 
+ * @author: haoguanghui
+ * @date: 2019-01-25 11:06:51
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Service
+public class PlCourseTextbookLogPreServiceImpl extends BaseServiceImpl<PlCourseTextbookLogPre>
+		implements IPlCourseTextbookLogPreService {
+
+	@Autowired
+	private PlCourseTextbookLogPreDao plCourseTextbookLogDao;
+	@Autowired
+	private PlCourseTextbookPreDao ctBookDao;
+
+	@Override
+	public PlatformDaoSupport<PlCourseTextbookLogPre> getDao() {
+		return this.plCourseTextbookLogDao;
+	}
+
+	/**
+	 * 分页查询.
+	 */
+	public Pager page(String query, Integer start, Integer limit, QueryOrder queryOrder) {
+		Pager pagePlCourseTextbookLog = this.plCourseTextbookLogDao.page(query, start, limit, queryOrder);
+		return pagePlCourseTextbookLog;
+	}
+
+	/**
+	 * @param course_id
+	 *            :课程ID
+	 * @param type:操作类型
+	 */
+	@Override
+	public void insertCourseTextBookLog(Integer course_id, Integer type) {
+		FrameOptr optr = RequestContextUtil.currentLoginUser();
+		// 1、将记录插入日志表
+		PlCourseTextbookPre ctBook = this.ctBookDao.find("course_id", course_id);
+		PlCourseTextbookLogPre log = new PlCourseTextbookLogPre();
+		log.setCourse_id(ctBook.getCourse_id());
+		log.setTextbook_id(ctBook.getTextbook_id());
+		log.setExam_time_id(ctBook.getExam_time_id());
+		log.setOperator(optr.getLogin_name() + "(" + optr.getOptr_name() + ")");
+		log.setOper_time(LocalDateTime.now());
+		log.setType(type);
+		this.plCourseTextbookLogDao.insert(log);
+		// 2、删除已经存在的的关联
+		// this.ctBookDao.delete("course_id", course_id);
+	}
+
+	@Override
+	public List<PlCourseTextbookLogPre> listCourseTextbookLog(Integer course_id) {
+		return this.plCourseTextbookLogDao.listCourseTextbookLog(course_id);
+	}
+
+	@Override
+	public List<PlCourseTextbookLogPre> listCourseTextbookLog(Integer course_id, Integer exam_time_id) {
+		return this.plCourseTextbookLogDao.listCourseTextbookLog(course_id, exam_time_id);
+	}
+
+	/**
+	 * @param ctBook
+	 *            :课程教材关联信息
+	 * @param type:操作类型
+	 */
+	@Override
+	public void insertCourseTextBookLog(PlCourseTextbookPre ctBook, Integer type) {
+		FrameOptr optr = RequestContextUtil.currentLoginUser();
+		PlCourseTextbookLogPre log = new PlCourseTextbookLogPre();
+		log.setCourse_id(ctBook.getCourse_id());
+		log.setTextbook_id(ctBook.getTextbook_id());
+		log.setExam_time_id(ctBook.getExam_time_id());
+		log.setOperator(optr.getLogin_name() + "(" + optr.getOptr_name() + ")");
+		log.setOper_time(LocalDateTime.now());
+		log.setType(type);
+		this.plCourseTextbookLogDao.insert(log);
+	}
+
+	public void synTextbookLog(Integer exam_time_id, Integer old_exam_time_id, String optr) {
+		this.plCourseTextbookLogDao.synTextbookLog(exam_time_id, old_exam_time_id, optr);
+	}
+}

+ 210 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlCourseTextbookPreServiceImpl.java

@@ -0,0 +1,210 @@
+package cn.hmsoft.ses.service.impl.pl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import cn.hmsoft.frame.data.model.FrameOptr;
+import cn.hmsoft.frame.util.FrameAssertUtil;
+import cn.hmsoft.frame.util.RequestContextUtil;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.ses.common.constants.PlConst.LogOperateType;
+import cn.hmsoft.ses.common.constants.SysConst;
+import cn.hmsoft.ses.data.dao.pl.PlCourseTextbookLogPreDao;
+import cn.hmsoft.ses.data.dao.pl.PlCourseTextbookPreDao;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbookLog;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbookLogPre;
+import cn.hmsoft.ses.data.model.pl.PlCourseTextbookPre;
+import cn.hmsoft.ses.service.iface.pl.IPlCourseTextbookPreService;
+import cn.hmsoft.ses.util.dbf.DBFField;
+import cn.hmsoft.ses.util.dbf.DBFWriter;
+import cn.hmsoft.web.service.impl.BaseServiceImpl;
+
+/**
+ * 课程教材关联表 课程对应的教材,一门课程可以对应多个教材 服务实现.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-17 15:55:47
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Service
+public class PlCourseTextbookPreServiceImpl extends BaseServiceImpl<PlCourseTextbookPre>
+		implements IPlCourseTextbookPreService {
+
+	@Autowired
+	private PlCourseTextbookPreDao plCourseTextbookDao;
+	@Autowired
+	private PlCourseTextbookLogPreDao plCourseTextbookLogDao;
+	@Autowired
+	private PlCourseTextbookLogPreDao ctBookLogDao;
+
+	@Override
+	public PlatformDaoSupport<PlCourseTextbookPre> getDao() {
+		return this.plCourseTextbookDao;
+	}
+
+	/**
+	 * 分页查询.
+	 * 
+	 * @param query
+	 * @param start
+	 * @param limit
+	 * @param order
+	 * @param type
+	 * @return
+	 */
+	public Pager pagePlCourseTextbook(String query, Integer start, Integer limit, String order, String type) {
+		Pager pagePlCourseTextbook = this.plCourseTextbookDao.pagePlCourseTextbook(query, start, limit, order, type);
+		return pagePlCourseTextbook;
+	}
+
+	@Override
+	public List<PlCourseTextbookPre> listTextBookCourse(Integer course_id) {
+		return this.plCourseTextbookDao.listTextBookCourse(course_id);
+	}
+
+	@Override
+	public List<Map<String, Object>> listCourseTextBook(Integer id) {
+		return this.plCourseTextbookDao.listCourseTextBook(id);
+	}
+
+	/**
+	 * 批量导入课程教材 规则: 1、如果已经存在,则移植到历史表,在更新批次信息 2、不存在,则直接写入
+	 */
+	@Override
+	public void addCourseTextbook(List<PlCourseTextbookPre> result) {
+		FrameOptr optr = RequestContextUtil.currentLoginUser();
+		for (PlCourseTextbookPre ctBook : result) {
+			PlCourseTextbookPre book = this.plCourseTextbookDao.findCourseTextbook(ctBook.getCourse_id(),
+					ctBook.getTextbook_id());
+			if (book != null) {
+				PlCourseTextbookLogPre log = new PlCourseTextbookLogPre();
+				log.setCourse_id(book.getCourse_id());
+				log.setTextbook_id(book.getTextbook_id());
+				log.setExam_time_id(book.getExam_time_id());
+				log.setType(LogOperateType.UPDATE.ordinal());
+				log.setOperator(optr != null ? optr.getLogin_name() + "(" + optr.getOptr_name() + ")" : "");
+				log.setOper_time(LocalDateTime.now());
+				this.ctBookLogDao.insert(log);// 写入历史数据
+				this.plCourseTextbookDao.updateCourseTextbook(book, ctBook); // 更新新的关系
+			} else {
+				this.plCourseTextbookDao.insert(ctBook);
+			}
+		}
+	}
+
+	@Override
+	public void insertTextbook(PlCourseTextbookPre ctBook) {
+		this.plCourseTextbookDao.insert(ctBook);
+	}
+
+	@Override
+	public void updateTextbookBatch(Integer id, Integer exam_time_id) {
+		checkNull(exam_time_id);
+		PlCourseTextbookPre textBook = plCourseTextbookDao.find(id);
+		if (null != textBook) {
+			this.plCourseTextbookDao.updateTextbookBatch(id, exam_time_id);
+
+			List<PlCourseTextbookLogPre> logList = this.plCourseTextbookLogDao
+					.listCourseTextbookLog(textBook.getCourse_id(), exam_time_id);
+			// 如果不存在,则新增一条
+			if (null == logList || logList.size() <= 0) {
+				FrameOptr optr = RequestContextUtil.currentLoginUser();
+				PlCourseTextbookLog log = new PlCourseTextbookLog();
+				log.setCourse_id(textBook.getCourse_id());
+				log.setTextbook_id(textBook.getTextbook_id());
+				log.setExam_time_id(exam_time_id);
+				log.setOperator(optr.getLogin_name() + "(" + optr.getOptr_name() + ")");
+				log.setOper_time(LocalDateTime.now());
+				log.setType(0);
+				this.plCourseTextbookLogDao.insert(log);
+			} else {
+				// 更新
+				for (PlCourseTextbookLogPre log : logList) {
+					FrameOptr optr = RequestContextUtil.currentLoginUser();
+					log.setOperator(optr.getLogin_name() + "(" + optr.getOptr_name() + ")");
+					log.setOper_time(LocalDateTime.now());
+					log.setType(1);
+					this.plCourseTextbookLogDao.update(log);
+				}
+			}
+
+		}
+
+	}
+
+	private void checkNull(Integer exam_time_id) {
+		FrameAssertUtil.isNotNull(exam_time_id, "请选择批次");
+	}
+
+	@Override
+	public File exportCtbook(Integer exam_year) {
+		List<Map<String, Object>> list = this.plCourseTextbookDao.listCourseTextbook(exam_year);
+		File serverFile = new File(
+				SysConst.getAppConfig().getDownloadTemp() + System.currentTimeMillis() + "ctbook.dbf");
+		OutputStream fos = null;
+		try {
+			DBFField[] fields = new DBFField[4];
+			// 考次
+			fields[0] = new DBFField();
+			fields[0].setName("kaoshiriqi");
+			fields[0].setDataType(DBFField.FIELD_TYPE_C);
+			fields[0].setFieldLength(10);
+			fields[0].setDecimalCount(0);
+
+			// 课程代号
+			fields[1] = new DBFField();
+			fields[1].setName("kechengdai");
+			fields[1].setDataType(DBFField.FIELD_TYPE_C);
+			fields[1].setFieldLength(10);
+			fields[1].setDecimalCount(0);
+
+			// 教材代号
+			fields[2] = new DBFField();
+			fields[2].setName("jiaocaidai");
+			fields[2].setDataType(DBFField.FIELD_TYPE_C);
+			fields[2].setFieldLength(10);
+			fields[2].setDecimalCount(0);
+
+			// 标志
+			fields[3] = new DBFField();
+			fields[3].setName("biaozhi");
+			fields[3].setDataType(DBFField.FIELD_TYPE_C);
+			fields[3].setFieldLength(2);
+			fields[3].setDecimalCount(0);
+
+			DBFWriter writer = new DBFWriter();
+			writer.setFields(fields);
+			for (Map<String, Object> map : list) {
+				Object[] rowData = new Object[4];
+				rowData[0] = map.get("year_code");
+				rowData[1] = map.get("course_code");
+				rowData[2] = map.get("textbook_code");
+				rowData[3] = map.get("status");
+				writer.addRecord(rowData);
+			}
+			// 定义输出流,并关联的一个文件
+			fos = new FileOutputStream(serverFile);
+			// 写入数据
+			writer.write(fos);
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			try {
+				fos.close();
+			} catch (Exception e) {
+			}
+		}
+		return serverFile;
+	}
+
+}

+ 10 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlExamTimeServiceImpl.java

@@ -281,4 +281,14 @@ public class PlExamTimeServiceImpl extends BaseServiceImpl<PlExamTime> implement
 		PlExamTime time = this.plExamTimeDao.find("year_code", year_code);
 		return this.plExamTimeDao.listExamTimeDbf(time != null ? time.getId() : null);
 	}
+
+	@Override
+	public List<PlExamTime> queryExamTimeByExamYear(Integer exam_year) {
+		return this.plExamTimeDao.queryExamTimeByExamYear(exam_year);
+	}
+
+	@Override
+	public PlExamTime queryPlExamTimeByYearCode(Integer yearCode) {
+		return this.plExamTimeDao.queryPlExamTimeByYearCode(yearCode);
+	}
 }

+ 81 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlMajorApplyProServiceImpl.java

@@ -0,0 +1,81 @@
+package cn.hmsoft.ses.service.impl.pl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import cn.hmsoft.frame.exception.web.BusinessException;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.ses.data.dao.pl.PlMajorApplyProDao;
+import cn.hmsoft.ses.data.dao.pl.PlMajorApplyProDetailDao;
+import cn.hmsoft.ses.data.model.pl.PlMajorApplyPro;
+import cn.hmsoft.ses.data.model.pl.PlMajorApplyProDetail;
+import cn.hmsoft.ses.service.iface.pl.IPlMajorApplyProService;
+import cn.hmsoft.web.service.impl.BaseServiceImpl;
+
+/**
+ * 专业申报主表 服务实现.
+ * 
+ * @author: zq
+ * @date: 2018-11-30 16:55:33
+ * @version: 1.0
+ * @email: zhanqiang@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Service
+public class PlMajorApplyProServiceImpl extends BaseServiceImpl<PlMajorApplyPro> implements IPlMajorApplyProService {
+
+	@Autowired
+	private PlMajorApplyProDao majorApplyProDao;
+
+	@Autowired
+	private PlMajorApplyProDetailDao plMajorApplyProDetailDao;
+
+	@Override
+	public PlatformDaoSupport<PlMajorApplyPro> getDao() {
+		return this.majorApplyProDao;
+	}
+
+	@Override
+	public Pager page(String query, Integer year, Integer school_id, Integer join_school_id, Integer major_id, Integer start, Integer limit) {
+		return this.majorApplyProDao.page(query, year, school_id,join_school_id, major_id, start, limit);
+	}
+
+	@Override
+	public void create(PlMajorApplyPro plMajorApply) {
+		PlMajorApplyProDetail temp = null;
+		for (Integer majorId : plMajorApply.getMajor_id_arr()) {
+			temp = this.plMajorApplyProDetailDao.queryPlMajorApplyPro(plMajorApply.getYear(),
+					plMajorApply.getSchool_id(), plMajorApply.getJoin_school_id(), majorId);
+			if (null != temp) {
+				throw new BusinessException("指定年度,主考学校对应衔接学校选中的专业已经存在专业备案,请不要重复录入。");
+			}
+		}
+
+		Integer applyId = this.majorApplyProDao.insert(plMajorApply);
+
+		for (Integer majorId : plMajorApply.getMajor_id_arr()) {
+			PlMajorApplyProDetail detail = new PlMajorApplyProDetail();
+			detail.setApply_id(applyId);
+			detail.setMajor_id(majorId);
+			this.plMajorApplyProDetailDao.insert(detail);
+		}
+
+	}
+	
+	@Override
+	public void deleteMajorApply(Integer id,Integer detail_id) {
+		this.plMajorApplyProDetailDao.delete(detail_id);
+		PlMajorApplyProDetail temp = this.plMajorApplyProDetailDao.find("apply_id", id);
+		if(null ==temp){
+			this.majorApplyProDao.delete(id);
+		}
+	}
+
+	@Override
+	public PlMajorApplyProDetail queryPlMajorApplyPro(Integer year, Integer school_id, Integer join_school_id,
+			Integer major_id) {
+		return this.plMajorApplyProDetailDao.queryPlMajorApplyPro(year, school_id, join_school_id, major_id);
+	}
+
+}

+ 121 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlMajorCoursePreServiceImpl.java

@@ -0,0 +1,121 @@
+package cn.hmsoft.ses.service.impl.pl;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.ses.data.dao.pl.PlCoursePreDao;
+import cn.hmsoft.ses.data.dao.pl.PlMajorCoursePreDao;
+import cn.hmsoft.ses.data.model.pl.PlCoursePre;
+import cn.hmsoft.ses.data.model.pl.PlMajorCoursePre;
+import cn.hmsoft.ses.service.iface.pl.IPlMajorCoursePreService;
+import cn.hmsoft.web.service.impl.BaseServiceImpl;
+
+/**
+ * 专业课程对应表 服务实现.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-17 10:03:45
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Service
+public class PlMajorCoursePreServiceImpl extends BaseServiceImpl<PlMajorCoursePre> implements IPlMajorCoursePreService {
+
+	@Autowired
+	private PlMajorCoursePreDao plMajorCourseDao;
+	@Autowired
+	private PlCoursePreDao courseDao;
+
+	@Override
+	public PlatformDaoSupport<PlMajorCoursePre> getDao() {
+		return this.plMajorCourseDao;
+	}
+
+	/**
+	 * 分页查询.
+	 */
+	public Pager pagePlMajorCourse(String query, Integer start, Integer limit, String order, String type) {
+		Pager pagePlMajorCourse = this.plMajorCourseDao.pagePlMajorCourse(query, start, limit, order, type);
+		return pagePlMajorCourse;
+	}
+
+	/**
+	 * 查询专业课程列表,主要是按照字段排序
+	 */
+	@Override
+	public List<PlMajorCoursePre> listMajorCourse(Integer major_id, String keyword) {
+		return this.plMajorCourseDao.listMajorCourse(major_id, keyword);
+	}
+
+	@Override
+	public List<Map<String, Object>> findMajorByCourse(Integer id) {
+		return this.plMajorCourseDao.findMajorByCourse(id);
+	}
+
+	@Override
+	public PlMajorCoursePre findMajorCourse(Integer major_id, Integer course_id) {
+		return this.plMajorCourseDao.findMajorByCourse(major_id, course_id);
+	}
+
+	@Override
+	public List<Map<String, Object>> listCourseTextbook(Integer major_id, String content) {
+		return this.plMajorCourseDao.listCourseTextbook(major_id, content);
+	}
+
+	@Override
+	public void editPlMajorCourse(Integer major_id, Integer[] course_ids, Integer[] course_natures) {
+		for (int i = 0; i < course_ids.length; i++) {
+			this.plMajorCourseDao.updatePlMajorCourse(major_id, course_ids[i], course_natures[i]);
+		}
+	}
+
+	/**
+	 * 查找专业下的课程总学分
+	 */
+	@Override
+	public String findMajorScore(Integer major_id) {
+		Float totoalScore = 0f;
+		List<String> scoreList = new ArrayList<>();
+		List<PlCoursePre> list = this.courseDao.listCourseScore(major_id);
+		for (PlCoursePre course : list) {
+			scoreList.add(course.getCourse_score());
+		}
+		for (String score : scoreList) {
+			if ("null".equals(score) || StringHelper.isEmpty(score)) {
+				score = "0";
+			}
+			Float courseScore = Float.parseFloat(score);
+			totoalScore += courseScore;
+		}
+		return totoalScore.toString();
+	}
+
+	@Override
+	public void updateMcDirect(Integer major_id, Integer course_id, String direct_remark,String course_nature) {
+		this.plMajorCourseDao.updateMcDirect(major_id, course_id, direct_remark,course_nature);
+	}
+
+	@Override
+	public void updateCourseScore(Integer course_id, String course_score) {
+		this.plMajorCourseDao.updateCourseScore(course_id, course_score);
+	}
+
+	@Override
+	public void updateCourseIscompose(Integer major_id, Integer course_id, String iscompose) {
+		this.plMajorCourseDao.updateCourseIscompose(major_id, course_id, iscompose);
+	}
+
+	@Override
+	public List<PlMajorCoursePre> listByMajorCourse(Integer majorId) {
+		return this.plMajorCourseDao.listByMajorCourse(majorId);
+	}
+
+}

+ 10 - 2
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlMajorCourseServiceImpl.java

@@ -17,6 +17,7 @@ import cn.hmsoft.ses.data.model.pl.PlCourse;
 import cn.hmsoft.ses.data.model.pl.PlExamTime;
 import cn.hmsoft.ses.data.model.pl.PlMajorCourse;
 import cn.hmsoft.ses.service.iface.pl.IPlMajorCourseService;
+import cn.hmsoft.ses.util.YearCodeHelper;
 import cn.hmsoft.web.service.impl.BaseServiceImpl;
 
 /**
@@ -70,8 +71,15 @@ public class PlMajorCourseServiceImpl extends BaseServiceImpl<PlMajorCourse> imp
 	}
 
 	@Override
-	public List<Map<String, Object>> listCourseTextbook(Integer major_id, String content) {
-		return this.plMajorCourseDao.listCourseTextbook(major_id ,content);
+	public List<Map<String, Object>> listCourseTextbook(Integer major_id, String content,Integer exam_time_id) {
+		if(null == exam_time_id){
+			String year_code = YearCodeHelper.getCurrentYearCode();
+			PlExamTime plExamTime= timeDao.find("year_code", year_code);
+			if(null != plExamTime){
+				exam_time_id = plExamTime.getId();
+			}
+		}
+		return this.plMajorCourseDao.listCourseTextbook(major_id ,content, exam_time_id);
 	}
 
 	@Override

+ 371 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlMajorPreServiceImpl.java

@@ -0,0 +1,371 @@
+package cn.hmsoft.ses.service.impl.pl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.itextpdf.layout.Document;
+import com.itextpdf.layout.element.AreaBreak;
+import com.itextpdf.layout.element.Cell;
+import com.itextpdf.layout.element.Paragraph;
+import com.itextpdf.layout.element.Table;
+import com.itextpdf.layout.property.AreaBreakType;
+import com.itextpdf.layout.property.TextAlignment;
+import com.itextpdf.layout.property.VerticalAlignment;
+
+import cn.hmsoft.frame.exception.web.BusinessException;
+import cn.hmsoft.frame.util.FrameAssertUtil;
+import cn.hmsoft.helper.LogHelper;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.office.pdf.ItextDocumentModel;
+import cn.hmsoft.office.pdf.ItextPdfHelper;
+import cn.hmsoft.ses.common.constants.OrgConst.OrgType;
+import cn.hmsoft.ses.common.constants.SysConst;
+import cn.hmsoft.ses.data.dao.pl.PlMajorCoursePreDao;
+import cn.hmsoft.ses.data.dao.pl.PlMajorPreDao;
+import cn.hmsoft.ses.data.dao.pl.PlSchoolMajorPreDao;
+import cn.hmsoft.ses.data.model.cf.CfOrganization;
+import cn.hmsoft.ses.data.model.pl.PlMajorPre;
+import cn.hmsoft.ses.data.model.pl.PlSchoolMajorPre;
+import cn.hmsoft.ses.service.iface.pl.IPlMajorPreService;
+import cn.hmsoft.ses.util.StudyFileHelper;
+import cn.hmsoft.ses.util.dbf.DBFField;
+import cn.hmsoft.ses.util.dbf.DBFWriter;
+import cn.hmsoft.web.service.impl.BaseServiceImpl;
+
+/**
+ * 专业信息表 服务实现.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-16 15:40:22
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Service
+public class PlMajorPreServiceImpl extends BaseServiceImpl<PlMajorPre> implements IPlMajorPreService {
+
+	@Autowired
+	private PlMajorPreDao plMajorDao;
+	@Autowired
+	private PlSchoolMajorPreDao schoolMajorDao;
+	@Autowired
+	private PlMajorCoursePreDao plMajorCoursePreDao;
+
+	@Override
+	public PlatformDaoSupport<PlMajorPre> getDao() {
+		return this.plMajorDao;
+	}
+
+	@Override
+	public List<PlMajorPre> queryMajor() {
+		return plMajorDao.queryMajor();
+	}
+
+	@Override
+	public List<PlMajorPre> queryAllMajor() {
+		return plMajorDao.queryAllMajor();
+	}
+
+	/**
+	 * 分页查询.
+	 */
+	public Pager pagePlMajor(String query, Integer start, Integer limit, String order, String type, Integer major_level,
+			Integer nation_exam, Integer year, Integer status, Integer schoolId, Integer org_id, Integer is_net_exam,
+			Integer is_live_enrol) {
+		Pager pagePlMajor = this.plMajorDao.pagePlMajor(query, start, limit, order, type, major_level, nation_exam,
+				year, status, schoolId, org_id, is_net_exam, is_live_enrol);
+		return pagePlMajor;
+	}
+
+	@Override
+	public List<PlMajorPre> findMajorByCode(String major_code, Integer year) {
+		return this.plMajorDao.findMajorByCode(major_code, year);
+	}
+
+	/**
+	 * 根据学科查找专业
+	 */
+	@Override
+	public List<PlMajorPre> findMajorBySubject(Integer subject_id) {
+		return this.plMajorDao.list("subject_id", subject_id);
+	}
+
+	@Override
+	public List<PlMajorPre> listMajor(String ids) {
+		return this.plMajorDao.listMajor(ids, null, null);
+	}
+
+	@Override
+	public List<PlMajorPre> findCourseAndBook(Integer id) {
+		return this.plMajorDao.findCourseAndBook(id);
+	}
+
+	/**
+	 * 专业课程--导出PDF
+	 */
+	@Override
+	public File makeCourseBook(String[] ids) {
+		Document doc = null;
+
+		try {
+			File tempFile = StudyFileHelper.createTempFile();
+			ItextDocumentModel model = new ItextDocumentModel();
+			model.rotate();
+			doc = model.prepareDocument(tempFile);
+
+			int index = 0;
+			for (String id : ids) {
+				List<PlMajorPre> list = this.plMajorDao.findCourseAndBook(Integer.parseInt(id));
+				if (list != null && list.size() > 0) {
+					// 1、专业标题信息
+					Paragraph majorName = new Paragraph(list.get(0).getMajor_name()).setFontSize(20).setBold()
+							.setTextAlignment(TextAlignment.CENTER);
+					Paragraph majorCode = new Paragraph("专业代码:" + list.get(0).getMajor_code()).setFontSize(15)
+							.setTextAlignment(TextAlignment.CENTER);
+					doc.add(majorName);
+					doc.add(majorCode);
+
+					// 2、表头信息
+					Table table = new Table(new float[] { 0.35f, 1f, 0.2f, 1.35f, 1.1f, 0.3f, 0.5f })
+							.setWidthPercent(100).setBorder(null);
+					table.addCell(new Cell().add("课程代码").setTextAlignment(TextAlignment.CENTER)
+							.setVerticalAlignment(VerticalAlignment.MIDDLE))
+							.addCell(new Cell().add("课程名称").setTextAlignment(TextAlignment.CENTER)
+									.setVerticalAlignment(VerticalAlignment.MIDDLE))
+							.addCell(new Cell().add("学分").setTextAlignment(TextAlignment.CENTER)
+									.setVerticalAlignment(VerticalAlignment.MIDDLE))
+							.addCell(new Cell().add("教材名称").setTextAlignment(TextAlignment.CENTER)
+									.setVerticalAlignment(VerticalAlignment.MIDDLE))
+							.addCell(new Cell().add("出版社").setTextAlignment(TextAlignment.CENTER)
+									.setVerticalAlignment(VerticalAlignment.MIDDLE))
+							.addCell(new Cell().add("版次").setTextAlignment(TextAlignment.CENTER)
+									.setVerticalAlignment(VerticalAlignment.MIDDLE))
+							.addCell(new Cell().add("启用批次").setTextAlignment(TextAlignment.CENTER)
+									.setVerticalAlignment(VerticalAlignment.MIDDLE));
+					for (PlMajorPre plMajor : list) {
+						// 3、表数据
+						table.addCell(new Cell(1, 1).add(plMajor.getCourse_code())
+								.setTextAlignment(TextAlignment.CENTER).setVerticalAlignment(VerticalAlignment.MIDDLE));
+						table.addCell(new Cell(1, 1).add(plMajor.getCourse_name())
+								.setVerticalAlignment(VerticalAlignment.MIDDLE));
+						table.addCell(new Cell(1, 1)
+								.add(plMajor.getCourse_score() == null ? "" : plMajor.getCourse_score())
+								.setTextAlignment(TextAlignment.RIGHT).setVerticalAlignment(VerticalAlignment.MIDDLE));
+						table.addCell(
+								new Cell(1, 1).add(plMajor.getTextbook_name() == null ? "" : plMajor.getTextbook_name())
+										.setVerticalAlignment(VerticalAlignment.MIDDLE));
+						table.addCell(new Cell(1, 1)
+								.add(plMajor.getTextbook_publisher() == null ? "" : plMajor.getTextbook_publisher())
+								.setVerticalAlignment(VerticalAlignment.MIDDLE));
+						table.addCell(new Cell(1, 1)
+								.add(plMajor.getTextbook_revision() == null ? "" : plMajor.getTextbook_revision())
+								.setVerticalAlignment(VerticalAlignment.MIDDLE));
+						table.addCell(new Cell(1, 1)
+								.add(plMajor.getExam_year_month() == null ? "" : "" + plMajor.getExam_year_month())
+								.setVerticalAlignment(VerticalAlignment.MIDDLE));
+					}
+					doc.add(table);
+
+				} else { // 针对专业下没有任何课程的情况
+					// 1、专业标题信息
+					PlMajorPre major = this.plMajorDao.find(Integer.parseInt(id));
+					Paragraph majorName = new Paragraph(major.getMajor_name()).setFontSize(20).setBold()
+							.setTextAlignment(TextAlignment.CENTER);
+					Paragraph majorCode = new Paragraph("专业代码:" + major.getMajor_code()).setFontSize(15)
+							.setTextAlignment(TextAlignment.CENTER);
+					doc.add(majorName);
+					doc.add(majorCode);
+
+				}
+
+				if (index != ids.length - 1) {
+					// 新页
+					doc.add(new AreaBreak(AreaBreakType.NEXT_PAGE));
+				}
+
+				index++;
+			}
+			ItextPdfHelper.closePdf(doc);
+			return tempFile;
+		} catch (Exception e) {
+			LogHelper.error(e);
+			throw new BusinessException("无法生成pdf文件,请联系系统管理员");
+		}
+	}
+
+	@Override
+	public PlMajorPre findMajor(Integer id) {
+		return this.plMajorDao.findMajor(id);
+	}
+
+	@Override
+	public List<PlMajorPre> listMajor(Integer[] course_ids, Integer major_id) {
+		FrameAssertUtil.isNotNull(course_ids, "请选择专业课程");
+		return this.plMajorDao.listMajor(course_ids, major_id);
+	}
+
+	@Override
+	public List<PlMajorPre> listMajorByType(Integer exam_start_type) {
+		return this.plMajorDao.listMajor(exam_start_type);
+	}
+
+	@Override
+	public List<PlMajorPre> listByCurrentYear(Integer currentYear) {
+		return this.plMajorDao.listMajor("", currentYear, null);
+	}
+
+	@Override
+	public List<PlMajorPre> listMajor(String major_code, String major_name) {
+		return this.plMajorDao.listPlMajor(major_code, major_name);
+	}
+
+	@Override
+	public List<PlMajorPre> listMajorNewOld(Integer is_new_major) {
+		return this.plMajorDao.listMajor(null, null, is_new_major);
+	}
+
+	@Override
+	public List<PlMajorPre> listMajorIsAllowGraduate(Integer isAllowFlag) {
+		return this.plMajorDao.listMajorIsAllowGraduate(isAllowFlag);
+	}
+
+	@Override
+	public List<PlMajorPre> listMajorByOrgId(Integer exam_time_id, Integer org_id, Integer isAllowFlag) {
+		return this.plMajorDao.listMajorByOrgId(exam_time_id, org_id, isAllowFlag);
+	}
+
+	@Override
+	public PlMajorPre findMajorSchool(Integer id) {
+		return this.plMajorDao.findMajorAndSchool(id);
+	}
+
+	@Override
+	public void insertMajor(PlMajorPre plMajor, CfOrganization org) {
+		// 主考学校
+		if (org.getOrg_type() == OrgType.SCHOOL_EXAM.ordinal()) {
+			plMajor.setIs_new_major(1); // 主考学校录入的全部设置为新专业
+			// 设置专业对应的开办学校
+			PlSchoolMajorPre schoolMajor = new PlSchoolMajorPre();
+			schoolMajor.setSchool_id(org.getId());
+			schoolMajor.setMajor_code(plMajor.getMajor_code());
+			schoolMajor.setStatus(1);
+			schoolMajor.setSchool_code(org.getOrg_code());
+			PlSchoolMajorPre existMajor = this.schoolMajorDao.findSchoolMajor(org.getId(), plMajor.getMajor_code());
+			if (existMajor == null) {
+				this.schoolMajorDao.insert(schoolMajor);
+			}
+		} else {
+			plMajor.setIs_new_major(0);
+		}
+
+		if (StringUtils.isEmpty(plMajor.getMajor_standard_code())) {
+			plMajor.setMajor_standard_code(plMajor.getMajor_code());
+		}
+
+		this.plMajorDao.insert(plMajor);
+	}
+
+	@Override
+	public void deletePlMajor(Integer id) {
+		PlMajorPre major = this.plMajorDao.find(id);
+		if(null != major){
+			// 删专业前,先删除专业对应的学校信息
+			this.schoolMajorDao.delete("major_code", major.getMajor_code());
+			this.plMajorCoursePreDao.delete("major_id", id);
+			this.plMajorDao.delete(id);
+		}
+	}
+
+	@Override
+	public File exportDbf() {
+		List<PlMajorPre> list = this.plMajorDao.listMajor();
+		File serverFile = new File(
+				SysConst.getAppConfig().getDownloadTemp() + System.currentTimeMillis() + "major.dbf");
+		OutputStream fos = null;
+		try {
+			DBFField[] fields = new DBFField[7];
+			// 专业代号
+			fields[0] = new DBFField();
+			fields[0].setName("zhuanyedai");
+			fields[0].setDataType(DBFField.FIELD_TYPE_C);
+			fields[0].setFieldLength(10);
+			fields[0].setDecimalCount(0);
+			// 专业名称
+			fields[1] = new DBFField();
+			fields[1].setName("mingcheng");
+			fields[1].setDataType(DBFField.FIELD_TYPE_C);
+			fields[1].setFieldLength(50);
+			fields[1].setDecimalCount(0);
+
+			// 专业名称
+			fields[2] = new DBFField();
+			fields[2].setName("guobiao");
+			fields[2].setDataType(DBFField.FIELD_TYPE_C);
+			fields[2].setFieldLength(50);
+			fields[2].setDecimalCount(0);
+
+			fields[3] = new DBFField();
+			fields[3].setName("kaikaoyuan");
+			fields[3].setDataType(DBFField.FIELD_TYPE_C);
+			fields[3].setFieldLength(50);
+			fields[3].setDecimalCount(0);
+
+			fields[4] = new DBFField();
+			fields[4].setName("fangxiang");
+			fields[4].setDataType(DBFField.FIELD_TYPE_C);
+			fields[4].setFieldLength(50);
+			fields[4].setDecimalCount(0);
+
+			fields[5] = new DBFField();
+			fields[5].setName("guobiaomin");
+			fields[5].setDataType(DBFField.FIELD_TYPE_C);
+			fields[5].setFieldLength(50);
+			fields[5].setDecimalCount(0);
+			// 专业名称
+			fields[6] = new DBFField();
+			fields[6].setName("shuxing");
+			fields[6].setDataType(DBFField.FIELD_TYPE_C);
+			fields[6].setFieldLength(50);
+			fields[6].setDecimalCount(0);
+
+			DBFWriter writer = new DBFWriter();
+			writer.setFields(fields);
+			for (PlMajorPre major : list) {
+				Object[] rowData = new Object[7];
+				rowData[0] = major.getMajor_code();
+				rowData[1] = major.getMajor_name();
+				rowData[2] = major.getMajor_standard_code();
+				rowData[3] = major.getOrg_name();
+				rowData[4] = "";
+				rowData[5] = major.getMajor_standard_name();
+				rowData[6] = major.getRemark();
+				writer.addRecord(rowData);
+			}
+			// 定义输出流,并关联的一个文件
+			fos = new FileOutputStream(serverFile);
+			// 写入数据
+			writer.write(fos);
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			try {
+				fos.close();
+			} catch (Exception e) {
+			}
+		}
+		return serverFile;
+	}
+
+	@Override
+	public List<PlMajorPre> queryMajorByStatus(Integer status) {
+		return this.plMajorDao.queryMajorByStatus(status);
+	}
+
+}

+ 51 - 9
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlMajorServiceImpl.java

@@ -27,13 +27,17 @@ import cn.hmsoft.office.pdf.ItextDocumentModel;
 import cn.hmsoft.office.pdf.ItextPdfHelper;
 import cn.hmsoft.ses.common.constants.SysConst;
 import cn.hmsoft.ses.common.constants.OrgConst.OrgType;
+import cn.hmsoft.ses.data.dao.pl.PlExamTimeDao;
+import cn.hmsoft.ses.data.dao.pl.PlMajorCourseDao;
 import cn.hmsoft.ses.data.dao.pl.PlMajorDao;
 import cn.hmsoft.ses.data.dao.pl.PlSchoolMajorDao;
 import cn.hmsoft.ses.data.model.cf.CfOrganization;
+import cn.hmsoft.ses.data.model.pl.PlExamTime;
 import cn.hmsoft.ses.data.model.pl.PlMajor;
 import cn.hmsoft.ses.data.model.pl.PlSchoolMajor;
 import cn.hmsoft.ses.service.iface.pl.IPlMajorService;
 import cn.hmsoft.ses.util.StudyFileHelper;
+import cn.hmsoft.ses.util.YearCodeHelper;
 import cn.hmsoft.ses.util.dbf.DBFField;
 import cn.hmsoft.ses.util.dbf.DBFWriter;
 import cn.hmsoft.web.service.impl.BaseServiceImpl;
@@ -54,6 +58,10 @@ public class PlMajorServiceImpl extends BaseServiceImpl<PlMajor> implements IPlM
 	private PlMajorDao plMajorDao;
 	@Autowired
 	private PlSchoolMajorDao schoolMajorDao;
+	@Autowired
+	private PlMajorCourseDao plMajorCourseDao;
+	@Autowired
+	private PlExamTimeDao timeDao;
 
 	@Override
 	public PlatformDaoSupport<PlMajor> getDao() {
@@ -98,15 +106,22 @@ public class PlMajorServiceImpl extends BaseServiceImpl<PlMajor> implements IPlM
 	}
 	
 	@Override
-	public List<PlMajor> findCourseAndBook(Integer id) {
-		return this.plMajorDao.findCourseAndBook(id);
+	public List<PlMajor> findCourseAndBook(Integer id,Integer exam_time_id) {
+		if(null == exam_time_id){
+			String year_code = YearCodeHelper.getCurrentYearCode();
+			PlExamTime plExamTime= timeDao.find("year_code", year_code);
+			if(null != plExamTime){
+				exam_time_id = plExamTime.getId();
+			}
+		}
+		return this.plMajorDao.findCourseAndBook(id, exam_time_id);
 	}
 
 	/**
 	 * 专业课程--导出PDF
 	 */
 	@Override
-	public File makeCourseBook(String[] ids) {
+	public File makeCourseBook(String[] ids,Integer exam_time_id) {
 		Document doc = null;
 		
 		try {
@@ -115,9 +130,17 @@ public class PlMajorServiceImpl extends BaseServiceImpl<PlMajor> implements IPlM
 			model.rotate();
 			doc = model.prepareDocument(tempFile);
 			
+			if(null == exam_time_id){
+				String year_code = YearCodeHelper.getCurrentYearCode();
+				PlExamTime plExamTime= this.timeDao.find("year_code", year_code);
+				if(null != plExamTime){
+					exam_time_id = plExamTime.getId();
+				}
+			}
+			
 			int index = 0;
 			for (String id : ids) {
-				List<PlMajor> list = this.plMajorDao.findCourseAndBook(Integer.parseInt(id));
+				List<PlMajor> list = this.plMajorDao.findCourseAndBook(Integer.parseInt(id), exam_time_id);
 				if (list != null && list.size() > 0) {
 					// 1、专业标题信息
 					Paragraph majorName = new Paragraph(list.get(0).getMajor_name()).setFontSize(20).setBold()
@@ -128,7 +151,7 @@ public class PlMajorServiceImpl extends BaseServiceImpl<PlMajor> implements IPlM
 					doc.add(majorCode);
 
 					// 2、表头信息
-					Table table = new Table(new float[] { 0.35f, 1f, 0.2f, 1.35f, 1.1f, 0.3f, 0.5f }).setWidthPercent(100)
+					Table table = new Table(new float[] { 0.35f, 0.8f, 0.2f, 0.8f, 0.8f, 0.6f, 0.3f, 0.5f }).setWidthPercent(100)
 							.setBorder(null);
 					table.addCell(new Cell().add("课程代码").setTextAlignment(TextAlignment.CENTER)
 							.setVerticalAlignment(VerticalAlignment.MIDDLE))
@@ -138,11 +161,13 @@ public class PlMajorServiceImpl extends BaseServiceImpl<PlMajor> implements IPlM
 									.setVerticalAlignment(VerticalAlignment.MIDDLE))
 							.addCell(new Cell().add("教材名称").setTextAlignment(TextAlignment.CENTER)
 									.setVerticalAlignment(VerticalAlignment.MIDDLE))
+							.addCell(new Cell().add("教材大纲").setTextAlignment(TextAlignment.CENTER)
+									.setVerticalAlignment(VerticalAlignment.MIDDLE))
 							.addCell(new Cell().add("出版社").setTextAlignment(TextAlignment.CENTER)
 									.setVerticalAlignment(VerticalAlignment.MIDDLE))
 							.addCell(new Cell().add("版次").setTextAlignment(TextAlignment.CENTER)
 									.setVerticalAlignment(VerticalAlignment.MIDDLE))
-							.addCell(new Cell().add("启用批次").setTextAlignment(TextAlignment.CENTER)
+							.addCell(new Cell().add("考试批次").setTextAlignment(TextAlignment.CENTER)
 									.setVerticalAlignment(VerticalAlignment.MIDDLE));
 					for (PlMajor plMajor : list) {
 						// 3、表数据
@@ -156,6 +181,9 @@ public class PlMajorServiceImpl extends BaseServiceImpl<PlMajor> implements IPlM
 						table.addCell(
 								new Cell(1, 1).add(plMajor.getTextbook_name() == null ? "" : plMajor.getTextbook_name())
 										.setVerticalAlignment(VerticalAlignment.MIDDLE));
+						table.addCell(
+								new Cell(1, 1).add(plMajor.getTextbook_outline()== null ? "" : plMajor.getTextbook_outline())
+										.setVerticalAlignment(VerticalAlignment.MIDDLE));
 						table.addCell(new Cell(1, 1)
 								.add(plMajor.getTextbook_publisher() == null ? "" : plMajor.getTextbook_publisher())
 								.setVerticalAlignment(VerticalAlignment.MIDDLE));
@@ -270,9 +298,13 @@ public class PlMajorServiceImpl extends BaseServiceImpl<PlMajor> implements IPlM
 	@Override
 	public void deletePlMajor(Integer id) {
 		PlMajor major = this.plMajorDao.find(id);
-		//删专业前,先删除专业对应的学校信息
-		this.schoolMajorDao.delete("major_code", major.getMajor_code());
-		this.plMajorDao.delete(id);
+		if(null != major){
+			// 删专业前,先删除专业对应的学校信息
+			this.schoolMajorDao.delete("major_code", major.getMajor_code());
+			this.plMajorCourseDao.delete("major_id", id);
+			this.plMajorDao.delete(id);
+		}
+		
 	}
 
 	@Override
@@ -363,5 +395,15 @@ public class PlMajorServiceImpl extends BaseServiceImpl<PlMajor> implements IPlM
 	public List<PlMajor> queryMajorByStatus(Integer status) {
 		return this.plMajorDao.queryMajorByStatus(status);
 	}
+	
+	@Override
+	public List<PlMajor> queryMajorByStatus(Integer status,Integer major_level){
+		return this.plMajorDao.queryMajorByStatus(status, major_level);
+	}
+
+	@Override
+	public List<PlMajor> queryOpenMajorAndStdMajor(Integer major_id) {
+		return this.plMajorDao.queryOpenMajorAndStdMajor(major_id);
+	}
 
 }

+ 8 - 7
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlMergePublishPlanServiceImpl.java

@@ -112,11 +112,7 @@ public class PlMergePublishPlanServiceImpl extends BaseServiceImpl<PlMergePublis
 		return this.mergePublishPlanDao.courseDetailPage(query, isNationExam, examYear, examMonth, exam_time,limit, start, queryOrder);
 	}
 	
-	@Override
-	public Pager courseTextbookPage(String query, Integer isNationExam, Integer examYear, Integer examMonth, String exam_time,Integer limit, 
-    		Integer start) {
-		return this.mergePublishPlanDao.courseTextbookPage(query, isNationExam, examYear, examMonth, exam_time,limit, start);
-	}
+	
 	
 	/**
 	 * 发布初稿.
@@ -1645,7 +1641,12 @@ public class PlMergePublishPlanServiceImpl extends BaseServiceImpl<PlMergePublis
 		//RegionUtil.setBorderLeft(BorderStyle.THIN, region5, sheet);
 		//RegionUtil.setBorderTop(BorderStyle.THIN, region5, sheet);
 	}
-	
-	
+
+	@Override
+	public Pager queryCourseTextbook(String query, Integer isNationExam, Integer exam_time_id,
+			String exam_time) {
+		return this.mergePublishPlanDao.queryCourseTextbook(query, isNationExam, exam_time_id, exam_time);
+	}
+
 	
 }

+ 39 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlPublishPlanMainServiceImpl.java

@@ -2,13 +2,19 @@ package cn.hmsoft.ses.service.impl.pl;
 
 import cn.hmsoft.jdbc.entity.Pager;
 import cn.hmsoft.jdbc.entity.QueryOrder;
+import cn.hmsoft.frame.data.model.FrameOptr;
 import cn.hmsoft.jdbc.core.PlatformDaoSupport;
 import cn.hmsoft.ses.service.iface.pl.IPlPublishPlanMainService;
 import cn.hmsoft.ses.data.model.pl.PlPublishPlanMain;
+import cn.hmsoft.ses.common.constants.CourseConst.ExamPlanPubStatus;
 import cn.hmsoft.ses.data.dao.pl.PlMergePublishPlanDao;
 import cn.hmsoft.ses.data.dao.pl.PlPublishPlanMainDao;
+import cn.hmsoft.ses.data.dao.pl.PlTextbookDao;
 import cn.hmsoft.web.service.impl.BaseServiceImpl;
 import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
@@ -27,6 +33,8 @@ public class PlPublishPlanMainServiceImpl extends BaseServiceImpl<PlPublishPlanM
 	private PlPublishPlanMainDao plPublishPlanMainDao;
 	@Autowired
 	private PlMergePublishPlanDao mergePublishPlanDao;
+	@Autowired
+	private PlTextbookDao plTextbookDao;
 	
 	@Override
 	public PlatformDaoSupport<PlPublishPlanMain> getDao() {
@@ -51,4 +59,35 @@ public class PlPublishPlanMainServiceImpl extends BaseServiceImpl<PlPublishPlanM
 		this.plPublishPlanMainDao.delete(mainId);
 		this.mergePublishPlanDao.delete("main_id", mainId);
 	}
+
+	@Override
+	public void publish(Integer[] ids,FrameOptr optr) {
+		PlPublishPlanMain main = null;
+		for (Integer id : ids) {
+    		main = this.plPublishPlanMainDao.find(id);
+    		if(null != main){
+    			main.setStatus(ExamPlanPubStatus.PUB_FINAL.ordinal());
+        		main.setPublisher(optr.getOptr_id());
+        		main.setPublish_time(LocalDateTime.now());
+        		this.plPublishPlanMainDao.update(main);
+        		this.plTextbookDao.publishPlTextbook(main.getExam_time_id());
+    		}
+    		
+    	}
+		
+	}
+
+	@Override
+	public void regression(Integer[] ids) {
+		for (Integer id : ids) {
+    		PlPublishPlanMain plan = this.plPublishPlanMainDao.find(id);
+    		if(null != plan){
+    			plan.setStatus(ExamPlanPubStatus.DRAFT.ordinal());
+        		this.plPublishPlanMainDao.update(plan);
+        		this.plTextbookDao.regressionPlTextbook(plan.getExam_time_id());
+    		}
+    		
+    	}
+		
+	}
 }

+ 74 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlSchoolMajorPreServiceImpl.java

@@ -0,0 +1,74 @@
+package cn.hmsoft.ses.service.impl.pl;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import cn.hmsoft.ses.data.dao.pl.PlMajorPreDao;
+import cn.hmsoft.ses.data.dao.pl.PlSchoolMajorPreDao;
+import cn.hmsoft.ses.data.model.pl.PlMajorPre;
+import cn.hmsoft.ses.data.model.pl.PlSchoolMajorPre;
+import cn.hmsoft.ses.service.iface.pl.IPlSchoolMajorPreService;
+import cn.hmsoft.web.service.impl.BaseServiceImpl;
+
+/**
+ * 专业对应的主考学校 主考学校开考了哪些专业 服务实现.
+ * 
+ * @author: haoguanghui
+ * @date: 2019-06-06 13:46:59
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Service
+public class PlSchoolMajorPreServiceImpl extends BaseServiceImpl<PlSchoolMajorPre> implements IPlSchoolMajorPreService {
+
+	@Autowired
+	private PlSchoolMajorPreDao plSchoolMajorDao;
+	@Autowired
+	private PlMajorPreDao majorDao;
+	
+	@Override
+	public PlatformDaoSupport<PlSchoolMajorPre> getDao() {
+		return this.plSchoolMajorDao;
+	}
+	
+	/**
+	 * 分页查询.
+	 * @param query
+	 * @param start
+	 * @param limit
+	 * @param order
+	 * @param type
+	 * @return
+	 */
+	public Pager page(String query, Integer start, Integer limit, QueryOrder queryOrder) {
+		Pager pagePlSchoolMajor = this.plSchoolMajorDao.page(query, start, limit, queryOrder);
+		return pagePlSchoolMajor;
+	}
+
+	/**
+	 * 通过专业code,查找专业对应的主考学校
+	 */
+	@Override
+	public List<PlSchoolMajorPre> listSchoolMajor(String major_code) {
+		return this.plSchoolMajorDao.listSchoolMajor(major_code);
+	}
+
+	/**
+	 * 通过专业ID,查找专业对应的主考学校
+	 */
+	@Override
+	public List<PlSchoolMajorPre> listSchoolMajor(Integer major_id) {
+		PlMajorPre major = this.majorDao.find(major_id);
+		return this.plSchoolMajorDao.listSchoolMajor(major.getMajor_code());
+	}	
+	
+	
+	
+	
+}

+ 1 - 1
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlStdRecordCancelServiceImpl.java

@@ -107,7 +107,7 @@ public class PlStdRecordCancelServiceImpl extends BaseServiceImpl<PlStdRecordCan
 		FrameOptr optr = RequestContextUtil.currentLoginUser();
 		FrameAssertUtil.isNotNull(optr, "请重新登录");
 		Pager pagePlStdRecord = this.plStdRecordDao.page(query, start, limit, queryOrder, year_code, status, mk_id,
-				optr.getOptr_dept(), ApplyForm.NET_ASSIST.ordinal(), join_school_id, remark,null);
+				optr.getOptr_dept(), ApplyForm.NET_ASSIST.ordinal(), join_school_id, remark,null,null);
 		this.dealJoinMajor(pagePlStdRecord);
 		return pagePlStdRecord;
 	}

+ 9 - 7
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlStdRecordServiceImpl.java

@@ -1,9 +1,9 @@
 package cn.hmsoft.ses.service.impl.pl;
 
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -68,7 +68,7 @@ public class PlStdRecordServiceImpl extends BaseServiceImpl<PlStdRecord> impleme
 	 * 专本衔接考生-分页查询.
 	 */
 	public Pager page(String query, Integer start, Integer limit, QueryOrder queryOrder, Integer year_code,
-			Integer status, Integer mk_id, Integer std_type,Integer join_school_id,Integer school_id,String is_xj) {
+			Integer status, Integer mk_id, Integer std_type,Integer join_school_id,Integer school_id,String is_xj,String major_code) {
 		FrameOptr optr = RequestContextUtil.currentLoginUser();
 		FrameAssertUtil.isNotNull(optr, "请重新登录");
 		if (null == std_type) {
@@ -80,7 +80,7 @@ public class PlStdRecordServiceImpl extends BaseServiceImpl<PlStdRecord> impleme
 		}
 		
 		Pager pagePlStdRecord = this.plStdRecordDao.page(query, start, limit, queryOrder, year_code, status, mk_id,
-				school_id, std_type, join_school_id,null, is_xj);
+				school_id, std_type, join_school_id,null, is_xj, major_code);
 		//处理专业名称为空的问题
 		dealJoinMajor(pagePlStdRecord);
 		return pagePlStdRecord;
@@ -93,7 +93,7 @@ public class PlStdRecordServiceImpl extends BaseServiceImpl<PlStdRecord> impleme
 	private void dealJoinMajor(Pager pagePlStdRecord) {
 		List<Map<String,Object>> result = (List<Map<String, Object>>) pagePlStdRecord.getRecords();
 		for (Map<String, Object> record : result) {
-			if(StringHelper.isNotEmpty(record.get("join_major_code")) && StringHelper.isNotEmpty(record.get("major_name"))) {
+			if(StringHelper.isNotEmpty(record.get("join_major_code")) && (StringHelper.isEmpty(record.get("major_name"))||"()".equals(record.get("major_name")))) {
 				PlMajor major = this.majorDao.find("major_code", record.get("join_major_code"));
 				if(StringHelper.isNotEmpty(major)) {
 					record.put("major_name", "("+major.getMajor_code()+")"+major.getMajor_name());
@@ -110,7 +110,7 @@ public class PlStdRecordServiceImpl extends BaseServiceImpl<PlStdRecord> impleme
 		FrameOptr optr = RequestContextUtil.currentLoginUser();
 		FrameAssertUtil.isNotNull(optr, "请重新登录");
 		Pager pagePlStdRecord = this.plStdRecordDao.page(query, start, limit, queryOrder, year_code, status, mk_id,
-				optr.getOptr_dept(), ApplyForm.NET_ASSIST.ordinal(), join_school_id,remark,null);
+				optr.getOptr_dept(), ApplyForm.NET_ASSIST.ordinal(), join_school_id,remark,null, null);
 		this.dealJoinMajor(pagePlStdRecord);
 		return pagePlStdRecord;
 	}
@@ -281,8 +281,10 @@ public class PlStdRecordServiceImpl extends BaseServiceImpl<PlStdRecord> impleme
 		}
 		//考生信息
 		plStdRecord.setStd_reg_id(std_reg_id);
-		Integer majorId = record.getMajor_id();
-		plStdRecord.setJoin_major_code(this.majorDao.find(majorId).getMajor_code());
+		if(StringUtils.isEmpty(plStdRecord.getJoin_major_code())){
+			Integer majorId = record.getMajor_id();
+			plStdRecord.setJoin_major_code(this.majorDao.find(majorId).getMajor_code());
+		}
 		
 		// 专本衔接时,添加考生学籍信息
 		if(plStdRecord.getStd_type().intValue() == 1){

+ 212 - 0
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlTextbookPreServiceImpl.java

@@ -0,0 +1,212 @@
+package cn.hmsoft.ses.service.impl.pl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.ses.common.constants.SysConst;
+import cn.hmsoft.ses.data.dao.pl.PlTextbookPreDao;
+import cn.hmsoft.ses.data.model.pl.PlTextbookPre;
+import cn.hmsoft.ses.service.iface.pl.IPlTextbookPreService;
+import cn.hmsoft.ses.util.dbf.DBFField;
+import cn.hmsoft.ses.util.dbf.DBFWriter;
+import cn.hmsoft.web.service.impl.BaseServiceImpl;
+
+/**
+ * 教材表 旧表-jc_jiaocai 服务实现.
+ * 
+ * @author: haoguanghui
+ * @date: 2018-10-17 14:49:52
+ * @version: 1.0
+ * @email: hgh@qmth.com.cn
+ * @Company: www.hmsoft.cn
+ */
+@Service
+public class PlTextbookPreServiceImpl extends BaseServiceImpl<PlTextbookPre> implements IPlTextbookPreService {
+
+	@Autowired
+	private PlTextbookPreDao plTextbookDao;
+
+	@Override
+	public PlatformDaoSupport<PlTextbookPre> getDao() {
+		return this.plTextbookDao;
+	}
+
+	/**
+	 * 分页查询.
+	 * 
+	 * @param query
+	 * @param start
+	 * @param limit
+	 * @param order
+	 * @param type
+	 * @return
+	 */
+	public Pager pagePlTextbook(String query, Integer start, Integer limit, String order, String type, Integer status,
+			Integer exam_time_id) {
+		Pager pagePlTextbook = this.plTextbookDao.pagePlTextbook(query, start, limit, order, type, status,
+				exam_time_id);
+		return pagePlTextbook;
+	}
+
+	/**
+	 * @param textbookName
+	 *            教材名称
+	 * @param writer
+	 *            编著
+	 * @param publishier
+	 *            出版社
+	 */
+	@Override
+	public List<PlTextbookPre> listTextbook(String textbookName, String writer, String publisher) {
+		Map<String, Object> params = new HashMap<>();
+		params.put("textbook_name", textbookName);
+		params.put("textbook_writer", writer);
+		params.put("textbook_publisher", publisher);
+		return this.plTextbookDao.listByMap(params);
+	}
+
+	/**
+	 * 教材去重
+	 * 
+	 * @param list
+	 * @return
+	 */
+	private List<PlTextbookPre> distinctTextBook(List<PlTextbookPre> list, Integer exam_year) {
+		List<PlTextbookPre> temp = new ArrayList<PlTextbookPre>();
+		if (null != list && !list.isEmpty()) {
+			Map<Integer, Integer> courseMap = new HashMap<Integer, Integer>();
+			Map<String, String> bookMap = new HashMap<String, String>();
+			for (PlTextbookPre book : list) {
+
+				// 课程不重复时,将教材设置到结果集合;
+				if (!courseMap.containsKey(book.getCourse_id())) {
+					temp.add(book);
+				} else {
+					// 年度码如202010
+					String year_code = book.getYear_code();
+					// 年份如2020
+					Integer year = null;
+
+					if (null != year_code && year_code.length() >= 4) {
+						year = Integer.valueOf(year_code.substring(0, 4));
+
+						// 课程教材重复,如果当前年度同一课程有两个教材,且教材编码不一样,则全部设置这两个教材
+						if (year.intValue() == exam_year.intValue() && !bookMap.containsKey(book.getTextbook_code())) {
+							temp.add(book);
+						}
+					}
+
+				}
+
+				courseMap.put(book.getCourse_id(), book.getCourse_id());
+				bookMap.put(book.getTextbook_code(), book.getTextbook_code());
+			}
+		}
+
+		return temp;
+
+	}
+
+	/**
+	 * 命题导出dbf
+	 */
+	@Override
+	public File exportDbf(Integer exam_year) {
+		List<PlTextbookPre> list = this.plTextbookDao.queryPlTextBookByExamYear(exam_year);
+
+		// 教材去重(如果查询年份exam_year有两批次的教材,则都导出)
+		list = this.distinctTextBook(list, exam_year);
+
+		File serverFile = new File(
+				SysConst.getAppConfig().getDownloadTemp() + System.currentTimeMillis() + "detail.dbf");
+		OutputStream fos = null;
+		try {
+			DBFField[] fields = new DBFField[7];
+
+			// 教材代号
+			fields[0] = new DBFField();
+			fields[0].setName("jiaocaidai");
+			fields[0].setDataType(DBFField.FIELD_TYPE_C);
+			fields[0].setFieldLength(10);
+			fields[0].setDecimalCount(0);
+
+			// 教材名称
+			fields[1] = new DBFField();
+			fields[1].setName("mingcheng");
+			fields[1].setDataType(DBFField.FIELD_TYPE_C);
+			fields[1].setFieldLength(100);
+			fields[1].setDecimalCount(0);
+
+			// 教材国标
+			fields[2] = new DBFField();
+			fields[2].setName("guobiao");
+			fields[2].setDataType(DBFField.FIELD_TYPE_C);
+			fields[2].setFieldLength(10);
+			fields[2].setDecimalCount(0);
+
+			// 教材主编
+			fields[3] = new DBFField();
+			fields[3].setName("zhubian");
+			fields[3].setDataType(DBFField.FIELD_TYPE_C);
+			fields[3].setFieldLength(50);
+			fields[3].setDecimalCount(0);
+
+			// 出版社
+			fields[4] = new DBFField();
+			fields[4].setName("chubanshe");
+			fields[4].setDataType(DBFField.FIELD_TYPE_C);
+			fields[4].setFieldLength(80);
+			fields[4].setDecimalCount(0);
+
+			// 出版时间
+			fields[5] = new DBFField();
+			fields[5].setName("chubanshij");
+			fields[5].setDataType(DBFField.FIELD_TYPE_C);
+			fields[5].setFieldLength(10);
+			fields[5].setDecimalCount(0);
+
+			// 费用
+			fields[6] = new DBFField();
+			fields[6].setName("feiyong");
+			fields[6].setDataType(DBFField.FIELD_TYPE_C);
+			fields[6].setFieldLength(20);
+			fields[6].setDecimalCount(0);
+
+			DBFWriter writer = new DBFWriter();
+			writer.setFields(fields);
+			for (PlTextbookPre book : list) {
+				Object[] rowData = new Object[7];
+				rowData[0] = book.getTextbook_code();
+				rowData[1] = book.getTextbook_name();
+				rowData[2] = book.getTextbook_standard_code();
+				rowData[3] = book.getTextbook_writer();
+				rowData[4] = book.getTextbook_publisher();
+				rowData[5] = book.getPublish_time();
+				rowData[6] = book.getPrice();
+				writer.addRecord(rowData);
+			}
+			// 定义输出流,并关联的一个文件
+			fos = new FileOutputStream(serverFile);
+			// 写入数据
+			writer.write(fos);
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			try {
+				fos.close();
+			} catch (Exception e) {
+			}
+		}
+		return serverFile;
+	}
+}

+ 32 - 4
ses-manage/src/main/java/cn/hmsoft/ses/service/impl/pl/PlTextbookServiceImpl.java

@@ -51,8 +51,8 @@ public class PlTextbookServiceImpl extends BaseServiceImpl<PlTextbook> implement
 	 * @param type
 	 * @return
 	 */
-	public Pager pagePlTextbook(String query, Integer start, Integer limit, String order, String type, Integer status,Integer exam_time_id) {
-		Pager pagePlTextbook = this.plTextbookDao.pagePlTextbook(query, start, limit, order, type, status, exam_time_id);
+	public Pager pagePlTextbook(String query, Integer start, Integer limit, QueryOrder queryOrder, Integer status,Integer exam_time_id,Integer is_unified) {
+		Pager pagePlTextbook = this.plTextbookDao.pagePlTextbook(query, start, limit, queryOrder, status, exam_time_id, is_unified);
 		return pagePlTextbook;
 	}
 
@@ -182,10 +182,16 @@ public class PlTextbookServiceImpl extends BaseServiceImpl<PlTextbook> implement
 				Object[] rowData = new Object[7];
 				rowData[0] = book.getTextbook_code();
 				rowData[1] = book.getTextbook_name();
-				rowData[2] = book.getTextbook_standard_code();
+				rowData[2] = book.getTextbook_code().substring(0, 5);
 				rowData[3] = book.getTextbook_writer();
+				
 				rowData[4] = book.getTextbook_publisher();
-				rowData[5] = book.getPublish_time();
+				if(null != book.getTextbook_revision()){
+					rowData[5] = book.getTextbook_revision().substring(0, 4)+"年";
+				}else{
+					rowData[5] = book.getTextbook_revision();
+				}
+				
 				rowData[6] = book.getPrice();
 				writer.addRecord(rowData);
 			}
@@ -202,5 +208,27 @@ public class PlTextbookServiceImpl extends BaseServiceImpl<PlTextbook> implement
 			}
 		}
 		return serverFile;
+	}
+	
+
+	@Override
+	public PlTextbook queryPlTextBookByCourseAndExamYear(Integer course_id, Integer exam_time_id) {
+		
+		return this.plTextbookDao.queryPlTextBookByCourseAndExamYear(course_id, exam_time_id);
+	}
+
+	@Override
+	public Pager pagePlTextbookForUnified(Integer start, Integer limit, QueryOrder queryOrder,
+			Integer exam_time_id) {
+		return this.plTextbookDao.pagePlTextbookForUnified(start, limit, queryOrder, exam_time_id);
 	}	
+
+	@Override
+	public void addPlTextbook(List<PlTextbook> list){
+		for(PlTextbook textbook:list){
+			this.plTextbookDao.insert(textbook);
+		}
+		
+	}
+
 }

部分文件因为文件数量过多而无法显示