浏览代码

增加课程导入

ting.yin 8 年之前
父节点
当前提交
b192761a6a

+ 20 - 6
core-api/pom.xml

@@ -59,12 +59,26 @@
             <artifactId>springfox-swagger-ui</artifactId>
             <version>2.6.1</version>
         </dependency>
-        <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-            <version>2.8.0</version>
-        </dependency>
     </dependencies>
-
+    
+	<build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+				<configuration>
+                    <includeSystemScope>true</includeSystemScope>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 
 </project>

+ 35 - 4
core-api/src/main/java/cn/com/qmth/examcloud/service/core/api/CourseApi.java

@@ -1,13 +1,31 @@
 package cn.com.qmth.examcloud.service.core.api;
 
-import cn.com.qmth.examcloud.service.core.repo.CourseRepo;
-import cn.com.qmth.examcloud.service.core.entity.Course;
-import cn.com.qmth.examcloud.service.core.service.CourseService;
 import io.swagger.annotations.ApiOperation;
+
+import java.io.IOException;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
+import cn.com.qmth.examcloud.common.util.excel.ExcelError;
+import cn.com.qmth.examcloud.service.core.entity.Course;
+import cn.com.qmth.examcloud.service.core.repo.CourseRepo;
+import cn.com.qmth.examcloud.service.core.service.CourseService;
 
 /**
  * 课程服务API
@@ -53,4 +71,17 @@ public class CourseApi {
         courseRepo.delete(id);
         return new ResponseEntity(HttpStatus.OK);
     }
+    
+    @ApiOperation(value="导入课程",notes = "导入")
+    @PostMapping("/import")
+    public ResponseEntity importCourse(HttpServletRequest request,@RequestParam MultipartFile file){
+    	try {
+    		AccessUser accessUser = (AccessUser) request.getAttribute("accessUser");
+    		List<ExcelError> errors = courseService.importCourse(accessUser.getRootOrgId(),file.getInputStream());
+    		return new ResponseEntity(errors,HttpStatus.OK);
+		} catch (IOException e) {
+			e.printStackTrace();
+			return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
+		}
+    }
 }

+ 18 - 5
core-api/src/main/java/cn/com/qmth/examcloud/service/core/api/StudentApi.java

@@ -2,6 +2,11 @@ package cn.com.qmth.examcloud.service.core.api;
 
 import io.swagger.annotations.ApiOperation;
 
+import java.io.File;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.http.HttpStatus;
@@ -17,6 +22,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
+import cn.com.qmth.examcloud.common.util.ErrorMsg;
 import cn.com.qmth.examcloud.service.core.entity.Student;
 import cn.com.qmth.examcloud.service.core.repo.StudentRepo;
 import cn.com.qmth.examcloud.service.core.service.StudentService;
@@ -72,10 +79,16 @@ public class StudentApi {
         return new ResponseEntity(HttpStatus.OK);
     }
     
-    @ApiOperation(value="更新学生照片",notes="更新")
-    @PutMapping("/update")
-    public ResponseEntity updateStudentPhoto(@RequestParam String identityNumber){
-        return new ResponseEntity(studentService.updateStudentPhoto(identityNumber),HttpStatus.OK);
+    @ApiOperation(value="学生照片绑定",notes = "照片绑定")
+    @PostMapping("/photo")
+    public ResponseEntity photopBundled (HttpServletRequest request,@RequestParam File file){
+    	try {
+    		AccessUser accessUser = (AccessUser) request.getAttribute("accessUser");
+    		List<ErrorMsg> errorMsgs = studentService.photopBundled(accessUser.getRootOrgId(),file);
+    		return new ResponseEntity(errorMsgs,HttpStatus.OK);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
+		}
     }
-    
 }

+ 49 - 4
core-api/src/main/java/cn/com/qmth/examcloud/service/core/service/CourseService.java

@@ -1,16 +1,61 @@
 package cn.com.qmth.examcloud.service.core.service;
 
-import cn.com.qmth.examcloud.service.core.repo.CourseRepo;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-/**
- * Created by songyue on 17/1/14.
- */
+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.enums.CourseLevel;
+import cn.com.qmth.examcloud.service.core.repo.CourseRepo;
+
 @Service
 public class CourseService {
 
     @Autowired
     CourseRepo courseRepo;
 
+	public List<ExcelError> importCourse(Long orgId,InputStream inputStream) {
+		List<Course> list = new ArrayList<Course>();
+		ExcelReader excelReader = new ExcelReader(CourseDTO.class);
+        List<ExcelError> excelErrors = excelReader.reader(inputStream, new ExcelReaderHandle() {
+            @Override
+            public ExcelError handle(Object obj) {
+            	CourseDTO dto = (CourseDTO) obj;
+            	Course course = new Course(dto.getName(),dto.getCode());
+            	course.setOrgId(orgId);
+            	if("0".equalsIgnoreCase(dto.getLevel())){
+            		course.setLevel(CourseLevel.ZSB);
+            	}
+            	if("1".equalsIgnoreCase(dto.getLevel())){
+            		course.setLevel(CourseLevel.GQZ);
+            	}
+                ExcelError error = importCheck(course);
+                if (error == null) {
+                	list.add(course);
+                }
+                return error;
+            }
+        });
+        courseRepo.save(list);
+		return excelErrors;
+	}
+
+	private ExcelError importCheck(Course dto) {
+		if(null == dto.getLevel()){
+			return new ExcelError("层次不存在");
+		}
+		Course course = courseRepo.findByCode(dto.getCode());
+		if(course != null){
+			return new ExcelError("代码已存在");
+		}
+		return null;
+	}
+
 }

+ 28 - 6
core-api/src/main/java/cn/com/qmth/examcloud/service/core/service/StudentService.java

@@ -1,6 +1,7 @@
 package cn.com.qmth.examcloud.service.core.service;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -10,6 +11,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
+import cn.com.qmth.examcloud.common.util.ErrorMsg;
 import cn.com.qmth.examcloud.service.core.entity.Student;
 import cn.com.qmth.examcloud.service.core.repo.StudentRepo;
 
@@ -19,8 +21,11 @@ import cn.com.qmth.examcloud.service.core.repo.StudentRepo;
  */
 @Service
 public class StudentService {
+	
     @Autowired
     StudentRepo studentRepo;
+    
+    private static final String JPG = ".jpg";
 
     /**
      * 获取所有学生(分页)
@@ -46,14 +51,31 @@ public class StudentService {
     }
 
     /**
-     * 根据身份证更新学生照片
-     * @param identityNumber
+     * 绑定学生照片
      * @return
      */
-	public Student updateStudentPhoto(String identityNumber) {
-		Student student = studentRepo.findByIdentityNumber(identityNumber);
-		student.setPhotoPath(student.getUser().getOrgId()+File.separator+"photo"+ File.separator+identityNumber);
-		return studentRepo.save(student);
+	public List<ErrorMsg> photopBundled(Long rootOrgId, File directory) {
+		List<ErrorMsg> list = new ArrayList<ErrorMsg>();
+		if(directory.isDirectory()){
+			for (File file : directory.listFiles()) {
+				if(!file.getName().endsWith(JPG)){
+					list.add(new ErrorMsg(file.getName()+"格式错误,文件名格式必须是jpg(小写)"));
+				}
+				String fileName = file.getName().split(JPG)[0];
+				//先查学号
+				Student student = studentRepo.findByUserRootOrgIdAndStudentCode(rootOrgId,fileName);
+				if(student == null){//学号不存在查身份证号
+					student = studentRepo.findByIdentityNumber(fileName);
+				}
+				if(student!=null ){//学生存在则绑定照片
+					student.setPhotoPath(student.getUser().getRootOrgId()+File.separator+"photo"+ File.separator+fileName);
+					studentRepo.save(student);
+				}
+			}
+		}else{
+			list.add(new ErrorMsg("文件路径不正确"));
+		}
+		return list;
 	}
 
 }

+ 1 - 0
core-api/src/main/java/cn/com/qmth/examcloud/service/core/service/UserService.java

@@ -123,6 +123,7 @@ public class UserService {
                         Collectors.mapping(UserRole::getRoleCode,Collectors.toSet())));
         accessUser.setLoginName(user.getLoginName());
         accessUser.setOrgId(user.getOrgId());
+        accessUser.setRootOrgId(user.getRootOrgId());
         accessUser.setUserId(user.getId());
         accessUser.setRoles(rolesMap);
         accessUser.setToken(token);

+ 2 - 3
core-domain/pom.xml

@@ -27,12 +27,11 @@
             <groupId>org.hibernate</groupId>
             <artifactId>hibernate-validator</artifactId>
         </dependency>
-
+        
         <dependency>
             <groupId>cn.com.qmth.examcloud.common</groupId>
-            <artifactId>common-uac</artifactId>
+            <artifactId>common-util</artifactId>
             <version>${project.version}</version>
         </dependency>
-
     </dependencies>
 </project>

+ 58 - 0
core-domain/src/main/java/cn/com/qmth/examcloud/service/core/dto/CourseDTO.java

@@ -0,0 +1,58 @@
+package cn.com.qmth.examcloud.service.core.dto;
+
+import cn.com.qmth.examcloud.common.util.excel.ExcelProperty;
+
+/**
+ * 
+ * @Description: 课程
+ * @author ting.yin
+ * @date 2017年1月5日
+ */
+public class CourseDTO{
+
+
+    @ExcelProperty(index = 1)
+	private String code;
+
+	@ExcelProperty(index = 0)
+    private String name;
+
+	private Long orgId;
+    @ExcelProperty(index = 2)
+	private String level;
+
+	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 CourseDTO() {
+	}
+}

+ 33 - 4
core-domain/src/main/java/cn/com/qmth/examcloud/service/core/entity/Course.java

@@ -1,13 +1,23 @@
 package cn.com.qmth.examcloud.service.core.entity;
 
-import org.springframework.format.annotation.DateTimeFormat;
-
 import java.io.Serializable;
 import java.util.Date;
 
-import javax.persistence.*;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
 import javax.validation.constraints.NotNull;
 
+import org.springframework.format.annotation.DateTimeFormat;
+
+import cn.com.qmth.examcloud.common.util.excel.ExcelProperty;
+import cn.com.qmth.examcloud.service.core.enums.CourseLevel;
+
 /**
  * 
  * @Description: 课程
@@ -24,14 +34,19 @@ public class Course implements Serializable{
     @GeneratedValue
     private Long id;
 
+    @ExcelProperty(index = 1)
 	@NotNull
 	private String code;
 
+	@ExcelProperty(index = 0)
 	@NotNull
     private String name;
 
 	@NotNull
 	private Long orgId;
+	
+	@Enumerated(EnumType.STRING)
+	private CourseLevel level;
 
 	@Temporal(value = TemporalType.DATE)
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -41,7 +56,6 @@ public class Course implements Serializable{
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	private Date updateTime;
 
-	@NotNull
 	private boolean enable;
 
 	public static long getSerialVersionUID() {
@@ -104,6 +118,21 @@ public class Course implements Serializable{
 		this.orgId = orgId;
 	}
 
+	public CourseLevel getLevel() {
+		return level;
+	}
+
+	public void setLevel(CourseLevel level) {
+		this.level = level;
+	}
+
 	public Course() {
 	}
+
+	public Course(String name, String code) {
+		this.name = name;
+		this.code = code;
+		this.createTime = new Date();
+		this.enable = true;
+	}
 }

+ 25 - 0
core-domain/src/main/java/cn/com/qmth/examcloud/service/core/entity/Org.java

@@ -57,6 +57,15 @@ public class Org implements Serializable{
 
     @NotNull
     private boolean enable;
+    
+    /**
+     * 联系电话
+     */
+    private String telphone;
+    /**
+     * 联系人
+     */
+    private String contacts;
 
     @Temporal(value = TemporalType.DATE)
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -166,6 +175,22 @@ public class Org implements Serializable{
 		this.code = code;
 	}
 
+	public String getTelphone() {
+		return telphone;
+	}
+
+	public void setTelphone(String telphone) {
+		this.telphone = telphone;
+	}
+
+	public String getContacts() {
+		return contacts;
+	}
+
+	public void setContacts(String contacts) {
+		this.contacts = contacts;
+	}
+
 	public Org() {
     }
 }

+ 18 - 0
core-domain/src/main/java/cn/com/qmth/examcloud/service/core/enums/CourseLevel.java

@@ -0,0 +1,18 @@
+package cn.com.qmth.examcloud.service.core.enums;
+
+public enum CourseLevel {
+
+	ZSB("专升本"),
+
+	GQZ("高起专");
+	
+    private String name;
+
+    private CourseLevel(String name){
+        this.name = name;
+    }
+
+    public String getName(){
+        return this.name;
+    }
+}

+ 2 - 0
core-domain/src/main/java/cn/com/qmth/examcloud/service/core/repo/StudentRepo.java

@@ -15,4 +15,6 @@ public interface StudentRepo extends JpaRepository<Student,Long>,QueryByExampleE
     Student findByUserId(long userId);
 
 	Student findByIdentityNumber(String identityNumber);
+
+	Student findByUserRootOrgIdAndStudentCode(Long rootOrgId, String studentCode);
 }

+ 0 - 52
core-main/pom.xml

@@ -16,58 +16,6 @@
             <artifactId>core-api</artifactId>
             <version>0.1.0</version>
         </dependency>
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-feign</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-eureka</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-tomcat</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-devtools</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>2.6.1</version>
-        </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>2.6.1</version>
-        </dependency>
     </dependencies>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
 </project>