wangwei преди 6 години
родител
ревизия
11bcc4b299

+ 68 - 0
examcloud-core-basic-api-provider/src/main/java/cn/com/qmth/examcloud/core/basic/api/controller/FacesetController.java

@@ -0,0 +1,68 @@
+package cn.com.qmth.examcloud.core.basic.api.controller;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import cn.com.qmth.examcloud.commons.web.support.ControllerSupport;
+import cn.com.qmth.examcloud.core.basic.api.controller.bean.StudentFaceDomain;
+import cn.com.qmth.examcloud.core.basic.dao.StudentFaceRepo;
+import cn.com.qmth.examcloud.core.basic.dao.StudentRepo;
+import cn.com.qmth.examcloud.core.basic.dao.entity.FacesetEntity;
+import cn.com.qmth.examcloud.core.basic.dao.entity.StudentFaceEntity;
+import cn.com.qmth.examcloud.core.basic.service.StudentFaceService;
+import cn.com.qmth.examcloud.core.basic.service.bean.StudentFaceInfo;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 类注释
+ *
+ * @author WANGWEI
+ * @date 2018年9月4日
+ * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
+ */
+@Transactional
+@RestController
+@RequestMapping("${$rmp.ctr.basic}/faceset")
+public class FacesetController extends ControllerSupport {
+
+	@Autowired
+	StudentFaceRepo studentFaceInfoRepo;
+
+	@Autowired
+	StudentRepo studentRepo;
+
+	@Autowired
+	StudentFaceService studentFaceService;
+
+	@ApiOperation(value = "保存学生人脸数据")
+	@PostMapping("saveStudentFace")
+	public StudentFaceEntity saveStudentFace(@RequestBody StudentFaceDomain req) {
+		StudentFaceInfo info = new StudentFaceInfo();
+		info.setFacesetToken(req.getFacesetToken());
+		info.setFaceToken(req.getFaceToken());
+		info.setOperator(req.getOperator());
+		info.setPhotoName(req.getPhotoName());
+		info.setRootOrgId(req.getRootOrgId());
+		info.setStudentId(req.getStudentId());
+
+		StudentFaceEntity saved = studentFaceService.saveStudentFace(info);
+		return saved;
+	}
+
+	@ApiOperation(value = "获取可用的faceset集合")
+	@GetMapping("getUsableFacesetList")
+	public List<FacesetEntity> getUsableFacesetList() {
+
+		List<FacesetEntity> facesetList = studentFaceService.getUsableFacesetList();
+
+		return facesetList;
+	}
+
+}

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

@@ -0,0 +1,76 @@
+package cn.com.qmth.examcloud.core.basic.api.controller.bean;
+
+import cn.com.qmth.examcloud.commons.web.cloud.api.BaseRequest;
+
+/**
+ * 类注释
+ *
+ * @author WANGWEI
+ * @date 2018年7月18日
+ * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
+ */
+public class StudentFaceDomain extends BaseRequest {
+
+	private static final long serialVersionUID = -8260481601116583797L;
+
+	private Long rootOrgId;
+
+	private Long studentId;
+
+	private String faceToken;
+
+	private String facesetToken;
+
+	private String photoName;
+
+	private String operator;
+
+	public Long getRootOrgId() {
+		return rootOrgId;
+	}
+
+	public void setRootOrgId(Long rootOrgId) {
+		this.rootOrgId = rootOrgId;
+	}
+
+	public Long getStudentId() {
+		return studentId;
+	}
+
+	public void setStudentId(Long studentId) {
+		this.studentId = studentId;
+	}
+
+	public String getFaceToken() {
+		return faceToken;
+	}
+
+	public void setFaceToken(String faceToken) {
+		this.faceToken = faceToken;
+	}
+
+	public String getFacesetToken() {
+		return facesetToken;
+	}
+
+	public void setFacesetToken(String facesetToken) {
+		this.facesetToken = facesetToken;
+	}
+
+	public String getPhotoName() {
+		return photoName;
+	}
+
+	public void setPhotoName(String photoName) {
+		this.photoName = photoName;
+	}
+
+	public String getOperator() {
+		return operator;
+	}
+
+	public void setOperator(String operator) {
+		this.operator = operator;
+	}
+
+}

+ 34 - 0
examcloud-core-basic-api-provider/src/main/java/cn/com/qmth/examcloud/core/basic/api/provider/StudentFaceCloudServiceProvider.java

@@ -1,5 +1,7 @@
 package cn.com.qmth.examcloud.core.basic.api.provider;
 
+import java.util.List;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -7,12 +9,18 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.google.common.collect.Lists;
+
 import cn.com.qmth.examcloud.commons.web.support.ControllerSupport;
 import cn.com.qmth.examcloud.core.basic.api.StudentFaceCloudService;
+import cn.com.qmth.examcloud.core.basic.api.bean.FacesetBean;
+import cn.com.qmth.examcloud.core.basic.api.request.GetUsableFacesetListReq;
 import cn.com.qmth.examcloud.core.basic.api.request.SaveStudentFaceReq;
+import cn.com.qmth.examcloud.core.basic.api.response.GetUsableFacesetListResp;
 import cn.com.qmth.examcloud.core.basic.api.response.SaveStudentFaceResp;
 import cn.com.qmth.examcloud.core.basic.dao.StudentFaceRepo;
 import cn.com.qmth.examcloud.core.basic.dao.StudentRepo;
+import cn.com.qmth.examcloud.core.basic.dao.entity.FacesetEntity;
 import cn.com.qmth.examcloud.core.basic.dao.entity.StudentFaceEntity;
 import cn.com.qmth.examcloud.core.basic.service.StudentFaceService;
 import cn.com.qmth.examcloud.core.basic.service.bean.StudentFaceInfo;
@@ -61,4 +69,30 @@ public class StudentFaceCloudServiceProvider extends ControllerSupport
 		return resp;
 	}
 
+	@ApiOperation(value = "获取可用的faceset集合")
+	@PostMapping("getUsableFacesetList")
+	@Override
+	public GetUsableFacesetListResp getUsableFacesetList(@RequestBody GetUsableFacesetListReq req) {
+
+		List<FacesetEntity> facesetList = studentFaceService.getUsableFacesetList();
+
+		List<FacesetBean> list = Lists.newArrayList();
+
+		for (FacesetEntity cur : facesetList) {
+			FacesetBean bean = new FacesetBean();
+			list.add(bean);
+
+			bean.setDisplayName(cur.getDisplayName());
+			bean.setFaceCount(cur.getFaceCount());
+			bean.setFacesetToken(cur.getFacesetToken());
+			bean.setId(cur.getId());
+			bean.setOuterId(cur.getOuterId());
+			bean.setTags(cur.getTags());
+		}
+
+		GetUsableFacesetListResp resp = new GetUsableFacesetListResp();
+		resp.setFacesetBeanList(list);
+		return resp;
+	}
+
 }

+ 3 - 1
examcloud-core-basic-dao/src/main/java/cn/com/qmth/examcloud/core/basic/dao/FacesetRepo.java

@@ -1,6 +1,7 @@
 package cn.com.qmth.examcloud.core.basic.dao;
 
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.repository.query.QueryByExampleExecutor;
 
 import cn.com.qmth.examcloud.core.basic.dao.entity.FacesetEntity;
@@ -8,7 +9,8 @@ import cn.com.qmth.examcloud.core.basic.dao.entity.FacesetEntity;
 public interface FacesetRepo
 		extends
 			JpaRepository<FacesetEntity, Long>,
-			QueryByExampleExecutor<FacesetEntity> {
+			QueryByExampleExecutor<FacesetEntity>,
+			JpaSpecificationExecutor<FacesetEntity> {
 
 	FacesetEntity findByFacesetToken(String facesetToken);
 

+ 12 - 1
examcloud-core-basic-service/src/main/java/cn/com/qmth/examcloud/core/basic/service/StudentFaceService.java

@@ -1,5 +1,8 @@
 package cn.com.qmth.examcloud.core.basic.service;
 
+import java.util.List;
+
+import cn.com.qmth.examcloud.core.basic.dao.entity.FacesetEntity;
 import cn.com.qmth.examcloud.core.basic.dao.entity.StudentFaceEntity;
 import cn.com.qmth.examcloud.core.basic.service.bean.StudentFaceInfo;
 
@@ -13,7 +16,7 @@ import cn.com.qmth.examcloud.core.basic.service.bean.StudentFaceInfo;
 public interface StudentFaceService {
 
 	/**
-	 * 方法注释
+	 * 保存学生人脸信息
 	 *
 	 * @author WANGWEI
 	 * @param info
@@ -21,4 +24,12 @@ public interface StudentFaceService {
 	 */
 	StudentFaceEntity saveStudentFace(StudentFaceInfo info);
 
+	/**
+	 * 获取可用的facecset集合
+	 *
+	 * @author WANGWEI
+	 * @return
+	 */
+	List<FacesetEntity> getUsableFacesetList();
+
 }

+ 38 - 0
examcloud-core-basic-service/src/main/java/cn/com/qmth/examcloud/core/basic/service/impl/StudentFaceServiceImpl.java

@@ -1,9 +1,22 @@
 package cn.com.qmth.examcloud.core.basic.service.impl;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.persistence.criteria.Predicate;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+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.stereotype.Service;
 
+import com.google.common.collect.Lists;
+
 import cn.com.qmth.examcloud.commons.base.exception.StatusException;
 import cn.com.qmth.examcloud.commons.base.util.UrlUtil;
 import cn.com.qmth.examcloud.core.basic.dao.FacesetRepo;
@@ -99,4 +112,29 @@ public class StudentFaceServiceImpl implements StudentFaceService {
 		return saved;
 	}
 
+	@Override
+	public List<FacesetEntity> getUsableFacesetList() {
+
+		Specification<FacesetEntity> specification = (root, query, cb) -> {
+			List<Predicate> predicates = new ArrayList<>();
+			predicates.add(cb.lessThan(root.get("faceCount"), 8000));
+
+			return cb.and(predicates.toArray(new Predicate[predicates.size()]));
+		};
+
+		PageRequest pageRequest = new PageRequest(0, 10, new Sort(Direction.DESC, "updateTime"));
+
+		Page<FacesetEntity> studentList = facesetRepo.findAll(specification, pageRequest);
+
+		Iterator<FacesetEntity> iterator = studentList.iterator();
+
+		List<FacesetEntity> list = Lists.newArrayList();
+
+		while (iterator.hasNext()) {
+			list.add(iterator.next());
+		}
+
+		return list;
+	}
+
 }