|
@@ -10,8 +10,10 @@ import cn.hmsoft.art.data.model.live.TxStdLiveLog;
|
|
|
import cn.hmsoft.art.data.model.live.txStdMaterialLog;
|
|
|
import cn.hmsoft.art.data.model.std.StdMaterial;
|
|
|
import cn.hmsoft.art.data.model.std.StdReg;
|
|
|
+import cn.hmsoft.art.data.model.std.StdRes;
|
|
|
import cn.hmsoft.art.data.response.live.*;
|
|
|
import cn.hmsoft.art.data.vo.live.DetectAuthVO;
|
|
|
+import cn.hmsoft.art.enrol.data.dao.std.EnrolStdResDao;
|
|
|
import cn.hmsoft.art.enrol.helper.EnrolMaterialHelper;
|
|
|
import cn.hmsoft.art.helper.ArtParamHelper;
|
|
|
import cn.hmsoft.art.helper.GsonHelper;
|
|
@@ -29,6 +31,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.io.File;
|
|
|
+import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.List;
|
|
|
|
|
@@ -50,6 +53,10 @@ public class LiveRecognitionService extends ArtService {
|
|
|
@Autowired
|
|
|
private StdMaterialDao stdMaterialDao;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private EnrolStdResDao stdResDao;
|
|
|
+
|
|
|
+
|
|
|
@Transactional
|
|
|
public DetectInfoResult saveDetectResult(String bizToken, String result) {
|
|
|
log.info("[saveDetectResult] bizToken:{},result:{}", bizToken, result);
|
|
@@ -110,10 +117,14 @@ public class LiveRecognitionService extends ArtService {
|
|
|
}
|
|
|
|
|
|
// 保存考生照片
|
|
|
+ StdReg reg = stdRegDao.findByStdId(txStdLiveLog.getStd_id());
|
|
|
+ if (reg == null) {
|
|
|
+ log.error("[saveDetectResult] std_id:{} 找不到考生", txStdLiveLog.getStd_id());
|
|
|
+ throw new BusinessException(Constants.SYSTEM_BUSY);
|
|
|
+ }
|
|
|
try {
|
|
|
DetectInfoBestFrame bestFrame = detectInfoBean.getBestFrame();
|
|
|
if (bestFrame != null && StringHelper.isNotEmpty(bestFrame.getBestFrame())) {
|
|
|
- StdReg reg = stdRegDao.findByStdId(txStdLiveLog.getStd_id());
|
|
|
String rootPath = EnrolMaterialHelper.getEnrolMaterialLocalPath();
|
|
|
// 文件名称
|
|
|
String fileName = EnrolMaterialHelper.generateMaterialName(StdMaterialType.NoCrownPhoto, reg.getCert_id()) + Constants.PHOTO_SUFFIX;
|
|
@@ -161,10 +172,11 @@ public class LiveRecognitionService extends ArtService {
|
|
|
|
|
|
//更新考生表中的头像和状态
|
|
|
reg.setStd_image(fileName);
|
|
|
- reg.setReg_status(StdRegStatus.NoCrownPhoto);
|
|
|
+ // 识别通过
|
|
|
if (detectInfoResult.getResult().equals("1")) {
|
|
|
+ reg.setReg_status(StdRegStatus.NoCrownPhoto);
|
|
|
reg.setStd_verify_flag(FrameStatus.Active.toString());
|
|
|
- } else {
|
|
|
+ } else { // 识别不通过
|
|
|
reg.setStd_verify_flag(FrameStatus.InActive.toString());
|
|
|
}
|
|
|
stdRegDao.update(reg);
|
|
@@ -175,19 +187,38 @@ public class LiveRecognitionService extends ArtService {
|
|
|
log.warn("[saveDetectResult] 保存图片失败,{}", e.getMessage());
|
|
|
}
|
|
|
|
|
|
+ //保存日志
|
|
|
+ StdRes res = stdResDao.findRes(txStdLiveLog.getStd_id(), StdResType.LIVE.toString());
|
|
|
+ // 第一次请求,写入
|
|
|
+ if (res == null) {
|
|
|
+ StdRes stdRes = new StdRes();
|
|
|
+ stdRes.setWeixin_id(reg.getWeixin_id());
|
|
|
+ stdRes.setStd_id(txStdLiveLog.getStd_id());
|
|
|
+ stdRes.setRes_type(StdResType.LIVE.toString());
|
|
|
+ stdRes.setRes_date(LocalDate.now());
|
|
|
+ stdRes.setRes_number(1);
|
|
|
+ stdResDao.insert(stdRes);
|
|
|
+ }
|
|
|
+ // 更新日期
|
|
|
+ if(res != null && (res.getRes_date() == null || !res.getRes_date().equals(LocalDate.now()))) {
|
|
|
+ res.setRes_date(LocalDate.now());
|
|
|
+ res.setRes_number(1);
|
|
|
+ stdResDao.update(res);
|
|
|
+ }
|
|
|
+ // 请求次数+1
|
|
|
+ if (res != null && res.getRes_date() != null && res.getRes_date().equals(LocalDate.now())) {
|
|
|
+ res.setRes_date(LocalDate.now());
|
|
|
+ res.setRes_number(res.getRes_number() + 1);
|
|
|
+ stdResDao.update(res);
|
|
|
+ }
|
|
|
+
|
|
|
//保存视频数据(暂不保存)
|
|
|
}
|
|
|
|
|
|
return detectInfoResult;
|
|
|
}
|
|
|
|
|
|
- public void saveDetectAuth(DetectAuthBean bean, DetectAuthVO detectAuthVO) {
|
|
|
- StdReg stdReg = stdRegDao.findStdRegByCertAndName(detectAuthVO.getCertId(), detectAuthVO.getStdName());
|
|
|
- if (stdReg == null) {
|
|
|
- log.warn("[saveDetectAuth] 考生信息不存在,std_name:{}, cert_id:{}", detectAuthVO.getStdName(), detectAuthVO.getCertId());
|
|
|
- throw new BusinessException("考生信息不存在");
|
|
|
- }
|
|
|
-
|
|
|
+ public void saveDetectAuth(StdReg stdReg, DetectAuthBean bean, DetectAuthVO detectAuthVO) {
|
|
|
//保存token
|
|
|
TxStdLiveLog log = new TxStdLiveLog();
|
|
|
log.setBiz_token(bean.getBizToken());
|
|
@@ -196,4 +227,21 @@ public class LiveRecognitionService extends ArtService {
|
|
|
log.setPull_flag(Constants.FALSE_FLAG);
|
|
|
txStdLiveLogDao.insert(log);
|
|
|
}
|
|
|
+
|
|
|
+ public StdReg findStdRegByCertAndName(DetectAuthVO detectAuthVO) {
|
|
|
+ StdReg stdReg = stdRegDao.findStdRegByCertAndName(detectAuthVO.getCertId(), detectAuthVO.getStdName());
|
|
|
+ if (stdReg == null) {
|
|
|
+ log.warn("[findStdRegByCertAndName] 考生信息不存在,std_name:{}, cert_id:{}", detectAuthVO.getStdName(), detectAuthVO.getCertId());
|
|
|
+ throw new BusinessException("考生信息不存在");
|
|
|
+ }
|
|
|
+ // 当天活体识别最大次数
|
|
|
+ String max = CollectionHelper.getParamValue(ArtParamHelper.GobalParamMap, "EnrolNoCrownPhotoNumber", "3");
|
|
|
+ StdRes res = stdResDao.findRes(stdReg.getStd_id(), StdResType.LIVE.toString());
|
|
|
+ if (res != null && res.getRes_number() != null && res.getRes_date() != null && res.getRes_date().isEqual(LocalDate.now())
|
|
|
+ && res.getRes_number() >= Integer.parseInt(max)) {
|
|
|
+ log.warn("[findStdRegByCertAndName] 活体识别次数超限,std_id: {}", stdReg.getStd_id());
|
|
|
+ throw new BusinessException("该微信号本日使用活体识别次数超限,请明日再试!");
|
|
|
+ }
|
|
|
+ return stdReg;
|
|
|
+ }
|
|
|
}
|