Exemplo n.º 1
0
  /** 认购项目 茹化肖 */
  @Override
  @Transactional(rollbackFor = Exception.class, timeout = 30)
  public HttpResultModel<Object> subproject(SubProjectReq req) {
    HttpResultModel<Object> result = new HttpResultModel<Object>();
    Member user = memberDao.selectById(req.getUserId());
    MemberOther userOther = memberOtherDao.selectByMemberId(req.getUserId());
    Project project = projectDao.selectByPrimaryKey(req.getProjectId());
    // 1.项目不在预热或进行中或已下架
    if (project == null) {
      result.setCode(-1);
      result.setMsg("该项目暂时不能购买!");
      return result;
    }
    // 2.验证用户支付密码
    if (!MD5Util.MD5(req.getPayPwd()).equals(userOther.getPaypassword())) { // 支付密码不同
      result.setCode(-1);
      result.setMsg("支付密码错误,请重试!");
      return result;
    }
    // 3项目预热中,购买人非领投人
    if (project.getProjectstatus() == ProjectStatus.Preheating.value()
        && user.getLevel() != MemberTypeEnum.LeadInvestUser.value()) {
      result.setCode(-1);
      result.setMsg("预热中的项目只有领投资格会员可以认购");
      return result;
    }
    // 4项目众筹中,普通用户
    if (project.getProjectstatus() == ProjectStatus.Financeing.value()
        && user.getLevel() == MemberTypeEnum.CommonUser.value()) {
      result.setCode(-1);
      result.setMsg("您尚未实名认证,请先进行实名认证!");
      return result;
    }
    // 5项目众筹中,实名认证用户
    if (project.getProjectstatus() == ProjectStatus.Financeing.value()
        && user.getLevel() == MemberTypeEnum.CertificationUser.value()) {
      result.setCode(-1);
      result.setMsg("您尚未进行投资人认证,请先进行投资人认证!");
      return result;
    }
    // 新手专享判断
    if (project.getIsNovice() == 1) {
      if (projectSubscriptionDao.isMyHave(project.getId(), user.getId()) > 0) {
        result.setCode(-1);
        result.setMsg("新手专享项目只能认购一次!");
        return result;
      }
    }

    if (req.getIsLead() == 1) {
      // 领投人
      if (user.getLevel() != MemberTypeEnum.LeadInvestUser.value()) {
        result.setCode(-1);
        result.setMsg("您当前不具备领投资格,请先进行领投人认证!");
        return result;
      }
      // 领投份数小于最低份额
      if (req.getQuantity() < project.getLeadminfenshu()) {
        result.setCode(-1);
        result.setMsg("您领投的份额低于该项目要求的最低领投份!");
        return result;
      }
      // 领投份数大于该项目的剩余可领投份额
      if (req.getQuantity()
          > (project.getPreheatmaxfenshu() - project.getRediduePreheatMaxFenShu())) {
        result.setCode(-1);
        result.setMsg("您领投的份额大于该项目的剩余领投份额!");
        return result;
      }
      // 领投份数大于该项目的剩余可领投份额
      if (req.getQuantity() > (project.getFenshu() - project.getRediduePreheatMaxFenShu())) {
        result.setCode(-1);
        result.setMsg("您领投的份额大于该项目的剩余份额!");
        return result;
      }
    } else {
      // 跟投.
      // 领投份数大于该项目的剩余可领投份额
      if (req.getQuantity() > (project.getFenshu() - project.getRedidueFenshu())) {
        result.setCode(-1);
        result.setMsg("您投资的份额大于该项目的剩余份额!");
        return result;
      }
    }
    // 验证金额
    if (req.getQuantity() * project.getUnitprice() > userOther.getBalanceprice()) {
      result.setCode(-1);
      result.setMsg("您认购项目所需金额大于现有余额,请先进行充值!");
      return result;
    }
    return dealSubproject(req, user, userOther, project);
  }