/**
   * 获取供应商的详细信息(保证金等信息)
   *
   * @param requirementId 需求编号
   * @param solution 需求方案信息
   * @param categoryIds 需求类目信息
   * @return SupplierSolutionDto 供应商详细信息
   */
  private SupplierSolutionDto querySupplierDto(
      Long requirementId, RequirementSolution solution, List<Long> categoryIds) {
    SupplierSolutionDto supplierSolutionDto = new SupplierSolutionDto();

    supplierSolutionDto.setSupplierId(solution.getSupplierId());
    supplierSolutionDto.setSupplierName(solution.getSupplierName());
    supplierSolutionDto.setUserId(solution.getUserId());
    // 是否已提交方案
    supplierSolutionDto.setDealTime(
        solution.getSolutionFile() == null ? null : solution.getUpdatedAt());

    // 写入供应商信用等级信息
    Response<SupplierCreditQualify> creditRes =
        supplierCreditQualifyService.findCreditQualifyByUserId(solution.getUserId());
    supplierSolutionDto.setCreditStatus(
        creditRes.isSuccess() ? creditRes.getResult().getStatus() : null);

    // 写入供应商资质验证信息
    Response<Integer> qualifyRes =
        supplierResourceMaterialService.getInfoInBcIds(solution.getSupplierId(), categoryIds);
    supplierSolutionDto.setQualifyStatus(qualifyRes.isSuccess() ? qualifyRes.getResult() : null);

    // 写入供应商针对需求是否提交保证金
    Response<Integer> depositRes =
        depositService.checkPaid(requirementId, solution.getSupplierId());
    supplierSolutionDto.setPaidStatus(
        depositRes.isSuccess() ? depositRes.getResult() : Deposit.Status.INIT.value());

    // 标注供应商是否可以进入配额流程
    supplierSolutionDto.setSolutionStatus(
        Objects.equal(
            RequirementSolution.Status.from(solution.getStatus()),
            RequirementSolution.Status.SEND_END));

    Response<User> userRes = accountService.findUserById(solution.getUserId());
    supplierSolutionDto.setSupplierTags(
        userRes.isSuccess() ? userRes.getResult().buildTags() : null);

    // 当阶段到达,已上传文件阶段则默认为全部承诺
    Integer interStatus =
        solution.getStatus() == 0 ? 1 : (solution.getStatus() >= 4 ? 2 : solution.getStatus());
    supplierSolutionDto.setInteractiveStatus(interStatus);

    return supplierSolutionDto;
  }