package com.panzhihua.service_community.api; import static com.panzhihua.common.enums.IdentityAuthMethodEnum.FACE_AUTH; import static com.panzhihua.common.enums.IdentityAuthTypeEnum.ELDER_AUTH; import static com.panzhihua.common.enums.IdentityAuthTypeEnum.PENSION_AUTH; import static java.util.Objects.nonNull; import static org.apache.commons.lang3.StringUtils.isBlank; import javax.annotation.Resource; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.panzhihua.common.model.dtos.community.AddIdentityAuthDTO; import com.panzhihua.common.model.dtos.community.GetIdentityEidTokenDTO; import com.panzhihua.common.model.dtos.community.PageIdentityAuthRecordDTO; import com.panzhihua.common.model.helper.AESUtil; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.SysConfVO; import com.panzhihua.common.utlis.TencentUtils; import com.panzhihua.service_community.dao.ComElderAuthElderliesDAO; import com.panzhihua.service_community.dao.ComPensionAuthPensionerDAO; import com.panzhihua.service_community.dao.SysConfMapper; import com.panzhihua.service_community.model.dos.ComElderAuthElderliesDO; import com.panzhihua.service_community.model.dos.ComPensionAuthPensionerDO; import com.panzhihua.service_community.model.dos.SysConfDO; import com.panzhihua.service_community.service.ComElderAuthRecordsService; import com.panzhihua.service_community.service.ComPensionAuthRecordService; import lombok.extern.slf4j.Slf4j; /** * @title: IdentityAuthApi * @projectName: 成都呐喊信息技术有限公司-智慧社区项目 * @description: 身份认证相关api * @author: hans * @date: 2021/09/01 18:06 */ @Slf4j @RestController @RequestMapping("/identity-auth") public class IdentityAuthApi { private static final String ELDER_AUTH_TYPE_PREFIX = "ELDER_AUTH_TYPE_"; private static final String PENSION_AUTH_TYPE_PREFIX = "PENSION_AUTH_TYPE_"; @Resource private ComElderAuthRecordsService comElderAuthRecordsService; @Resource private ComPensionAuthRecordService comPensionAuthRecordService; @Resource private SysConfMapper sysConfDao; @Resource private ComElderAuthElderliesDAO comElderAuthElderliesDAO; @Resource private ComPensionAuthPensionerDAO comPensionAuthPensionerDAO; @Value("${domain.aesKey:}") private String aesKey; /** * 新增身份认证 * @param addIdentityAuthDTO 新增身份认证请求参数 * @return 新增结果 */ @PostMapping("/add") public R addIdentityAuth(@RequestBody AddIdentityAuthDTO addIdentityAuthDTO) { String eidToken = addIdentityAuthDTO.getEidToken(); boolean isEidTokenBlank = isBlank(eidToken); if (!Boolean.logicalXor(isEidTokenBlank, isBlank(addIdentityAuthDTO.getAuthVideo()))) { return R.fail("缺少认证参数"); } if (!isEidTokenBlank) { String result = TencentUtils.getEidResult(eidToken); JSONObject object = JSON.parseObject(result); if (object == null) { return R.fail("人脸信息与所填信息不符,请检查所填写信息"); } JSONObject textObject = object.getJSONObject("Text"); String code = textObject.getString("ErrCode"); if (!code.equals("0")) { log.error("人脸核验失败,错误原因:" + textObject.toJSONString()); return R.fail("人脸信息与所填信息不符,请检查所填写信息"); } addIdentityAuthDTO.setAuthMethod(FACE_AUTH.getMethod()); addIdentityAuthDTO.setVerificationResult(object.toJSONString()); } int authType = addIdentityAuthDTO.getAuthType().intValue(); if (authType == ELDER_AUTH.getType()) { return comElderAuthRecordsService.addElderAuth(addIdentityAuthDTO); } else if (authType == PENSION_AUTH.getType()) { return comPensionAuthRecordService.addPensionAuth(addIdentityAuthDTO); } else { return R.fail("请核对需要认证的类型"); } } /** * 分页查询身份认证记录 * @param pageIdentityAuthRecordDTO 分页查询身份认证记录参数 * @return 身份认证记录列表 */ @PostMapping("/record/page") public R queryRecordWithPage(@RequestBody PageIdentityAuthRecordDTO pageIdentityAuthRecordDTO) { int authType = pageIdentityAuthRecordDTO.getAuthType().intValue(); if (authType == ELDER_AUTH.getType()) { return comElderAuthRecordsService.queryRecordWithPage(pageIdentityAuthRecordDTO); } else if (authType == PENSION_AUTH.getType()) { return comPensionAuthRecordService.queryRecordWithPage(pageIdentityAuthRecordDTO); } else { return R.fail("请核对需要查询的身份认证类型"); } } /** * 获取身份认证详情 * @param authType 认证类型 * @param identityAuthId 认证id * @return 认证记录详情 */ @GetMapping("/detail") public R retrieveIdentityAuthDetail(@RequestParam("authType") Integer authType, @RequestParam("identityAuthId") Long identityAuthId) { if (authType.intValue() == ELDER_AUTH.getType()) { return comElderAuthRecordsService.retrieveElderAuthDetail(identityAuthId); } else if (authType.intValue() == PENSION_AUTH.getType()) { return comPensionAuthRecordService.retrievePensionAuthDetail(identityAuthId); } else { return R.fail("请核对认证类型"); } } /** * 获取身份认证方式 * @param communityId * @param identityAuthType * @return 认证方式 */ @GetMapping("/mode") public R getIdentityAuthMode(@RequestParam(value = "communityId") Long communityId, @RequestParam(value = "identityAuthType") Integer identityAuthType) { String identityCode; if (identityAuthType.intValue() == ELDER_AUTH.getType()) { //高龄认证 identityCode = ELDER_AUTH_TYPE_PREFIX + communityId; } else if (identityAuthType.intValue() == PENSION_AUTH.getType()) { //养老认证 identityCode = PENSION_AUTH_TYPE_PREFIX + communityId; } else { return R.fail("身份认证类型错误"); } SysConfDO sysConfDO = sysConfDao.selectOne(new QueryWrapper() .lambda().eq(SysConfDO::getCode, identityCode).eq(SysConfDO::getCommunityId, communityId)); if (nonNull(sysConfDO)) { SysConfVO sysConfVO = new SysConfVO(); BeanUtils.copyProperties(sysConfDO, sysConfVO); return R.ok(sysConfVO.getValue()); } return R.fail("获取失败!"); } /** * 获取身份认证人脸核验token * @param getIdentityEidTokenDTO * @return token */ @PostMapping("/getEidToken") public R getEidToken(@RequestBody GetIdentityEidTokenDTO getIdentityEidTokenDTO) { int isExist; String idCard; try { idCard = AESUtil.encrypt128(getIdentityEidTokenDTO.getIdCard(), aesKey); } catch (Exception e) { e.printStackTrace(); log.error("加密失败【{}】", e.getMessage()); return R.fail("认证失败,请重新尝试"); } if (getIdentityEidTokenDTO.getAuthType().intValue() == ELDER_AUTH.getType()) { //高龄认证 isExist = comElderAuthElderliesDAO.selectCount(new QueryWrapper() .lambda().eq(ComElderAuthElderliesDO::getName, getIdentityEidTokenDTO.getName()) .eq(ComElderAuthElderliesDO::getIdCard, idCard)); } else if (getIdentityEidTokenDTO.getAuthType().intValue() == PENSION_AUTH.getType()) { //养老认证 isExist = comPensionAuthPensionerDAO.selectCount(new QueryWrapper() .lambda().eq(ComPensionAuthPensionerDO::getName, getIdentityEidTokenDTO.getName()) .eq(ComPensionAuthPensionerDO::getIdCard, idCard)); } else { return R.fail("请核对身份认证类型"); } if (isExist <= 0) { return R.fail("该人员未在社区报道无法认证"); } // 获取EidToken return R.ok(TencentUtils.getEidToken(getIdentityEidTokenDTO.getName(), getIdentityEidTokenDTO.getIdCard())); } }