//package com.qnfhq.modules.authentication.controller;
//
//import cn.hutool.json.JSONUtil;
//import com.aliyun.cloudauth_intl20220809.models.CheckResultResponse;
//import com.aliyun.cloudauth_intl20220809.models.CheckResultResponseBody;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
//import com.table.authentication.entity.UserAuthentication;
//import com.table.authentication.service.UserAuthenticationService;
//import com.table.authentication.util.AliyunEkycUtil;
//import com.table.bussiness.domain.TAppUserDetail;
//import com.table.bussiness.service.FileService;
//import com.table.bussiness.service.ITAppUserDetailService;
//import com.table.common.core.domain.Result;
//import com.table.common.core.redis.RedisCache;
//import com.table.common.utils.MessageUtils;
//import com.table.common.utils.StringUtils;
//import com.table.common.utils.uuid.IdUtils;
//import com.table.util.ByteArrayMultipartFile;
//import com.table.web.controller.common.ApiBaseController;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiOperation;
//import org.apache.commons.codec.binary.Base64;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//import org.springframework.web.multipart.MultipartFile;
//
//import javax.annotation.Resource;
//
//
//@Api(tags = "认证请求响应记录表模块")
//@RestController
//@RequestMapping("/api/ekyc")
//public class UserEkycCallbackController extends ApiBaseController {
//    // redis缓存
//    @Resource
//    private RedisCache redisCache;
//
//    // 阿里云 人脸识别
//    @Resource
//    private AliyunEkycUtil aliyunEkycUtil;
//
//    @Autowired
//    private FileService fileService;
//
//    @Resource
//    UserAuthenticationService userAuthenticationService;
//    @Resource
//    private ITAppUserDetailService tAppUserDetailService;
//
//
//
//    /**
//     * 实名认证回调函数
//     * https://www.aliyun.com?callbackToken=100000****&transactionId=shaxxxx&passed=Y&subCode=200
//     * @param callbackToken
//     * @param transactionId
//     * @return
//     */
//    @ApiOperation(value = "验证实名认证")
//    @GetMapping("/callback")
//    public Result checkID(String callbackToken, String transactionId){
//        String keyCache = StringUtils.format("api-userauther-callback:{}", callbackToken);
//        String userId = redisCache.getCacheObject(keyCache);
//        if(StringUtils.isNull(userId)) {
//            return error(MessageUtils.message("login.param.null"));
//        }
//        UserAuthentication one = userAuthenticationService.getOne(
//                new LambdaQueryWrapper<UserAuthentication>()
//                        .eq(UserAuthentication::getTransactionId, transactionId));
//        if (one != null) {
//            redisCache.deleteObject(keyCache);
//            return error(MessageUtils.message("user.kyc.completed"));
//        }
//        //获取会员情况
//        TAppUserDetail detail = tAppUserDetailService.getOne(
//                new LambdaQueryWrapper<TAppUserDetail>()
//                        .eq(TAppUserDetail::getUserId, userId));
//        //如果账户已认证且已经有了身份证和头部照片,则认定为已认证
//        if (detail != null &&
//                "1".equals(detail.getAuditStatusPrimary()) &&
//                StringUtils.isNotBlank(detail.getFrontUrl()) &&
//                StringUtils.isNotBlank(detail.getHandelUrl())) {
//            redisCache.deleteObject(keyCache);
//            return error(MessageUtils.message("user.kyc.already_completed"));
//        }
//        try {
//            CheckResultResponse checkResultResponse = aliyunEkycUtil.checkResult(transactionId);
//            UserAuthentication userAuthentication = new UserAuthentication();
//            userAuthentication.setHttpStatusCode(checkResultResponse.getStatusCode());
//            if (200 == checkResultResponse.getStatusCode()) {
//                CheckResultResponseBody body = checkResultResponse.getBody();
//                userAuthentication.setRequestId(body.getRequestId());
//                userAuthentication.setCode(body.getCode());
//                userAuthentication.setMessage(body.getMessage());
//                userAuthentication.setResultPassed(body.getResult().getPassed());
//                userAuthentication.setResultSubCode(body.getResult().getSubCode());
//                userAuthentication.setUserId(Long.valueOf(userId));
//                userAuthenticationService.save(userAuthentication);
//
//                Object idImage = JSONUtil.parseObj(body.getResult().getExtIdInfo()).get("idImage");
//                Object faceImg = JSONUtil.parseObj(body.getResult().getExtFaceInfo()).get("faceImg");
//
//                byte[] idImageBytes = Base64.decodeBase64(String.valueOf(idImage));
//                byte[] faceImgBytes = Base64.decodeBase64(String.valueOf(faceImg));
//
//                String idImageFileName = IdUtils.simpleUUID() + ".png";
//                MultipartFile multipartFile = new ByteArrayMultipartFile(idImageBytes, idImageFileName, "image");
//                String frontUrlOssUrl = fileService.uploadFileOSS(multipartFile, idImageFileName);
//
//                String faceImgFileName = IdUtils.simpleUUID() + ".png";
//                MultipartFile faceImgMultipartFile = new ByteArrayMultipartFile(faceImgBytes, faceImgFileName, "image");
//                String faceImgOssUrl = fileService.uploadFileOSS(faceImgMultipartFile, faceImgFileName);
//
//
//                //更新实名认证
//                if(body.result.getPassed().equals("Y")) {
//                    LambdaUpdateWrapper<TAppUserDetail> updateWrapper = new LambdaUpdateWrapper<>();
//                    updateWrapper.eq(TAppUserDetail::getUserId, userId)
//                            .set(TAppUserDetail::getAuditStatusPrimary, 1)
//                            .set(TAppUserDetail::getAuditStatusAdvanced, 1)
//                            .set(TAppUserDetail::getFrontUrl, frontUrlOssUrl)
//                            .set(TAppUserDetail::getHandelUrl, faceImgOssUrl);
//                    tAppUserDetailService.update(updateWrapper);
//                    redisCache.deleteObject(keyCache);
//                    return success(userAuthentication.getResultPassed());
//                } else {
//                    LambdaUpdateWrapper<TAppUserDetail> updateWrapper = new LambdaUpdateWrapper<>();
//                    updateWrapper.eq(TAppUserDetail::getUserId, userId)
//                            .set(TAppUserDetail::getAuditStatusPrimary, -1)
//                            .set(TAppUserDetail::getFrontUrl, frontUrlOssUrl)
//                            .set(TAppUserDetail::getHandelUrl, faceImgOssUrl)
//                            .set(TAppUserDetail::getRealName, body.result.getSubCode());
//                    tAppUserDetailService.update(updateWrapper);
//                    redisCache.deleteObject(keyCache);
//                    return error(userAuthentication.getMessage());
//                }
//            }
//            redisCache.deleteObject(keyCache);
//            return error(checkResultResponse.getBody().message);
//        } catch (Exception e) {
//            redisCache.deleteObject(keyCache);
//            return error(e.getMessage());
//        }
//    }
//}
