Browse Source

。。。

wangwei 6 năm trước cách đây
mục cha
commit
ec0df8c40a

+ 55 - 49
examcloud-core-basic-api-provider/src/main/java/cn/com/qmth/examcloud/core/basic/api/controller/CourseController.java

@@ -38,16 +38,13 @@ import cn.com.qmth.examcloud.commons.base.util.excel.ExcelError;
 import cn.com.qmth.examcloud.commons.web.security.bean.User;
 import cn.com.qmth.examcloud.commons.web.support.ControllerSupport;
 import cn.com.qmth.examcloud.core.basic.api.CourseCloudService;
-import cn.com.qmth.examcloud.core.basic.api.bean.CourseBean;
-import cn.com.qmth.examcloud.core.basic.api.request.SaveCourseReq;
-import cn.com.qmth.examcloud.core.basic.api.response.SaveCourseResp;
+import cn.com.qmth.examcloud.core.basic.api.controller.bean.CourseDomain;
 import cn.com.qmth.examcloud.core.basic.dao.CourseRepo;
 import cn.com.qmth.examcloud.core.basic.dao.entity.CourseEntity;
 import cn.com.qmth.examcloud.core.basic.dao.entity.CourseSpeciatlyRelationEntity;
-import cn.com.qmth.examcloud.core.basic.service.bean.CourseAssembler;
-import cn.com.qmth.examcloud.core.basic.service.bean.CourseDto;
-import cn.com.qmth.examcloud.core.basic.service.impl.CourseServiceImpl;
-import cn.com.qmth.examcloud.core.basic.service.impl.ExportService;
+import cn.com.qmth.examcloud.core.basic.dao.enums.CourseLevel;
+import cn.com.qmth.examcloud.core.basic.service.CourseService;
+import cn.com.qmth.examcloud.core.basic.service.bean.CourseInfo;
 import io.swagger.annotations.ApiOperation;
 
 /**
@@ -62,10 +59,7 @@ public class CourseController extends ControllerSupport {
 	CourseRepo courseRepo;
 
 	@Autowired
-	CourseServiceImpl courseService;
-
-	@Autowired
-	CourseAssembler courseAssembler;
+	CourseService courseService;
 
 	@Autowired
 	CourseCloudService courseCloudService;
@@ -85,8 +79,8 @@ public class CourseController extends ControllerSupport {
 	 */
 	@ApiOperation(value = "分页查询课程")
 	@GetMapping("coursePage/{curPage}/{pageSize}")
-	public Page<CourseEntity> getCoursePage(@PathVariable Integer curPage, @PathVariable Integer pageSize,
-			@RequestParam(required = false) String name,
+	public Page<CourseEntity> getCoursePage(@PathVariable Integer curPage,
+			@PathVariable Integer pageSize, @RequestParam(required = false) String name,
 			@RequestParam(required = false) String code,
 			@RequestParam(required = false) String level,
 			@RequestParam(required = false) Boolean enable,
@@ -106,15 +100,17 @@ public class CourseController extends ControllerSupport {
 				predicates.add(cb.like(root.get("code"), toSqlSearchPattern(code)));
 			}
 			if (StringUtils.isNotBlank(level)) {
-				predicates.add(cb.equal(root.get("level"), toSqlSearchPattern(level)));
+				predicates.add(cb.equal(root.get("level"), CourseLevel.valueOf(level)));
 			}
 			if (null != enable) {
 				predicates.add(cb.equal(root.get("enable"), enable));
 			}
 
 			if (null != specialtyId) {
-				Subquery<CourseSpeciatlyRelationEntity> subquery = query.subquery(CourseSpeciatlyRelationEntity.class);
-				Root<CourseSpeciatlyRelationEntity> subRoot = subquery.from(CourseSpeciatlyRelationEntity.class);
+				Subquery<CourseSpeciatlyRelationEntity> subquery = query
+						.subquery(CourseSpeciatlyRelationEntity.class);
+				Root<CourseSpeciatlyRelationEntity> subRoot = subquery
+						.from(CourseSpeciatlyRelationEntity.class);
 				subquery.select(subRoot);
 				Predicate p1 = cb.equal(subRoot.get("specialtyId"), specialtyId);
 				Predicate p2 = cb.equal(subRoot.get("courseId"), root.get("id"));
@@ -179,8 +175,10 @@ public class CourseController extends ControllerSupport {
 			}
 
 			if (null != specialtyId) {
-				Subquery<CourseSpeciatlyRelationEntity> subquery = query.subquery(CourseSpeciatlyRelationEntity.class);
-				Root<CourseSpeciatlyRelationEntity> subRoot = subquery.from(CourseSpeciatlyRelationEntity.class);
+				Subquery<CourseSpeciatlyRelationEntity> subquery = query
+						.subquery(CourseSpeciatlyRelationEntity.class);
+				Root<CourseSpeciatlyRelationEntity> subRoot = subquery
+						.from(CourseSpeciatlyRelationEntity.class);
 				subquery.select(subRoot);
 				Predicate p1 = cb.equal(subRoot.get("specialtyId"), specialtyId);
 				Predicate p2 = cb.equal(subRoot.get("courseId"), root.get("id"));
@@ -240,51 +238,63 @@ public class CourseController extends ControllerSupport {
 	 * 修正
 	 *
 	 * @author WANGWEI
-	 * @param course
+	 * @param domain
 	 * @return
 	 */
 	@ApiOperation(value = "新增课程", notes = "新增")
 	@PostMapping
-	public Long addCourse(@RequestBody CourseEntity course) {
-		trim(course);
+	public Long addCourse(@RequestBody CourseDomain domain) {
+		trim(domain, true);
+
 		User accessUser = getAccessUser();
+		Long rootOrgId = accessUser.getRootOrgId();
+
+		String code = domain.getCode();
+		if (StringUtils.isBlank(code)) {
+			throw new StatusException("B-620001", "code is blank");
+		}
+		CourseEntity course = courseRepo.findByRootOrgIdAndCode(rootOrgId, code);
+		if (null != course) {
+			throw new StatusException("B-620002", "课程编码已被占用");
+		}
 
-		SaveCourseReq saveCourseReq = new SaveCourseReq();
-		saveCourseReq.setCourseCode(course.getCode());
-		saveCourseReq.setCourseName(course.getName());
-		saveCourseReq.setCourseLevel(course.getLevel().getName());
-		saveCourseReq.setRootOrgId(accessUser.getRootOrgId());
+		CourseInfo info = new CourseInfo();
+		info.setRootOrgId(rootOrgId);
+		info.setCode(domain.getCode());
+		info.setEnable(domain.getEnable());
+		info.setId(domain.getId());
+		info.setLevel(domain.getLevel());
+		info.setName(domain.getName());
 
-		SaveCourseResp saveCourseResp = courseCloudService.saveCourse(saveCourseReq);
-		CourseBean courseBean = saveCourseResp.getCourseBean();
-		return courseBean.getId();
+		CourseEntity saved = courseService.saveCourse(info);
+		return saved.getId();
 	}
 
 	/**
 	 * 修正
 	 *
 	 * @author WANGWEI
-	 * @param course
-	 * @param request
+	 * @param domain
 	 * @return
 	 */
 	@ApiOperation(value = "更新课程", notes = "更新")
 	@PutMapping
-	public Long updateCourse(@RequestBody CourseEntity course, HttpServletRequest request) {
+	public Long updateCourse(@RequestBody CourseDomain domain) {
+		trim(domain, true);
+
 		User accessUser = getAccessUser();
+		Long rootOrgId = accessUser.getRootOrgId();
 
-		SaveCourseReq saveCourseReq = new SaveCourseReq();
-		saveCourseReq.setCourseCode(course.getCode());
-		saveCourseReq.setCourseName(course.getName());
-		saveCourseReq.setCourseLevel(course.getLevel().getName());
-		saveCourseReq.setRootOrgId(accessUser.getRootOrgId());
-		if (null != course.getEnable()) {
-			saveCourseReq.setEnable(course.getEnable());
-		}
+		CourseInfo info = new CourseInfo();
+		info.setRootOrgId(rootOrgId);
+		info.setCode(domain.getCode());
+		info.setEnable(domain.getEnable());
+		info.setId(domain.getId());
+		info.setLevel(domain.getLevel());
+		info.setName(domain.getName());
 
-		SaveCourseResp saveCourseResp = courseCloudService.saveCourse(saveCourseReq);
-		CourseBean courseBean = saveCourseResp.getCourseBean();
-		return courseBean.getId();
+		CourseEntity saved = courseService.saveCourse(info);
+		return saved.getId();
 	}
 
 	@ApiOperation(value = "删除课程", notes = "删除")
@@ -317,12 +327,8 @@ public class CourseController extends ControllerSupport {
 
 	@ApiOperation(value = "导出课程", notes = "导出")
 	@GetMapping("export")
-	public void exportCourse(@ModelAttribute CourseEntity orgCriteria, HttpServletResponse response) {
-		List<CourseDto> list = new ArrayList<CourseDto>();
-		courseService.findAll(orgCriteria).forEach(c -> {
-			list.add(courseAssembler.toDTO(c));
-		});
-		ExportService.exportEXCEL("课程列表", CourseDto.class, list, response);
+	public void exportCourse(@ModelAttribute CourseEntity orgCriteria,
+			HttpServletResponse response) {
 	}
 
 	/**

+ 24 - 22
examcloud-core-basic-api-provider/src/main/java/cn/com/qmth/examcloud/core/basic/api/controller/CourseSpeciatlyController.java → examcloud-core-basic-api-provider/src/main/java/cn/com/qmth/examcloud/core/basic/api/controller/CourseSpeciatlyRelationController.java

@@ -1,8 +1,6 @@
 package cn.com.qmth.examcloud.core.basic.api.controller;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -20,8 +18,6 @@ import org.springframework.web.bind.annotation.RestController;
 import cn.com.qmth.examcloud.commons.web.support.ControllerSupport;
 import cn.com.qmth.examcloud.core.basic.dao.CourseRepo;
 import cn.com.qmth.examcloud.core.basic.dao.SpecialtyRepo;
-import cn.com.qmth.examcloud.core.basic.dao.entity.CourseEntity;
-import cn.com.qmth.examcloud.core.basic.dao.entity.SpecialtyEntity;
 import cn.com.qmth.examcloud.core.basic.service.impl.CourseSpeciatlyRelationServiceImpl;
 import io.swagger.annotations.ApiOperation;
 
@@ -32,8 +28,8 @@ import io.swagger.annotations.ApiOperation;
  */
 @Transactional
 @RestController
-@RequestMapping("${$rmp.ctr.basic}/CourseSpeciatly")
-public class CourseSpeciatlyController extends ControllerSupport {
+@RequestMapping("${$rmp.ctr.basic}/CourseSpeciatlyRelation")
+public class CourseSpeciatlyRelationController extends ControllerSupport {
 
 	@Autowired
 	CourseSpeciatlyRelationServiceImpl courseSpeciatlyService;
@@ -54,15 +50,18 @@ public class CourseSpeciatlyController extends ControllerSupport {
 	@GetMapping("/allCourses/{speciatlyId}")
 	public ResponseEntity getAllCoursesBySpeciatly(@PathVariable String speciatlyId,
 			HttpServletRequest request) {
-//		cn.com.qmth.examcloud.commons.web.security.bean.User accessUser = getAccessUser();
-//		List<Course> courses = courseSpeciatlyService.getAllCoursesBySpeciatlyId(speciatlyId);
-//		// List<Course> list =
-//		// courseSpeciatlyService.getCoursesNotInSpeciatly(courses);
-//		List<Course> list = courseRepo.findByOrgId(accessUser.getRootOrgId());
-//		Map map = new HashMap();
-//		map.put("courseList", courses);
-//		map.put("courseAllList", list);
-//		return new ResponseEntity(map, HttpStatus.OK);
+		// cn.com.qmth.examcloud.commons.web.security.bean.User accessUser =
+		// getAccessUser();
+		// List<Course> courses =
+		// courseSpeciatlyService.getAllCoursesBySpeciatlyId(speciatlyId);
+		// // List<Course> list =
+		// // courseSpeciatlyService.getCoursesNotInSpeciatly(courses);
+		// List<Course> list =
+		// courseRepo.findByOrgId(accessUser.getRootOrgId());
+		// Map map = new HashMap();
+		// map.put("courseList", courses);
+		// map.put("courseAllList", list);
+		// return new ResponseEntity(map, HttpStatus.OK);
 		return null;
 	}
 
@@ -78,13 +77,16 @@ public class CourseSpeciatlyController extends ControllerSupport {
 	@ApiOperation(value = "根据课程ID取专业", notes = "根据课程ID取专业")
 	@GetMapping("/allSpecialty/{courseId}")
 	public ResponseEntity getAllSpeciatly(@PathVariable Long courseId, HttpServletRequest request) {
-//		cn.com.qmth.examcloud.commons.web.security.bean.User accessUser = getAccessUser();
-//		List<Specialty> specialtys = courseSpeciatlyService.getAllSpecialtyByCourseId(courseId);
-//		List<Specialty> list = specialtyRepo.findByOrgId(accessUser.getRootOrgId());
-//		Map map = new HashMap();
-//		map.put("specialtyList", specialtys);
-//		map.put("specialtyAllList", list);
-//		return new ResponseEntity(map, HttpStatus.OK);
+		// cn.com.qmth.examcloud.commons.web.security.bean.User accessUser =
+		// getAccessUser();
+		// List<Specialty> specialtys =
+		// courseSpeciatlyService.getAllSpecialtyByCourseId(courseId);
+		// List<Specialty> list =
+		// specialtyRepo.findByOrgId(accessUser.getRootOrgId());
+		// Map map = new HashMap();
+		// map.put("specialtyList", specialtys);
+		// map.put("specialtyAllList", list);
+		// return new ResponseEntity(map, HttpStatus.OK);
 		return null;
 	}
 

+ 2 - 2
examcloud-core-basic-api-provider/src/main/java/cn/com/qmth/examcloud/core/basic/api/controller/OrgController.java

@@ -544,8 +544,8 @@ public class OrgController extends ControllerSupport {
 	@ApiOperation(value = "下载导入模板", notes = "下载导入模板")
 	@GetMapping("/download")
 	public void importFileTemplate(HttpServletResponse response) {
-		List<OrgDto> list = new ArrayList<OrgDto>();
-		ExportService.exportEXCEL("学习中心导入模板", OrgDto.class, list, response);
+		// List<OrgDto> list = new ArrayList<OrgDto>();
+		// ExportService.exportEXCEL("学习中心导入模板", OrgDto.class, list, response);
 	}
 
 	/**

+ 82 - 18
examcloud-core-basic-api-provider/src/main/java/cn/com/qmth/examcloud/core/basic/api/controller/SpecialtyController.java

@@ -6,11 +6,19 @@ import java.util.List;
 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.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -24,11 +32,11 @@ import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
 import cn.com.qmth.examcloud.commons.base.exception.StatusException;
 import cn.com.qmth.examcloud.commons.base.util.excel.ExcelError;
+import cn.com.qmth.examcloud.commons.web.security.bean.User;
 import cn.com.qmth.examcloud.commons.web.support.ControllerSupport;
 import cn.com.qmth.examcloud.core.basic.dao.SpecialtyRepo;
+import cn.com.qmth.examcloud.core.basic.dao.entity.CourseSpeciatlyRelationEntity;
 import cn.com.qmth.examcloud.core.basic.dao.entity.SpecialtyEntity;
-import cn.com.qmth.examcloud.core.basic.service.bean.SpecialtyDto;
-import cn.com.qmth.examcloud.core.basic.service.impl.ExportService;
 import cn.com.qmth.examcloud.core.basic.service.impl.SpecialtyServiceImpl;
 import io.swagger.annotations.ApiOperation;
 
@@ -48,22 +56,77 @@ public class SpecialtyController extends ControllerSupport {
 	@Autowired
 	SpecialtyRepo specialtyRepo;
 
+	/**
+	 * 方法注释
+	 *
+	 * @author WANGWEI
+	 * @param curPage
+	 * @param pageSize
+	 * @param name
+	 * @param code
+	 * @param enable
+	 * @param courseId
+	 * @return
+	 */
 	@ApiOperation(value = "分页查询专业")
 	@GetMapping("specialtyPage/{curPage}/{pageSize}")
-	public ResponseEntity getSpecialtyPage(@ModelAttribute SpecialtyEntity specialty,
-			@RequestParam(required = false) Long courseId, @PathVariable Integer curPage,
-			@PathVariable Integer pageSize, HttpServletRequest request) {
-		// cn.com.qmth.examcloud.commons.web.security.bean.User accessUser =
-		// getAccessUser();
-		// if (accessUser != null) {
-		// specialty.setOrgId(accessUser.getRootOrgId());
-		// } else {
-		// return new ResponseEntity(HttpStatus.NOT_FOUND);
-		// }
-		// return new ResponseEntity(specialtyService.findAll(specialty,
-		// courseId,
-		// new PageRequest(curPage - 1, pageSize)), HttpStatus.OK);
-		return null;
+	public Page<SpecialtyEntity> getSpecialtyPage(@PathVariable Integer curPage,
+			@PathVariable Integer pageSize, @RequestParam(required = false) String name,
+			@RequestParam(required = false) String code,
+			@RequestParam(required = false) Boolean enable,
+			@RequestParam(required = false) Long courseId) {
+		User accessUser = getAccessUser();
+
+		Specification<SpecialtyEntity> specification = (root, query, cb) -> {
+			List<Predicate> predicates = new ArrayList<>();
+
+			predicates.add(cb.equal(root.get("rootOrgId"), accessUser.getRootOrgId()));
+
+			if (StringUtils.isNotBlank(name)) {
+				predicates.add(cb.like(root.get("name"), toSqlSearchPattern(name)));
+			}
+			if (StringUtils.isNotBlank(code)) {
+				predicates.add(cb.like(root.get("code"), toSqlSearchPattern(code)));
+			}
+			if (null != enable) {
+				predicates.add(cb.equal(root.get("enable"), enable));
+			}
+
+			if (null != courseId) {
+				Subquery<CourseSpeciatlyRelationEntity> subquery = query
+						.subquery(CourseSpeciatlyRelationEntity.class);
+				Root<CourseSpeciatlyRelationEntity> subRoot = subquery
+						.from(CourseSpeciatlyRelationEntity.class);
+				subquery.select(subRoot);
+				Predicate p1 = cb.equal(subRoot.get("courseId"), courseId);
+				Predicate p2 = cb.equal(subRoot.get("specialtyId"), root.get("id"));
+				subquery.where(cb.and(p1, p2));
+				predicates.add(cb.exists(subquery));
+			}
+
+			return cb.and(predicates.toArray(new Predicate[predicates.size()]));
+		};
+
+		PageRequest pageRequest = new PageRequest(curPage, pageSize,
+				new Sort(Direction.DESC, "updateTime"));
+
+		Page<SpecialtyEntity> page = specialtyRepo.findAll(specification, pageRequest);
+		return page;
+	}
+
+	/**
+	 * 方法注释
+	 *
+	 * @author WANGWEI
+	 * @return
+	 */
+	@ApiOperation(value = "查询所有专业")
+	@GetMapping("all")
+	public List<SpecialtyEntity> getAll() {
+		User accessUser = getAccessUser();
+		Long rootOrgId = accessUser.getRootOrgId();
+		List<SpecialtyEntity> list = specialtyRepo.findByRootOrgId(rootOrgId);
+		return list;
 	}
 
 	/**
@@ -137,7 +200,8 @@ public class SpecialtyController extends ControllerSupport {
 	 */
 	@ApiOperation(value = "导出专业", notes = "导出专业")
 	@GetMapping("export")
-	public void exportSpecialty(@ModelAttribute SpecialtyEntity specialty, HttpServletResponse response) {
+	public void exportSpecialty(@ModelAttribute SpecialtyEntity specialty,
+			HttpServletResponse response) {
 		// List<SpecialtyDto> list = new ArrayList<SpecialtyDto>();
 		// specialtyService.findAll(specialty).forEach(c -> {
 		// list.add(new SpecialtyDto(c));

+ 77 - 0
examcloud-core-basic-api-provider/src/main/java/cn/com/qmth/examcloud/core/basic/api/controller/bean/CourseDomain.java

@@ -0,0 +1,77 @@
+package cn.com.qmth.examcloud.core.basic.api.controller.bean;
+
+import cn.com.qmth.examcloud.commons.web.cloud.api.JsonSerializable;
+import cn.com.qmth.examcloud.core.basic.dao.enums.CourseLevel;
+
+/**
+ * 类注释
+ *
+ * @author WANGWEI
+ * @date 2018年8月27日
+ * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
+ */
+public class CourseDomain implements JsonSerializable {
+
+	private static final long serialVersionUID = -6261302618070108336L;
+
+	private Long id;
+
+	private Long rootOrgId;
+
+	private String code;
+
+	private String name;
+
+	private CourseLevel level;
+
+	private Boolean enable;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getRootOrgId() {
+		return rootOrgId;
+	}
+
+	public void setRootOrgId(Long rootOrgId) {
+		this.rootOrgId = rootOrgId;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public CourseLevel getLevel() {
+		return level;
+	}
+
+	public void setLevel(CourseLevel level) {
+		this.level = level;
+	}
+
+	public Boolean getEnable() {
+		return enable;
+	}
+
+	public void setEnable(Boolean enable) {
+		this.enable = enable;
+	}
+
+}

+ 1 - 1
examcloud-core-basic-api-provider/src/main/java/cn/com/qmth/examcloud/core/basic/api/provider/CourseCloudServiceProvider.java

@@ -75,7 +75,7 @@ public class CourseCloudServiceProvider implements CourseCloudService {
 				throw new StatusException("B-160006", "课程机构错误");
 			}
 
-		} else if (StringUtils.isBlank(courseCode)) {
+		} else if (StringUtils.isNotBlank(courseCode)) {
 
 			course = courseRepo.findByRootOrgIdAndCode(rootOrgId, courseCode);
 			if (null != course) {

+ 24 - 0
examcloud-core-basic-service/src/main/java/cn/com/qmth/examcloud/core/basic/service/CourseService.java

@@ -0,0 +1,24 @@
+package cn.com.qmth.examcloud.core.basic.service;
+
+import cn.com.qmth.examcloud.core.basic.dao.entity.CourseEntity;
+import cn.com.qmth.examcloud.core.basic.service.bean.CourseInfo;
+
+/**
+ * 类注释
+ *
+ * @author WANGWEI
+ * @date 2018年8月27日
+ * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
+ */
+public interface CourseService {
+
+	/**
+	 * 方法注释
+	 *
+	 * @author WANGWEI
+	 * @param courseInfo
+	 * @return
+	 */
+	CourseEntity saveCourse(CourseInfo courseInfo);
+
+}

+ 0 - 23
examcloud-core-basic-service/src/main/java/cn/com/qmth/examcloud/core/basic/service/bean/CourseAssembler.java

@@ -1,23 +0,0 @@
-package cn.com.qmth.examcloud.core.basic.service.bean;
-
-import org.springframework.stereotype.Component;
-
-import cn.com.qmth.examcloud.core.basic.dao.entity.CourseEntity;
-
-@Component
-public class CourseAssembler {
-
-	public CourseDto toDTO(CourseEntity course) {
-		CourseDto dto = null;
-		if (dto == null) {
-			dto = new CourseDto();
-			dto.setName(course.getName());
-			dto.setCode(course.getCode());
-			if (null != course.getLevel()) {
-				dto.setLevel(course.getLevel().getName());
-			}
-		}
-		return dto;
-	}
-
-}

+ 0 - 76
examcloud-core-basic-service/src/main/java/cn/com/qmth/examcloud/core/basic/service/bean/CourseDto.java

@@ -1,76 +0,0 @@
-package cn.com.qmth.examcloud.core.basic.service.bean;
-
-import cn.com.qmth.examcloud.commons.base.util.excel.ExcelProperty;
-
-/**
- * 
- * @Description: 课程
- * @author ting.yin
- * @date 2017年1月5日
- */
-public class CourseDto {
-
-
-    @ExcelProperty(index = 1,name = "课程代码")
-	private String code;
-
-	@ExcelProperty(index = 0,name = "课程名称")
-    private String name;
-
-	private Long orgId;
-	
-    @ExcelProperty(index = 2,name = "层次(ZSB,GQZ,ALL)")
-	private String level;
-    
-//    @ExcelProperty(index = 3,name = "状态",type = 1)
-	private String enable;
-
-	public String getCode() {
-		return code;
-	}
-
-	public void setCode(String code) {
-		this.code = code;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-    public Long getOrgId() {
-		return orgId;
-	}
-
-	public void setOrgId(Long orgId) {
-		this.orgId = orgId;
-	}
-
-	public String getLevel() {
-		return level;
-	}
-
-	public void setLevel(String level) {
-		this.level = level;
-	}
-
-	public String getEnable() {
-		return enable;
-	}
-
-	public void setEnable(String enable) {
-		this.enable = enable;
-	}
-
-	public CourseDto(String name, String code, String level) {
-		this.name = name;
-		this.code = code;
-		this.level = level;
-	}
-
-	public CourseDto() {
-	}
-}

+ 0 - 2
examcloud-core-basic-service/src/main/java/cn/com/qmth/examcloud/core/basic/service/bean/CourseInfo.java

@@ -17,8 +17,6 @@ public class CourseInfo implements JsonSerializable {
 
 	private static final long serialVersionUID = -6261302618070108336L;
 
-	@Id
-	@GeneratedValue
 	private Long id;
 
 	private Long rootOrgId;

+ 91 - 63
examcloud-core-basic-service/src/main/java/cn/com/qmth/examcloud/core/basic/service/impl/CourseServiceImpl.java

@@ -1,88 +1,116 @@
 package cn.com.qmth.examcloud.core.basic.service.impl;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-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 org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.StringUtils;
 
+import cn.com.qmth.examcloud.commons.base.exception.StatusException;
 import cn.com.qmth.examcloud.core.basic.dao.CourseRepo;
+import cn.com.qmth.examcloud.core.basic.dao.OrgRepo;
 import cn.com.qmth.examcloud.core.basic.dao.entity.CourseEntity;
-import cn.com.qmth.examcloud.core.basic.dao.entity.CourseSpeciatlyRelationEntity;
+import cn.com.qmth.examcloud.core.basic.dao.entity.OrgEntity;
+import cn.com.qmth.examcloud.core.basic.dao.enums.CourseLevel;
+import cn.com.qmth.examcloud.core.basic.service.CourseService;
+import cn.com.qmth.examcloud.core.basic.service.bean.CourseInfo;
 
 @Service
-public class CourseServiceImpl {
+public class CourseServiceImpl implements CourseService {
 
 	@Autowired
 	CourseRepo courseRepo;
 
-	private Specification<CourseEntity> getSpecification(CourseEntity courseCriteria, Long specialtyId) {
-		Specification<CourseEntity> specification = (root, query, cb) -> {
-			List<Predicate> predicates = new ArrayList<>();
-			if (!StringUtils.isEmpty(courseCriteria.getRootOrgId())) {
-				predicates.add(cb.equal(root.get("orgId"), courseCriteria.getRootOrgId()));
-			}
-			if (!StringUtils.isEmpty(courseCriteria.getName())) {
-				predicates.add(cb.like(root.get("name"), "%" + courseCriteria.getName() + "%"));
-			}
-			if (!StringUtils.isEmpty(courseCriteria.getCode())) {
-				predicates.add(cb.like(root.get("code"), "%" + courseCriteria.getCode() + "%"));
-			}
-			if (!StringUtils.isEmpty(courseCriteria.getLevel())) {
-				predicates.add(cb.equal(root.get("level"), courseCriteria.getLevel()));
+	@Autowired
+	OrgRepo orgRepo;
+
+	/*
+	 * 实现
+	 *
+	 * @author WANGWEI
+	 * 
+	 * @see
+	 * cn.com.qmth.examcloud.core.basic.service.CourseService#saveCourse(cn.com.
+	 * qmth.examcloud.core.basic.service.bean.CourseInfo)
+	 */
+	@Override
+	public CourseEntity saveCourse(CourseInfo courseInfo) {
+		Long rootOrgId = courseInfo.getRootOrgId();
+		Long courseId = courseInfo.getId();
+		String courseCode = courseInfo.getCode();
+		CourseLevel level = courseInfo.getLevel();
+		Boolean enable = courseInfo.getEnable();
+		String name = courseInfo.getName();
+
+		if (null == rootOrgId) {
+			throw new StatusException("B-160000", "rootOrgId is null");
+		}
+		OrgEntity rootOrg = orgRepo.findOne(rootOrgId);
+		if (null == rootOrg) {
+			throw new StatusException("B-160001", "机构不存在");
+		}
+		if (null != rootOrg.getParentId()) {
+			throw new StatusException("B-160002", "机构错误");
+		}
+
+		CourseEntity course = null;
+
+		if (null != courseId) {
+			course = courseRepo.findOne(courseId);
+
+			if (null == course) {
+				throw new StatusException("B-160006", "课程ID错误");
 			}
-			if (!StringUtils.isEmpty(courseCriteria.getEnable())) {
-				predicates.add(cb.equal(root.get("enable"), courseCriteria.getEnable()));
+
+			if (!rootOrgId.equals(course.getRootOrgId())) {
+				throw new StatusException("B-160006", "课程机构错误");
 			}
-			if (specialtyId != null) {
-				Subquery<CourseSpeciatlyRelationEntity> relationshipSubquery = query
-						.subquery(CourseSpeciatlyRelationEntity.class);
-				Root<CourseSpeciatlyRelationEntity> residencyRelationshipSubqueryRoot = relationshipSubquery
-						.from(CourseSpeciatlyRelationEntity.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));
+
+		} else if (StringUtils.isNotBlank(courseCode)) {
+
+			course = courseRepo.findByRootOrgIdAndCode(rootOrgId, courseCode);
+
+			if (null != course) {
+				if (null == course.getEnable()) {
+					course.setEnable(true);
+				}
+				if (null == course.getLevel()) {
+					course.setLevel(CourseLevel.ALL);
+				}
+			} else {
+				course = new CourseEntity();
+				course.setRootOrgId(rootOrgId);
+				course.setCode(courseCode);
+				course.setEnable(true);
+				course.setLevel(CourseLevel.ALL);
 			}
-			return cb.and(predicates.toArray(new Predicate[predicates.size()]));
-		};
-		return specification;
-	}
 
-	public List<CourseEntity> findAll(CourseEntity courseCriteria) {
-		Specification<CourseEntity> specification = getSpecification(courseCriteria, null);
-		return courseRepo.findAll(specification);
-	}
+		} else {
+			throw new StatusException("B-160004", "courseId,courseCode can not be all null");
+		}
 
-	public void setCourseEnable(List<Long> courseIds, boolean enable) {
-		for (Long courseId : courseIds) {
-			CourseEntity course = courseRepo.findOne(courseId);
+		if (null != enable) {
 			course.setEnable(enable);
-			course.setUpdateTime(new Date());
-			courseRepo.saveAndFlush(course);
 		}
-	}
 
-	@Transactional
-	public void delete(String ids) {
-		List<Long> courseIds = Stream.of(ids.split(",")).map(s -> Long.parseLong(s.trim()))
-				.collect(Collectors.toList());
-		for (Long courseId : courseIds) {
-			courseRepo.delete(courseId);
+		if (StringUtils.isNotBlank(name)) {
+			course.setName(name);
+		}
+
+		if (null != level) {
+			course.setLevel(level);
+		}
+
+		long updateTime = 0L;
+		if (null != course.getUpdateTime()) {
+			updateTime = course.getUpdateTime().getTime();
+		}
+
+		CourseEntity saved = courseRepo.saveAndFlush(course);
+
+		// 同步操作
+		if (updateTime != saved.getUpdateTime().getTime()) {
+
 		}
+		return saved;
 	}
 
 }