浏览代码

增加课程专业关联查询

ting.yin 7 年之前
父节点
当前提交
52a3492573

+ 2 - 1
core-api/src/main/java/cn/com/qmth/examcloud/service/core/api/CourseApi.java

@@ -57,6 +57,7 @@ public class CourseApi {
     @ApiOperation(value="查询课程分页带查询",notes="分页带查询")
     @GetMapping("/all/{curPage}/{pageSize}")
     public ResponseEntity getAllOrg(@ModelAttribute Course course,
+    								@RequestParam(required = false ) Long specialtyId,
                                     @PathVariable Integer curPage,
                                     @PathVariable Integer pageSize,
                                     HttpServletRequest request){
@@ -66,7 +67,7 @@ public class CourseApi {
         }else{
             return new ResponseEntity(HttpStatus.NOT_FOUND);
         }
-    	return new ResponseEntity(courseService.findAll(course,new PageRequest(curPage - 1,pageSize)), HttpStatus.OK);
+    	return new ResponseEntity(courseService.findAll(course,specialtyId,new PageRequest(curPage - 1,pageSize)), HttpStatus.OK);
     }
     
     @ApiOperation(value="查询课程不分页带查询",notes = "不分页带查询")

+ 5 - 3
core-api/src/main/java/cn/com/qmth/examcloud/service/core/api/SpecialtyApi.java

@@ -9,10 +9,10 @@ import java.util.function.Consumer;
 
 
 
+
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-
 import cn.com.qmth.examcloud.common.util.excel.ExcelError;
 import cn.com.qmth.examcloud.service.core.dto.CourseDTO;
 import io.swagger.annotations.ApiOperation;
@@ -20,13 +20,13 @@ import io.swagger.annotations.ApiOperation;
 
 
 
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
-
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 import cn.com.qmth.examcloud.common.util.ErrorMsg;
 import cn.com.qmth.examcloud.service.core.dto.SpecialtyDTO;
@@ -34,6 +34,7 @@ import cn.com.qmth.examcloud.service.core.entity.Specialty;
 import cn.com.qmth.examcloud.service.core.repo.SpecialtyRepo;
 import cn.com.qmth.examcloud.service.core.service.SpecialtyService;
 import cn.com.qmth.examcloud.service.core.util.ExportUtils;
+
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
 /**
@@ -62,6 +63,7 @@ public class SpecialtyApi {
 	@ApiOperation(value="查询专业带分页", notes="查询专业带分页")
 	@GetMapping("/all/{curPage}/{pageSize}")
 	public ResponseEntity getAllOrg(@ModelAttribute Specialty specialty,
+									@RequestParam(required = false ) Long courseId,
 									@PathVariable Integer curPage,
 									@PathVariable Integer pageSize,
 									HttpServletRequest request){
@@ -71,7 +73,7 @@ public class SpecialtyApi {
 		}else {
 			return new ResponseEntity(HttpStatus.NOT_FOUND);
 		}
-		return new ResponseEntity(specialtyService.findAll(specialty, new PageRequest(curPage-1, pageSize)),HttpStatus.OK);
+		return new ResponseEntity(specialtyService.findAll(specialty,courseId, new PageRequest(curPage-1, pageSize)),HttpStatus.OK);
 	}
 
 	/**

+ 19 - 8
core-api/src/main/java/cn/com/qmth/examcloud/service/core/service/CourseService.java

@@ -8,24 +8,26 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.persistence.criteria.Subquery;
 import javax.transaction.Transactional;
 
-import cn.com.qmth.examcloud.common.dto.core.enums.CourseLevel;
-import cn.com.qmth.examcloud.service.core.service.sync.DataSendService;
-import com.qmth.commons.dataSync.core.service.DataSyncService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
+import cn.com.qmth.examcloud.common.dto.core.enums.CourseLevel;
 import cn.com.qmth.examcloud.common.util.excel.ExcelError;
 import cn.com.qmth.examcloud.common.util.excel.ExcelReader;
 import cn.com.qmth.examcloud.common.util.excel.ExcelReaderHandle;
 import cn.com.qmth.examcloud.service.core.dto.CourseDTO;
 import cn.com.qmth.examcloud.service.core.entity.Course;
+import cn.com.qmth.examcloud.service.core.entity.CourseSpeciatly;
 import cn.com.qmth.examcloud.service.core.repo.CourseRepo;
-import org.springframework.util.StringUtils;
+import cn.com.qmth.examcloud.service.core.service.sync.DataSendService;
 
 @Service
 public class CourseService {
@@ -88,19 +90,19 @@ public class CourseService {
 		return null;
 	}
 	
-	public Page<Course> findAll(Course courseCriteria, Pageable pageable) {
+	public Page<Course> findAll(Course courseCriteria,Long specialtyId, Pageable pageable) {
 //		ExampleMatcher exampleMatcher = ExampleMatcher.matching()
 //				.withMatcher("name", startsWith())
 //				.withMatcher("code", startsWith()).withIgnoreNullValues();
 //		Example<Course> examExamStudentple = Example.of(orgCriteria,
 //				exampleMatcher);
 //		return courseRepo.findAll(examExamStudentple, pageable);
-		Specification<Course> specification = getSpecification(courseCriteria);
+		Specification<Course> specification = getSpecification(courseCriteria,specialtyId);
 		Page<Course> examStudents = courseRepo.findAll(specification,pageable);
 		return examStudents;
 	}
 
-	private Specification<Course> getSpecification(Course courseCriteria) {
+	private Specification<Course> getSpecification(Course courseCriteria,Long specialtyId) {
 		Specification<Course> specification = (root, query, cb) -> {
 		    List<Predicate> predicates = new ArrayList<>();
 		    if(!StringUtils.isEmpty(courseCriteria.getOrgId())){
@@ -118,6 +120,15 @@ public class CourseService {
 		    if(!StringUtils.isEmpty(courseCriteria.getEnable())){
 		    	predicates.add(cb.equal(root.get("enable"),courseCriteria.getEnable()));
 		    }
+		    if(specialtyId!=null){
+		    	Subquery<CourseSpeciatly> relationshipSubquery = query.subquery(CourseSpeciatly.class);
+		    	Root<CourseSpeciatly> residencyRelationshipSubqueryRoot = relationshipSubquery.from(CourseSpeciatly.class);
+		    	relationshipSubquery.select(residencyRelationshipSubqueryRoot);
+		    	Predicate predicate = cb.equal(residencyRelationshipSubqueryRoot.get("specialtyId"), specialtyId);
+		    	Predicate predicate2 = cb.equal(residencyRelationshipSubqueryRoot.get("courseId"), root.get("id"));
+		    	relationshipSubquery.where(cb.and(predicate,predicate2));
+		    	predicates.add(cb.exists(relationshipSubquery));
+		    }
 		    return cb.and(predicates.toArray(new Predicate[predicates.size()]));
 		};
 		return specification;
@@ -130,7 +141,7 @@ public class CourseService {
 //        Example<Course> examExample = Example.of(orgCriteria,exampleMatcher);
 //		List<Course> courseList = courseRepo.findAll(examExample);
 //        return courseList;
-		Specification<Course> specification = getSpecification(courseCriteria);
+		Specification<Course> specification = getSpecification(courseCriteria,null);
         return courseRepo.findAll(specification);
 	}
 

+ 22 - 13
core-api/src/main/java/cn/com/qmth/examcloud/service/core/service/SpecialtyService.java

@@ -8,14 +8,10 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.persistence.criteria.Subquery;
 import javax.transaction.Transactional;
 
-import cn.com.qmth.examcloud.common.dto.core.enums.CourseLevel;
-import cn.com.qmth.examcloud.common.util.excel.ExcelError;
-import cn.com.qmth.examcloud.common.util.excel.ExcelReader;
-import cn.com.qmth.examcloud.common.util.excel.ExcelReaderHandle;
-import cn.com.qmth.examcloud.service.core.dto.SpecialtyDTO;
-import cn.com.qmth.examcloud.service.core.entity.Specialty;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -23,8 +19,11 @@ import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
-import com.rabbitmq.client.AMQP.Basic.Return;
-
+import cn.com.qmth.examcloud.common.util.excel.ExcelError;
+import cn.com.qmth.examcloud.common.util.excel.ExcelReader;
+import cn.com.qmth.examcloud.common.util.excel.ExcelReaderHandle;
+import cn.com.qmth.examcloud.service.core.dto.SpecialtyDTO;
+import cn.com.qmth.examcloud.service.core.entity.CourseSpeciatly;
 import cn.com.qmth.examcloud.service.core.entity.Specialty;
 import cn.com.qmth.examcloud.service.core.repo.SpecialtyRepo;
 
@@ -54,7 +53,7 @@ public class SpecialtyService {
 				return error;
 			}
 		});
-		List<Specialty> specialtyList = specialtyRepo.save(list);
+		specialtyRepo.save(list);
 		return excelErrors;
 	}
 
@@ -78,13 +77,13 @@ public class SpecialtyService {
 	 * @param pageable
 	 * @return
 	 */
-	public Page<Specialty> findAll(Specialty specialty,Pageable pageable){
-		Specification<Specialty> specification = getSpecification(specialty);
+	public Page<Specialty> findAll(Specialty specialty,Long courseId,Pageable pageable){
+		Specification<Specialty> specification = getSpecification(specialty,courseId);
 		Page<Specialty> specialties = specialtyRepo.findAll(specification, pageable);
 		return specialties;
 	}
 	
-	public Specification<Specialty> getSpecification(Specialty specialty){
+	public Specification<Specialty> getSpecification(Specialty specialty,Long courseId){
 		Specification<Specialty> specification = (root, query, cb) -> {
 			List<Predicate> predicates = new ArrayList<>();
 			if(!StringUtils.isEmpty(specialty.getOrgId())){
@@ -98,6 +97,15 @@ public class SpecialtyService {
 		    }
 		    if(!StringUtils.isEmpty(specialty.getEnable())){
 		    	predicates.add(cb.equal(root.get("enable"),specialty.getEnable()));
+		    }
+		    if(courseId!=null){
+		    	Subquery<CourseSpeciatly> relationshipSubquery = query.subquery(CourseSpeciatly.class);
+		    	Root<CourseSpeciatly> residencyRelationshipSubqueryRoot = relationshipSubquery.from(CourseSpeciatly.class);
+		    	relationshipSubquery.select(residencyRelationshipSubqueryRoot);
+		    	Predicate predicate = cb.equal(residencyRelationshipSubqueryRoot.get("courseId"), courseId);
+		    	Predicate predicate2 = cb.equal(residencyRelationshipSubqueryRoot.get("specialtyId"), root.get("id"));
+		    	relationshipSubquery.where(cb.and(predicate,predicate2));
+		    	predicates.add(cb.exists(relationshipSubquery));
 		    }
 			return cb.and(predicates.toArray(new Predicate[predicates.size()]));
 		};
@@ -110,7 +118,7 @@ public class SpecialtyService {
 	 * @return
 	 */
 	public List<Specialty> findAll(Specialty specialty){
-		Specification<Specialty> specification = getSpecification(specialty);
+		Specification<Specialty> specification = getSpecification(specialty,null);
 		return specialtyRepo.findAll(specification);
 	}
 	
@@ -122,6 +130,7 @@ public class SpecialtyService {
 	public void save(Specialty specialty){
 		checkCode(specialty.getOrgId(), specialty.getCode());
 		specialty.setCreateTime(new Date());
+		specialty.setEnable(true);
 		specialtyRepo.save(specialty);
 	}