package com.liquidnet.service.galaxy.router.zxin.biz;

import com.liquidnet.common.third.zxlnft.biz.ZxlnftBiz;
import com.liquidnet.common.third.zxlnft.config.ZxlnftConfig;
import com.liquidnet.common.third.zxlnft.constant.ZxlErrorEnum;
import com.liquidnet.common.third.zxlnft.constant.ZxlnftEnum;
import com.liquidnet.common.third.zxlnft.dto.*;
import com.liquidnet.common.third.zxlnft.dto.wallet.UploadToCosReq;
import com.liquidnet.common.third.zxlnft.dto.wallet.UploadToCosResp;
import com.liquidnet.common.third.zxlnft.exception.ZxlNftException;
import com.liquidnet.common.third.zxlnft.util.ZxlWalletSdkUtil;
import com.liquidnet.common.third.zxlnft.util.ZxlnftSdkUtil;
import com.liquidnet.commons.lang.util.BeanUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.galaxy.biz.GalaxyCommonBiz;
import com.liquidnet.service.galaxy.biz.GalaxyEnumBiz;
import com.liquidnet.service.galaxy.constant.GalaxyConstant;
import com.liquidnet.service.galaxy.constant.GalaxyEnum;
import com.liquidnet.service.galaxy.constant.GalaxyErrorEnum;
import com.liquidnet.service.galaxy.dto.bo.GalaxySeriesInfoBo;
import com.liquidnet.service.galaxy.dto.bo.GalaxySeriesNftInfoBo;
import com.liquidnet.service.galaxy.dto.bo.GalaxySeriesNftUploadBo;
import com.liquidnet.service.galaxy.dto.param.*;
import com.liquidnet.service.galaxy.utils.DataUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.File;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;

/**
 * @author AnJiabin <anjiabin@zhengzai.tv>
 * @version V1.0
 * @Description: TODO
 * @class: ZxinArtworkBiz
 * @Package com.liquidnet.service.galaxy.router.zxin.biz
 * @Copyright: LightNet @ Copyright (c) 2021
 * @date 2022/3/15 13:04
 */
@Slf4j
@Component
public class ZxinArtworkBiz {
    @Autowired
    private ZxlnftSdkUtil zxlnftSdkUtil;

    @Autowired
    private ZxlWalletSdkUtil zxlWalletSdkUtil;

    @Autowired
    private ZxlnftBiz zxlnftBiz;

    @Autowired
    private ZxlnftConfig zxlnftConfig;

    @Autowired
    private DataUtils dataUtils;

    @Autowired
    private GalaxyCommonBiz galaxyCommonBiz;

    public ResponseDto<GalaxyNftImageRespDto> nftImageCheck(GalaxyNftImageReqDto reqDto) {
        Nft008QueryImageModerationReqDto nft008ReqDto = Nft008QueryImageModerationReqDto.getNew();
        nft008ReqDto.setImageUrl(reqDto.getNftOriginalUrl());
        ZxlnftResponseDto<Nft008QueryImageModerationRespDto> nft008RespDto = zxlnftSdkUtil.nft008QueryImageModeration(nft008ReqDto);
        if(!nft008RespDto.isSuccess()){
            throw new ZxlNftException(ZxlErrorEnum.IMAGE_CHECK_ERROR.getCode(),ZxlErrorEnum.IMAGE_CHECK_ERROR.getMsg());
        }
        GalaxyNftImageRespDto nftImageRespDto = GalaxyNftImageRespDto.getNew();
        BeanUtil.copy(nft008RespDto.getData(),nftImageRespDto);
        return ResponseDto.success(nftImageRespDto);
    }



    public ResponseDto<GalaxyNftUploadRespDto> nftUpload(GalaxyNftUploadReqDto reqDto) {
        /**
         * 系列缓存初始化
         */

        //获取任务ID
        GalaxySeriesNftUploadBo seriesNftUploadBo = dataUtils.getSeriesNftUploadBo(reqDto.getRouterType(),reqDto.getSkuId());
        if(StringUtil.isNotNull(seriesNftUploadBo)){
            return ResponseDto.failure("素材已经上传过！");
        }

        String originalNftUrl = reqDto.getOriginalNftUrl();
        String originalDisplayUrl = reqDto.getOriginalDisplayUrl();
        //上传系列名只用来目录区分
        String seriesName = GalaxyConstant.SERIES_NAME_PREFIX + reqDto.getSkuId(); //素材存储目录

        //返回素材上传结果
        GalaxyNftUploadRespDto galaxyNftUploadRespDto = GalaxyNftUploadRespDto.getNew();
        try {
            galaxyNftUploadRespDto.setSkuId(reqDto.getSkuId());
            galaxyNftUploadRespDto.setNftUrl(this.getFullFilePath(seriesName,originalNftUrl));
            galaxyNftUploadRespDto.setOriginalNftUrl(reqDto.getOriginalNftUrl());
            galaxyNftUploadRespDto.setDisplayUrl(this.getFullFilePath(seriesName,originalDisplayUrl));
            galaxyNftUploadRespDto.setOriginalDisplayUrl(reqDto.getOriginalDisplayUrl());
        } catch(ZxlNftException e){
            log.error(e.getMessage());
            return ResponseDto.failure(e.getCode(),e.getMessage());
        }catch (Exception e) {
            log.error(e.getMessage());
            return ResponseDto.failure(e.getMessage());
        }

        seriesNftUploadBo = GalaxySeriesNftUploadBo.getNew();
        seriesNftUploadBo.setSkuId(reqDto.getSkuId());
        seriesNftUploadBo.setOriginalNftUrl(originalNftUrl);
        seriesNftUploadBo.setOriginalDisplayUrl(originalDisplayUrl);
        seriesNftUploadBo.setNftUrl(galaxyNftUploadRespDto.getNftUrl());
        seriesNftUploadBo.setDisplayUrl(galaxyNftUploadRespDto.getDisplayUrl());
        dataUtils.setSeriesNftUploadBo(reqDto.getRouterType(),reqDto.getSkuId(),seriesNftUploadBo);

        return ResponseDto.success(galaxyNftUploadRespDto);

//        1.4.4调用查询素材地址接口 -- 非必需
//        Nft021UploadUrlReqDto nft021ReqDto = Nft021UploadUrlReqDto.getNew();
//        nft021ReqDto.setSeriesName(seriesName);
//        nft021ReqDto.setPlatformIdentification(zxlnftConfig.getPlatformIdentification());
//        //如果上传人就是平台管理员，以下需要注释掉，因为会导致返回的地址多了一级目录
////        nft021ReqDto.setUserIdentification(zxlnftConfig.getPlatformIdentification());
//        ZxlnftResponseDto<Nft021UploadUrlRespDto> resp = zxlnftSdkUtil.nft021UploadUrl(nft021ReqDto);
    }

    public ResponseDto<GalaxyArtSeriesClaimRespDto> seriesClaim(GalaxyArtSeriesClaimReqDto reqDto) {
        //系列声明用到参数
        String skuId = reqDto.getSkuId();
        //以下系列名称可以用spu名称代替
        String seriesName = GalaxyConstant.SERIES_NAME_PREFIX.concat(skuId);
        String seriesCode = GalaxyConstant.SERIES_NAME_PREFIX.concat(skuId);

        Long totalCount = reqDto.getTotalCount();
        String coverUrl = reqDto.getCoverUrl();//暂时用nftUrl
        String seriesDesc = reqDto.getSeriesDesc();
        //发行用到的相关信息
//        String author = reqDto.getAuthor();
//        String nftName = reqDto.getNftName();
//        String nftUrl = reqDto.getNftUrl();
//        String displayUrl = reqDto.getDisplayUrl();
//        String nftDesc = reqDto.getNftDesc();
//        String nftFlag = reqDto.getNftFlag();
//        String sellCount = reqDto.getSellCount();

        //根据skuId获取原始上传信息
        GalaxySeriesNftUploadBo seriesNftUploadBo = dataUtils.getSeriesNftUploadBo(reqDto.getRouterType(),reqDto.getSkuId());
        if(StringUtil.isNull(seriesNftUploadBo)){
            return ResponseDto.failure(GalaxyErrorEnum.SERIES_CLAIM_NOT_EXIST.getCode(),GalaxyErrorEnum.SERIES_CLAIM_NOT_EXIST.getMessage());
        }

        //目前一个系列上传一个nft
        GalaxySeriesInfoBo seriesInfoBo = dataUtils.getSeriesInfoBo(reqDto.getRouterType(),seriesCode);
        if(StringUtil.isNotNull(seriesInfoBo)){
            /**
             * 如果系列声明成功，则不允许继续声明
             */
            if(seriesInfoBo.getSeriesClaimStatus().equalsIgnoreCase(GalaxyEnum.SeriesClaimStatusEnum.PROCESSING.getCode())){
                return ResponseDto.failure(GalaxyErrorEnum.SERIES_CLAIM_PROCESSING.getCode(),GalaxyErrorEnum.SERIES_CLAIM_PROCESSING.getMessage());
            }else if(seriesInfoBo.getSeriesClaimStatus().equalsIgnoreCase(GalaxyEnum.SeriesClaimStatusEnum.SUCCESS.getCode())){
                return ResponseDto.failure(GalaxyErrorEnum.SERIES_CLAIM_SUCCESSED.getCode(),GalaxyErrorEnum.SERIES_CLAIM_SUCCESSED.getMessage());
            }
        }


        /**
         * 进行系列声明
         */
        Nft030SeriesClaimReqDto nft030ReqDto = Nft030SeriesClaimReqDto.getNew();
        nft030ReqDto.setPubKey(zxlnftConfig.getNftPlatformPubKey());
        nft030ReqDto.setSeriesName(seriesName);
        //无限制系列 设置为0
        nft030ReqDto.setTotalCount(totalCount);
        nft030ReqDto.setOperateId(IDGenerator.get32UUID());
        //系列封面
        nft030ReqDto.setCoverUrl(coverUrl);
        nft030ReqDto.setDesc(seriesDesc);
        nft030ReqDto.setMaxPublishCount(0);
        nft030ReqDto.setSeriesBeginFromZero(false);
        ZxlnftResponseDto<Nft030SeriesClaimRespDto> nft30RespDto = zxlnftSdkUtil.nft030SeriesClaim(nft030ReqDto);

        //返回参数
        String seriesId = null;
        String taskId = null;

        GalaxyArtSeriesClaimRespDto seriesClaimRespDto = GalaxyArtSeriesClaimRespDto.getNew();
        if(nft30RespDto.isSuccess()){
            //第零个系列 无限制系列
            taskId = nft30RespDto.getData().getTaskId();
            //构造缓存数据
            if(StringUtil.isNull(seriesInfoBo)){
                //
                String publishStatus = GalaxyEnum.SeriesClaimStatusEnum.PROCESSING.getCode();
                //设置系列声明状态
                seriesClaimRespDto.setSeriesClaimStatus(publishStatus);

                //构造系列信息
                seriesInfoBo = this.buildSeriesInfoBo(reqDto,taskId,publishStatus);
                //等一个系列支持多个藏品后需要从请求参数获取
                seriesInfoBo.setSeriesName(seriesName);
                seriesInfoBo.setSeriesCode(seriesCode);
                dataUtils.setSeriesInfoBo(reqDto.getRouterType(),seriesCode,seriesInfoBo);

                //构造系列nft信息
                GalaxySeriesNftInfoBo seriesNftInfoBo = this.buildSeriesNftInfoBo(reqDto,seriesInfoBo,seriesNftUploadBo);
                dataUtils.setSeriesNftInfoBo(reqDto.getRouterType(),reqDto.getSkuId(),seriesInfoBo,seriesNftInfoBo);
            }
        }else{
            return ResponseDto.failure(GalaxyErrorEnum.SERIES_CLAIM_ERROR.getCode(),GalaxyErrorEnum.SERIES_CLAIM_ERROR.getMessage());
        }

        seriesClaimRespDto.setSkuId(skuId);
        seriesClaimRespDto.setNftUrl(seriesNftUploadBo.getNftUrl());
        seriesClaimRespDto.setDisplayUrl(seriesNftUploadBo.getDisplayUrl());
        seriesClaimRespDto.setSeriesId(seriesId);
        seriesClaimRespDto.setSeriesName(seriesName);

        return ResponseDto.success(seriesClaimRespDto);
    }


    public ResponseDto<GalaxyArtSeriesClaimRespDto> seriesClaimBackup(GalaxyArtSeriesClaimReqDto reqDto) {
        //系列声明用到参数
        String skuId = reqDto.getSkuId();
        String seriesName = GalaxyConstant.SERIES_NAME_PREFIX.concat(skuId);
        Long totalCount = reqDto.getTotalCount();
        String coverUrl = reqDto.getCoverUrl();//暂时用nftUrl
        String seriesDesc = reqDto.getSeriesDesc();
        //发行用到的相关信息
        String author = reqDto.getAuthor();
        String nftName = reqDto.getNftName();
        String nftUrl = reqDto.getNftUrl();
        String displayUrl = reqDto.getDisplayUrl();
        String nftDesc = reqDto.getNftDesc();
        String nftFlag = reqDto.getNftFlag();
        String sellCount = reqDto.getSellCount();


        //返回参数
        String seriesId = null;
        String taskId = null;
        GalaxySeriesInfoBo seriesInfoBo = dataUtils.getSeriesInfoBo(reqDto.getRouterType(),reqDto.getSkuId());
        if(StringUtil.isNotNull(seriesInfoBo)){
            /**
             * 如果系列声明成功，则不允许继续声明
             */
            if(seriesInfoBo.getSeriesClaimStatus().equalsIgnoreCase(GalaxyEnum.SeriesClaimStatusEnum.SUCCESS.getCode())){
                GalaxyArtSeriesClaimRespDto seriesClaimRespDto = GalaxyArtSeriesClaimRespDto.getNew();
                seriesClaimRespDto.setSkuId(skuId);
                seriesClaimRespDto.setNftUrl(nftUrl);
                seriesClaimRespDto.setSeriesId(seriesInfoBo.getSeriesId());
                seriesClaimRespDto.setSeriesName(seriesInfoBo.getSeriesName());
                return ResponseDto.success(seriesClaimRespDto);
            }
        }
        /**
         * 进行系列声明
         */
        Nft030SeriesClaimReqDto nft030ReqDto = Nft030SeriesClaimReqDto.getNew();
        nft030ReqDto.setPubKey(zxlnftConfig.getNftPlatformPubKey());
        nft030ReqDto.setSeriesName(seriesName);
        //无限制系列 设置为0
        nft030ReqDto.setTotalCount(totalCount);
        nft030ReqDto.setOperateId(IDGenerator.get32UUID());
        //系列封面
        nft030ReqDto.setCoverUrl(coverUrl);
        nft030ReqDto.setDesc(seriesDesc);
        nft030ReqDto.setMaxPublishCount(0);
        nft030ReqDto.setSeriesBeginFromZero(false);
        ZxlnftResponseDto<Nft030SeriesClaimRespDto> nft30RespDto = zxlnftSdkUtil.nft030SeriesClaim(nft030ReqDto);

        //{"taskId":"49d1cccc-e62c-40bc-923c-bfac31325351_nft-series-claim_1"}
        if(nft30RespDto.isSuccess()){
            //系列声明结果查询
            Nft031SeriesClaimResultReqDto nft031ReqDto = Nft031SeriesClaimResultReqDto.getNew();
            //第零个系列 无限制系列
            taskId = nft30RespDto.getData().getTaskId();
            nft031ReqDto.setTaskId(taskId);

            int count  = 0;
            while(StringUtil.isEmpty(seriesId)){
                //休眠1秒钟，等待执行结果
                try {
                    Thread.sleep(1000l);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                count++;
                log.info("=======执行第{}次查询,taskId:{}",count,nft031ReqDto.getTaskId());
                ZxlnftResponseDto<Nft031SeriesClaimResultRespDto> nft031RespDtoTemp = zxlnftSdkUtil.nft031SeriesClaimResult(nft031ReqDto);
                if(nft031RespDtoTemp.getData().getTaskStatus().toString().equals(ZxlnftEnum.TaskStatusEnum.TASK_SUCCESS.getCode())){
                    seriesId = nft031RespDtoTemp.getData().getSeriesId();
                    break;
                }else if(nft031RespDtoTemp.getData().getTaskStatus().toString().equals(ZxlnftEnum.TaskStatusEnum.TASK_FAIL.getCode())){
                    log.info("任务执行失败！taskId:{}",nft031ReqDto.getTaskId());
                    return ResponseDto.failure(GalaxyErrorEnum.SERIES_CLAIM_ERROR.getCode(), GalaxyErrorEnum.SERIES_CLAIM_ERROR.getMessage());
                }
                if(count==5){
                    log.info("=======查询共5次，跳出循环！taskId:{}",nft031ReqDto.getTaskId());
                    return ResponseDto.failure(GalaxyErrorEnum.SERIES_CLAIM_ERROR_FIVE_TIMES.getCode(), GalaxyErrorEnum.SERIES_CLAIM_ERROR_FIVE_TIMES.getMessage());
                }
            }

            log.info("系列声明结果查询 seriesId :{}",seriesId);
        }

        GalaxyArtSeriesClaimRespDto seriesClaimRespDto = GalaxyArtSeriesClaimRespDto.getNew();
        seriesClaimRespDto.setSkuId(skuId);
        seriesClaimRespDto.setNftUrl(nftUrl);
        seriesClaimRespDto.setSeriesId(seriesId);
        seriesClaimRespDto.setSeriesName(seriesName);

        //构造缓存数据
        if(seriesInfoBo==null){
            //设置为处理中
            String publishStatus = GalaxyEnum.SeriesClaimStatusEnum.PROCESSING.getCode();
            seriesInfoBo = this.buildSeriesInfoBo(reqDto,null,publishStatus);
            dataUtils.setSeriesInfoBo(reqDto.getRouterType(),reqDto.getSkuId(),seriesInfoBo);
        }
        return ResponseDto.success(seriesClaimRespDto);
    }

    public ResponseDto<GalaxyArtSeriesClaimResultQueryRespDto> seriesClaimResultQuery(GalaxyArtSeriesClaimResultQueryReqDto reqDto) {
        //根据skuId获取系列nft信息
        GalaxySeriesNftInfoBo seriesNftInfoBo = dataUtils.getSeriesNftInfoBo(reqDto.getRouterType(),reqDto.getSkuId());

        if(StringUtil.isNull(seriesNftInfoBo)){
            return ResponseDto.failure(GalaxyErrorEnum.SERIES_NFT_INFO_NOT_EXIST.getCode(), GalaxyErrorEnum.SERIES_NFT_INFO_NOT_EXIST.getMessage());
        }
        String seriesCode = seriesNftInfoBo.getSeriesCode();

        //获取任务ID
        GalaxySeriesInfoBo seriesInfoBo = dataUtils.getSeriesInfoBo(reqDto.getRouterType(),seriesCode);
        if(StringUtil.isNull(seriesInfoBo)||StringUtil.isEmpty(seriesInfoBo.getSeriesClaimTaskId())){
            return ResponseDto.failure(GalaxyErrorEnum.SERIES_NOT_EXIST.getCode(), GalaxyErrorEnum.SERIES_NOT_EXIST.getMessage());
        }
        if(seriesInfoBo.getSeriesClaimStatus().equalsIgnoreCase(GalaxyEnum.SeriesClaimStatusEnum.SUCCESS.getCode())){
            GalaxyArtSeriesClaimResultQueryRespDto resultQueryRespDto = this.buildGalaxyArtSeriesClaimResultQueryRespDto(reqDto,seriesInfoBo,ZxlnftEnum.TaskStatusEnum.TASK_SUCCESS.getCode());
            return  ResponseDto.success(resultQueryRespDto);
        }

        //查询NFT系列声明结果
        Nft031SeriesClaimResultReqDto nft031SeriesClaimResultReqDto = Nft031SeriesClaimResultReqDto.getNew();
        nft031SeriesClaimResultReqDto.setTaskId(seriesInfoBo.getSeriesClaimTaskId());
        nft031SeriesClaimResultReqDto.setPlatformPubKey(zxlnftConfig.getNftPlatformPubKey());
        ZxlnftResponseDto<Nft031SeriesClaimResultRespDto> resp = zxlnftSdkUtil.nft031SeriesClaimResult(nft031SeriesClaimResultReqDto);
        if(resp.isSuccess()){
            if(resp.getData().getTaskStatus().toString().equals(ZxlnftEnum.TaskStatusEnum.TASK_SUCCESS.getCode())){
                //设置系列声明状态
                seriesInfoBo.setSeriesClaimStatus(GalaxyEnum.SeriesClaimStatusEnum.SUCCESS.getCode());
                String nowTimeStr = DateUtil.format(new Date(resp.getData().getChainTimestamp().longValue()*1000),DateUtil.Formatter.yyyyMMddHHmmss);
                seriesInfoBo.setChainTimestamp(nowTimeStr);
                seriesInfoBo.setTradeHash(resp.getData().getTxHash());
                seriesInfoBo.setSeriesId(resp.getData().getSeriesId());
                seriesInfoBo.setUpdatedAt(LocalDateTime.now());
                dataUtils.updateSeriesClaimStatus(reqDto.getRouterType(),seriesCode,seriesInfoBo);

                //设置成功返回参数
                GalaxyArtSeriesClaimResultQueryRespDto resultQueryRespDto = this.buildGalaxyArtSeriesClaimResultQueryRespDto(reqDto,seriesInfoBo,ZxlnftEnum.TaskStatusEnum.TASK_SUCCESS.getCode());

                return ResponseDto.success(resultQueryRespDto);
            }else if(resp.getData().getTaskStatus().toString().equals(ZxlnftEnum.TaskStatusEnum.TASK_FAIL.getCode())){
                seriesInfoBo.setSeriesClaimStatus(GalaxyEnum.SeriesClaimStatusEnum.FAIL.getCode());
                seriesInfoBo.setUpdatedAt(LocalDateTime.now());
                dataUtils.updateSeriesClaimStatus(reqDto.getRouterType(),seriesCode,seriesInfoBo);
                return ResponseDto.failure(GalaxyErrorEnum.SERIES_CLAIM_ERROR.getCode(), GalaxyErrorEnum.SERIES_CLAIM_ERROR.getMessage());
            }
        }
        return ResponseDto.failure(GalaxyErrorEnum.SERIES_CLAIM_ERROR.getCode(), GalaxyErrorEnum.SERIES_CLAIM_ERROR.getMessage());
    }

    private String getFullFilePath(String seriesName,String originalUrl){
        String filePath = null;
        String imageType = null;

        if(originalUrl.lastIndexOf("?")!=-1){
            String tempUrl = originalUrl.substring(0,originalUrl.lastIndexOf("?"));
            imageType = tempUrl.substring(tempUrl.lastIndexOf("."),tempUrl.length());
        }else{
            imageType = originalUrl.substring(originalUrl.lastIndexOf("."),originalUrl.length());
        }
        String fileName =  IDGenerator.getZxlNftImageCosCode() + imageType;

        //通过图片url地址上传
        File cosFile = galaxyCommonBiz.inputStreamToFile(originalUrl,fileName);
        filePath = cosFile.getAbsolutePath();
        log.info("cosFile.getPath() :{}",cosFile.getPath());
        log.info("cosFile.getAbsoluteFile() :{}",cosFile.getAbsoluteFile());

        //完整全路径 https://zhixinliantest-1302317679.cos.ap-guangzhou.myqcloud.com/nft/4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef/NOW_ZXL_NFT_PIC001_test_skuId001/2022-03-04/ZXLNFTIMAGE202203041707466694345291.jpg
        String fullFilePath = null; //需要保存,返回给调用者

//        1.4.2调用生成素材上传临时密钥接口
        Nft022UploadSecretReqDto nft022ReqDto = Nft022UploadSecretReqDto.getNew();
        nft022ReqDto.setSeriesName(seriesName);
        nft022ReqDto.setTimestamp(DateUtil.getNowSeconds().toString());
        nft022ReqDto.setUserPubKey(zxlnftConfig.getNftPlatformPubKey());

        //系列为空
        String userData = nft022ReqDto.getTimestamp();
        //系列不为空
        if(StringUtil.isNotEmpty(nft022ReqDto.getSeriesName())){
            userData = nft022ReqDto.getTimestamp() + "_" + nft022ReqDto.getSeriesName();
        }

        nft022ReqDto.setUserSignedData(zxlnftBiz.createSign(zxlnftConfig.getNftPlatformPriKey(),userData));

        ZxlnftResponseDto<Nft022UploadSecretRespDto> nft022RespDto = zxlnftSdkUtil.nft022UploadSecret(nft022ReqDto);

        if(!nft022RespDto.isSuccess()){
            throw new ZxlNftException(ZxlErrorEnum.UPLOAD_TEMP_SECRET.getCode(),ZxlErrorEnum.UPLOAD_TEMP_SECRET.getMsg());
        }
//        1.4.3调用sdk接口-上传cos接口
        if(nft022RespDto.isSuccess()){
            fullFilePath = nft022RespDto.getData().getUploadAddress().concat(fileName);
            UploadToCosReq req = UploadToCosReq.getNew();
            req.setCosPath(fullFilePath);
            req.setTempSecretId(nft022RespDto.getData().getTempSecretId());
            req.setTempSecretKey(nft022RespDto.getData().getTempSecretKey());
            req.setSessionToken(nft022RespDto.getData().getSessionToken());
            req.setFilePath(filePath);
            UploadToCosResp uploadToCosResp = zxlWalletSdkUtil.uploadToCos(req);
        }

        log.info("完整的素材访问fullFilePath url：{}",fullFilePath);
        return  fullFilePath;
    }


    private GalaxySeriesInfoBo buildSeriesInfoBo(GalaxyArtSeriesClaimReqDto reqDto,String taskId,String publishStatus){
        String seriesName = reqDto.getSkuId();
        GalaxySeriesInfoBo seriesInfoBo = GalaxySeriesInfoBo.getNew();
        seriesInfoBo.setSeriesInfoId(IDGenerator.get32UUID());
        seriesInfoBo.setSeriesName(reqDto.getNftName());
        seriesInfoBo.setSeriesCode(seriesName);
        seriesInfoBo.setSeriesId(null);
        seriesInfoBo.setTotalCount(reqDto.getTotalCount());
        seriesInfoBo.setCrtCount(0L);
        seriesInfoBo.setSeriesClaimTaskId(taskId);
        seriesInfoBo.setSeriesClaimStatus(publishStatus);
        seriesInfoBo.setCoverUrl(reqDto.getCoverUrl());
        seriesInfoBo.setSeriesDesc(reqDto.getSeriesDesc());
        seriesInfoBo.setNftCount(1);//系列中nft个数 默认为1
        seriesInfoBo.setRouterType(reqDto.getRouterType());
        seriesInfoBo.setCreatedAt(LocalDateTime.now());
        seriesInfoBo.setUpdatedAt(null);
        return seriesInfoBo;
    }
    private GalaxySeriesNftInfoBo buildSeriesNftInfoBo(GalaxyArtSeriesClaimReqDto reqDto,GalaxySeriesInfoBo seriesInfoBo,GalaxySeriesNftUploadBo seriesNftUploadBo){
        //根据请求参数传入,如有4个skuId,依次传入1，2，3，4
        int nftPublishNumber = 1;

        GalaxySeriesNftInfoBo seriesNftInfoBo = GalaxySeriesNftInfoBo.getNew();
        seriesNftInfoBo.setSeriesNftInfoId(IDGenerator.get32UUID());
        seriesNftInfoBo.setSeriesInfoId(seriesInfoBo.getSeriesInfoId());
        seriesNftInfoBo.setSkuId(reqDto.getSkuId());
        seriesNftInfoBo.setSeriesName(seriesInfoBo.getSeriesName());
        seriesNftInfoBo.setSeriesCode(seriesInfoBo.getSeriesCode());
        seriesNftInfoBo.setSeriesId(seriesInfoBo.getSeriesId());
        //目前要求发行总数必须能整除
        Integer nftTotalCount = BigDecimal.valueOf(seriesInfoBo.getTotalCount()).divide(BigDecimal.valueOf(seriesInfoBo.getNftCount())).intValue();
        seriesNftInfoBo.setNftTotalCount(Long.valueOf(nftTotalCount.toString()));
        seriesNftInfoBo.setNftCrtCount(0L);
        seriesNftInfoBo.setNftIdBegin(null);
        seriesNftInfoBo.setNftIdBeginIndex(BigDecimal.valueOf(nftTotalCount).multiply(BigDecimal.valueOf(nftPublishNumber-1)).intValue()+1);
        seriesNftInfoBo.setNftPublishNumber(nftPublishNumber);
        seriesNftInfoBo.setOriginalNftUrl(seriesNftUploadBo.getOriginalNftUrl());
        seriesNftInfoBo.setOriginalDisplayUrl(seriesNftUploadBo.getOriginalDisplayUrl());
        //以下为购买信息
        seriesNftInfoBo.setAuthor(reqDto.getAuthor());
        seriesNftInfoBo.setNftName(reqDto.getNftName());
        seriesNftInfoBo.setNftUrl(reqDto.getNftUrl());
        seriesNftInfoBo.setDisplayUrl(reqDto.getDisplayUrl());
        seriesNftInfoBo.setNftDesc(reqDto.getNftDesc());
        seriesNftInfoBo.setNftFlag(reqDto.getNftFlag());
        BigDecimal sellCount = new BigDecimal(reqDto.getSellCount()).multiply(BigDecimal.valueOf(100l)); //积分
        seriesNftInfoBo.setSellCount(sellCount);
        seriesNftInfoBo.setNftHash(zxlnftBiz.getHashString(reqDto.getNftUrl()));
        seriesNftInfoBo.setRouterType(reqDto.getRouterType());
        seriesNftInfoBo.setCreatedAt(LocalDateTime.now());
        return seriesNftInfoBo;
    }

    private GalaxyArtSeriesClaimResultQueryRespDto buildGalaxyArtSeriesClaimResultQueryRespDto(GalaxyArtSeriesClaimResultQueryReqDto reqDto,GalaxySeriesInfoBo seriesInfoBo,String taskStatus){
        GalaxyArtSeriesClaimResultQueryRespDto resultQueryRespDto = GalaxyArtSeriesClaimResultQueryRespDto.getNew();
        resultQueryRespDto.setSeriesId(seriesInfoBo.getSeriesId());
        resultQueryRespDto.setChainTimestamp(seriesInfoBo.getChainTimestamp());
        resultQueryRespDto.setTxHash(seriesInfoBo.getTradeHash());
        resultQueryRespDto.setTaskStatus(Integer.valueOf(GalaxyEnumBiz.getTaskStatusEnum(reqDto.getRouterType(),taskStatus).getCode()));

        //获取sku对应nft信息
        GalaxySeriesNftInfoBo seriesNftInfoBo = dataUtils.getSeriesNftInfoBo(reqDto.getRouterType(),reqDto.getSkuId());
        resultQueryRespDto.setNftHash(seriesNftInfoBo.getNftHash());
        return resultQueryRespDto;
    }
}
