Exemplo n.º 1
0
  /**
   * 进行认购处理
   *
   * @return
   */
  public HttpResultModel<Object> dealSubproject(
      SubProjectReq req, Member m, MemberOther mo, Project p) {
    // 1.生成购买记录
    ProjectSubscription psr = new ProjectSubscription();
    psr.setMemberid(m.getId());
    psr.setProjectid(p.getId());
    psr.setIslead(req.getIsLead() == 1);
    psr.setAmount(req.getQuantity() * p.getUnitprice());
    psr.setFenshu(req.getQuantity());
    psr.setName(m.getTruename());
    psr.setPhoneno(m.getPhoneno());
    psr.setEmail(m.getEmail());
    psr.setIdcard(m.getIdcard());
    int res1 = projectSubscriptionDao.insertSelective(psr);
    // 2.扣减账户余额
    MemberOther updateOther = new MemberOther();
    // 余额=余额-应付款
    Float yF = (p.getUnitprice() * req.getQuantity());
    Float YR = mo.getBalanceprice();
    updateOther.setBalanceprice(YR - yF);
    updateOther.setAllowwithdrawprice(mo.getAllowwithdrawprice() - yF);
    updateOther.setMemberid(m.getId());
    int res2 = memberOtherDao.updateByMemberIdSelective(updateOther);
    // 3.插入流水.
    BalanceRecord bRecord = new BalanceRecord();
    bRecord.setAmount(-yF);
    bRecord.setMemberid(m.getId());
    bRecord.setAfteramount((float) (YR - yF));
    bRecord.setTypeid(ParseHelper.ToShort(RecordType.Invest.value()));
    bRecord.setWithwardid(p.getId());
    bRecord.setRemark("认购项目");
    bRecord.setOptname(m.getTruename());
    int res3 = blanceRecordDao.insertSelective(bRecord);
    // 4.更新项目信息
    Project updateProject = new Project();
    updateProject.setId(p.getId());
    updateProject.setRedidueFenshu(p.getRedidueFenshu() + req.getQuantity());
    updateProject.setInvestmentnumber(p.getInvestmentnumber() + 1);
    // 已购买份数除以份数*100
    int rp = updateProject.getRedidueFenshu() * 100 / p.getFenshu();
    updateProject.setSchedule(rp);
    if (req.getIsLead() == 1) // 领投
    {
      // 已购买的份数加上新的份数
      updateProject.setRediduePreheatMaxFenShu(p.getRediduePreheatMaxFenShu() + req.getQuantity());
    }
    int res4 = projectDao.updateByPrimaryKeySelective(updateProject);
    if (res1 != 1 || res2 != 1 || res3 != 1 || res4 != 1) // 每个操作都应该只有一条影响
    {
      throw new TransactionalRuntimeException("认购失败!");
    }
    int year = ParseHelper.GetInDate(new java.util.Date(), 1);
    int month = ParseHelper.GetInDate(new java.util.Date(), 2);
    int day = ParseHelper.GetInDate(new java.util.Date(), 3);

    // 您于*年*月*日认购易淘众筹项目“*”,已确认成功,确认金额*元。如有任何疑问,请致电联系客服4000-999-177
    String content =
        "您于"
            + year
            + "年"
            + month
            + "月"
            + day
            + "日"
            + "认购易淘众筹项目“"
            + p.getProjectname()
            + "”,"
            + "已确认成功,确认金额"
            + yF
            + "元。"
            + "如有任何疑问,请致电联系客服4000-999-177";

    // 发送认购短信
    SmsUtils.sendSMS(m.getPhoneno(), content);
    HttpResultModel<Object> rModel = new HttpResultModel<Object>();
    rModel.setCode(1);
    rModel.setMsg("认购成功!");
    rModel.setUrl(
        PropertyUtils.getProperty("java.wap.url") + "/home/detail?projectid=" + p.getId());
    return rModel;
  }