/** 认购项目 茹化肖 */ @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); }