产品功能实现1.0-Jane_第1页
产品功能实现1.0-Jane_第2页
产品功能实现1.0-Jane_第3页
产品功能实现1.0-Jane_第4页
产品功能实现1.0-Jane_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

产品功能实现目录架构与环境 4后台功能 4爱世界 4爱人人 4公共调用类(生成验证码) 4公共调用类(异常页面展示404) 5公共调用类(异常页面展示500) 6公共调用类(显示运营页面) 8公共调用类(地区选择) 8会员注册(注册第一步:创建账号) 9会员注册(注册第二步:完善信息) 12会员注册(注册第三步:实名认证) 15会员注册(注册第四步:用户账号激活) 17会员注册(显示注册页面) 19会员注册(发送激活邮件) 20会员注册(校验机构名称状态) 21会员注册(校验机构代码状态) 21登录(显示登录页面) 22登录 22用户退出 25获取文档 31圈子帖子查询 32圈内发送激活邮件 33圈内校验机构名称状态 33圈内校验机构代码状态 34显示后台首页 35显示项目模块首页 35搜索 36分类 36排序 36筛选 36账号生成 36安全管理 36系统管理(字体大小) 36系统管理(关于爱你) 36APP功能(Axure里用例全视图的“救助说明”是什么?) 36注册 36登录 37浏览 37加入圈子 37圈子列表 38圈子列表(搜索) 39父圈子列表 40退出圈子 41机构主页信息 41发起求助(创建、展示?) 42获取帖子详情信息(帖子=求助、行动、讨论?跟贴=参与行动、讨论?) 44获取最新帖子列表 45获取最新帖子列表(?) 46获取最新项目列表 48发起行动(创建、展示) 48参与行动 48发起讨论(创建、展示) 48参与讨论 48发起讨论(投票) 48参与投票 48搜索(筛选、排序、分类) 48项目首页 49获取项目详情(评论) 49获取项目详情信息 50获取项目详情(求助信息) 51获取项目详情(网友评论) 53获取项目详情(捐赠记录) 53获取项目详情(财务报表) 54获取项目详情(项目进展) 55获取项目详情(专家评论) 56关注项目 56取消关注项目 57获取热评项目列表 58项目关键词查询 58项目查询(根据模块名设置不同的受益人类型) 59项目专题 61网友评价(展示) 61网友评价(赞/踩) 61网友评价(评价) 61捐赠记录 61进度汇报 61原始求助 61分享 61捐赠 61捐赠(支付接口) 61捐赠记录查询 61订阅爱心月报 61获取展区展示内容 61会员主页信息 62会员个人信息(自己查看) 63会员个人信息(修改) 65我的关注 65我的圈子(展示) 65我的圈子(取消关注) 65帮助过我的记录(感恩是爱) 65我的捐赠记录(付出是爱) 65图片异步下载 65报表图形化展示 65客户端与服务端通信安全 65支付宝用户登录 65机构功能 65机构信息管理 65机构认证管理 65求助查询(查看NGO自己发起的求助) 65求助查询(查看所有求助,包括个人会员和其他NGO发起的求助) 65项目查询(查看NGO自己发布的项目) 67项目发布(公募项目发布) 67项目发布(圈内项目发布) 67项目管理(项目发布、修改审核) 67项目管理(项目修改) 67项目管理(发布财务报表) 67项目管理(发布项目反馈) 67项目管理(回复网友评论) 67已发布项目管理 67事后审核(求助审核) 67事后审核(行动审核) 67事后审核(讨论审核) 67事后审核(投票审核) 67圈子管理(创建圈子) 67圈子管理(加入圈子申请审核) 67圈子管理(圈子信息管理) 67圈子管理(权限设置) 68加入圈子 68圈子查询(查看已加入圈子列表) 68服务站管理(申请) 68服务站管理(审批) 68Boss功能 68自动生成圈子 68NGO注册审核 68架构与环境后台功能爱世界爱人人页面设计业务流程图前端实现页面流程代码后台实现页面流程代码公共调用类(生成验证码)后台实现web-common\src\main\java\com\ainigongyi\web\common\controller\CaptchaController.java页面流程代码@RequestMapping(value

=

{"/captcha"})

public

void

captcha(HttpServletRequest

req,

HttpServletResponse

res)

{

try

{

String

captcha

=

userService.createCaptcha();

saveCaptcha(req,

captcha);

res.setContentType("images/jpeg");

res.setHeader("Pragma",

"No-cache");

res.setHeader("Cache-Control",

"no-cache");

res.setDateHeader("Expires",

0);

userService.createCaptchaImage(captcha,

res.getOutputStream());

}

catch

(IOException

e)

{

LOG.error("验证码生成失败!",

e);

}

}公共调用类(异常页面展示404)页面设计业务流程图前端实现web-portal\src\main\webapp\template\404.vm页面流程代码#if($admin)#set($layout="/template/admin/layout.vm")#else#set($layout="/template/layout.vm")#end<divclass="content"><divclass="container"><divclass="error-container"><divclass="error-code">404</div><divclass="error-details"><h4>人生不是一条死胡同,</h4><h4>只要爱你爱自己,就能走出属于您的风采!</h4><br><p><strong>您也许只需要:</strong></p><ulclass="icons-list"><li><iclass="icon-liiconfonticon-ok"></i>再刷新一下页面,我们怕是开了会儿差,或者</li><li><iclass="icon-liiconfonticon-ok"></i>检查输入的网址,也许只是不小心打错了一个字母?</li><li><iclass="icon-liiconfonticon-ok"></i>无论如何,我们并不想给您带来不快乐的经历,我们很愿意接受您的反馈,聆听您的建议。</li></ul></div>##.error-details</div>##.error</div>##.container</div>##.content后台实现web-common\src\main\java\com\ainigongyi\web\common\controller\ErrorsController.java页面流程代码@RequestMapping(value

=

{"/error/404"})

public

ModelAndView

_404(HttpServletRequest

req,

HttpServletResponse

res)

{

if

(LOG.isInfoEnabled())

{

LOG.info("404

found.

URL

=

"

+

urlPathHelper.getOriginatingRequestUri(req));

}

return

P.error_404

.addObject("admin",

isAdmin(req));

}

公共调用类(异常页面展示500)页面设计业务流程图前端实现web-portal\src\main\webapp\template\500.vm页面流程代码#if($admin)#set($layout="/template/admin/layout.vm")#else#set($layout="/template/layout.vm")#end<divclass="content"><divclass="container"><divclass="error-container"><divclass="error-code">500</div><divclass="error-details"><h4>人生不是一条死胡同,</h4><h4>只要爱你爱自己,就能走出属于您的风采!</h4><br><p><strong>您也许只需要:</strong></p><ulclass="icons-list"><li><iclass="icon-liiconfonticon-ok"></i>再刷新一下页面,我们怕是开了会儿差,或者</li><li><iclass="icon-liiconfonticon-ok"></i>检查输入的网址,也许只是不小心打错了一个字母?</li><li><iclass="icon-liiconfonticon-ok"></i>无论如何,我们并不想给您带来不快乐的经历,我们很愿意接受您的反馈,聆听您的建议。</li></ul></div>##.error-details</div>##.error</div>##.container</div>##.content后台实现web-common\src\main\java\com\ainigongyi\web\common\controller\ErrorsController.java页面流程代码

@RequestMapping(value

=

{"/error/500"})

public

ModelAndView

_500(HttpServletRequest

req,

HttpServletResponse

res)

{

if

(LOG.isInfoEnabled())

{

LOG.info("500

found.

URL

=

"

+

urlPathHelper.getOriginatingRequestUri(req));

}

return

P.error_500

.addObject("admin",

isAdmin(req));

}公共调用类(显示运营页面)页面设计业务流程图前端实现页面流程代码后台实现web-common\src\main\java\com\ainigongyi\web\common\controller\OperationsController.java页面流程代码

@RequestMapping("/ops/{id}.html")

public

String

show(HttpServletRequest

req,

@PathVariable("id")

final

Integer

pageId)

{

return

"failure";

}公共调用类(地区选择)后台实现web-common\src\main\java\com\ainigongyi\web\common\controller\RegionController.java页面流程代码

@RequestMapping(value

=

{"/region.json"},

method

=

RequestMethod.GET)

public

byte[]

getAddressData(@RequestHeader("Accept-Encoding")

String

acceptEncoding,

HttpServletResponse

res,

String

parentCode)

{

byte[]

jsonBytes

=

new

byte[0];

try

{

jsonBytes

=

regionService.getRegionTreeOfChinaAsJson(parentCode).getBytes(UTF_8);

}

catch

(ComponentException

e)

{

LOG.warn("区域Json结果Gzip压缩异常!",

e);

}

if

(acceptEncoding.contains("gzip")

&&

jsonBytes.length

>

0)

{

try

{

ByteArrayOutputStream

output

=

new

ByteArrayOutputStream();

GZIPOutputStream

gzipOutput

=

new

GZIPOutputStream(output);

gzipOutput.write(jsonBytes,

0,

jsonBytes.length);

gzipOutput.close();

jsonBytes

=

output.toByteArray();

res.addHeader("Content-Encoding",

"gzip");

}

catch

(IOException

ex)

{

LOG.warn("区域Json结果Gzip压缩异常!",

ex);

}

}

return

jsonBytes;

}会员注册(注册第一步:创建账号)页面设计业务流程图前端实现web-portal\src\main\webapp\template\register_step1.vm页面流程代码#set($layout="/template/layout.vm")<divclass="aini-main-navbaraini-setp"><h3>机构入驻</h3><hr><olclass="ui-stepui-step-4"><liclass="ui-step-startui-step-active"><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="ui-step-number">1</i><spanclass="ui-step-text">创建账户</span></div></li><li><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="ui-step-number">2</i><spanclass="ui-step-text">完善信息</span></div></li><li><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="ui-step-number">3</i><spanclass="ui-step-text">实名认证</span></div></li><liclass="ui-step-end"><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="iconfonticon-okui-step-number"></i><spanclass="ui-step-text">入驻成功</span></div></li></ol></div><divclass="aini-wrapper"><divclass="aini-body"><divclass="checkbox-inline">我同意<ahref="javascript:;"target="_blank">《爱你公益平台服务协议》</a></div><formclass="formaini-form"method="post"action="${base}/member/register"id="J-RegisterForm"><inputtype="hidden"name="step"value="1"><divclass="form-group"><inputtype="email"class="form-control"id="J-Email"name="email"placeholder="账户名"><pclass="help-block">请填写企业邮箱,此账户将作为机构的管理员账号。</p></div><divclass="form-group"><inputtype="password"class="form-control"id="J-Passphrase"name="passphrase"placeholder="密码"></div><divclass="form-group"><inputtype="password"class="form-control"id="J-PassphraseConfirm"name="passphrase_confirm"placeholder="确认密码"></div><divclass="form-group"><inputtype="text"class="form-control"id="J-Captcha"name="captcha"placeholder="验证码"><imgid="J-CaptchaImage"src="${base}/captcha?${Math.getRandom()}"title="点击刷新图片校验码"><aid="J-NewCaptcha"href="#">看不清,换一张</a></div><divclass="form-group"><buttontype="submit"class="btnbtn-secondarybtn-blockbtn-lg"id="J-btnNextStep">下一步</button></div><divclass="form-group"><h6>如您已入驻,请<ahref="${base}/login"class="">点击</a>登录!</h6></div></form></div>##.aini-body</div>#layouttitle("机构入驻")#layoutscripts("${base}/res/js/jquery.validate/v1.13.0/jquery.validate.js","${base}/res/js/app/app-register-step1.js")后台实现web-portal\src\main\java\com\ainigongyi\web\portal\controller\RegisterController.java页面流程代码调用公共调用类(生成验证码)

@RequestMapping(value

=

{"/register"},

method

=

POST,

params

=

"step=1")

public

ModelAndView

registerStep1(HttpServletRequest

req,

HttpServletResponse

res,

RegisterForm

form)

{

LOG.debug("进入注册第一步:创建账号");

if

(!getAndResetCaptchaCheckPassed(req))

{

//

TODO

验证码错误处理

return

null;

}

try

{

User

user

=

userService.createUser(form.transTo(new

UserCreateRequest()));

return

new

ModelAndView(P.redirect_to.register(req)).addObject("userId",

user.getId());

}

catch

(Exception

e)

{

LOG.error("创建账号失败!form

=

"

+

form.toString(),

e);

return

P.register.failure

.addObject("form",

form)

.addObject("msg",

"创建账号失败,请检查填写的数据后再尝试!");

}

}会员注册(注册第二步:完善信息)增加上传组织机构代码证和营业执照页面设计业务流程图前端实现web-portal\src\main\webapp\template\register_step2.vm页面流程代码#set($layout="/template/layout.vm")<divclass="aini-main-navbaraini-setp"><h3>机构入驻</h3><hr><olclass="ui-stepui-step-4"><liclass="ui-step-start"><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="ui-step-number">1</i><spanclass="ui-step-text">创建账户</span></div></li><liclass="ui-step-active"><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="ui-step-number">2</i><spanclass="ui-step-text">完善信息</span></div></li><li><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="ui-step-number">3</i><spanclass="ui-step-text">实名认证</span></div></li><liclass="ui-step-end"><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="iconfonticon-okui-step-number"></i><spanclass="ui-step-text">入驻成功</span></div></li></ol></div><divclass="aini-wrapper"><divclass="aini-body"><h5>请务必正确填写资料,以便顺利审核通过。</h5><formclass="formaini-form"method="post"action="${base}/member/register"id="J-RegisterForm"><inputtype="hidden"name="step"value="2"><divclass="form-group"><inputtype="text"class="form-control"id="J-CorpCName"name="corpName"placeholder="机构全称"></div><divclass="form-group"><inputtype="text"class="form-control"id="J-CorpCode"name="corpCode"placeholder="机构代码"></div><divclass="form-group"><inputtype="text"class="form-control"id="J-ContactName"name="contactName"placeholder="联系人"></div><divclass="form-group"><inputtype="text"class="form-control"id="J-ContactPhone"name="contactPhone"placeholder="联系方式"></div><divclass="form-group"><h5>机构注册地:</h5>#if($!regionId)$view.module("regionselector").parameter("field","regionId").parameter("class","form-control").parameter("selected","$!regionId")#else$view.module("regionselector").parameter("field","regionId").parameter("class","form-control")#end</div><divclass="form-group"><buttontype="submit"class="btnbtn-secondarybtn-blockbtn-lg"id="J-btnNextStep">下一步</button></div></form></div>##.aini-body</div>#layouttitle("机构入驻")#layoutlinks("${base}/res/css/bootstrap-select/v1.6.2/bootstrap-select.min.css")#layoutscripts("${base}/res/js/jquery.validate/v1.13.0/jquery.validate.js","${base}/res/js/bootstrap-select/v1.6.2/bootstrap-select.js","${base}/res/js/app/app-register-step2.js","${base}/res/js/app/common/region-selector.js")</body></html>后台实现web-portal\src\main\java\com\ainigongyi\web\portal\controller\RegisterController.java页面流程代码调用公共调用类(地区选择)@RequestMapping(value

=

{"/register"},

method

=

POST,

params

=

"step=2")

public

ModelAndView

registerStep2(final

HttpServletRequest

req,

HttpServletResponse

res,

RegisterForm

form)

{

LOG.debug("进入注册第二步:完善信息");

try

{

Member

member

=

userService.createUserMember(form.transTo(new

UserMemberCreateRequest()

{{

setUserId(getAuthInfo(req).getLoginId());

setType(T2);

//

TODO

当前只支持公益组织注册,暂不支持企业会员和个人会员注册

}}));

Authentication

authInfo

=

getAuthInfo(req);

saveAuthInfo(req,

authInfo.getLoginId(),

authInfo.getNick(),

member.getId(),

member.getName());

return

new

ModelAndView(P.redirect_to.register(req)).addObject("userId",

authInfo.getLoginId());

}

catch

(Exception

e)

{

LOG.error("完善信息失败!form

=

"

+

form.toString(),

e);

return

P.register.failure

.addObject("form",

form)

.addObject("msg",

"完善信息失败,请检查填写的数据后再尝试!");

}

}会员注册(注册第三步:实名认证)页面设计业务流程图前端实现web-portal\src\main\webapp\template\register_step3.vm页面流程代码#set($layout="/template/layout.vm")<divclass="aini-main-navbaraini-setp"><h3>机构入驻</h3><hr><olclass="ui-stepui-step-4"><liclass="ui-step-start"><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="ui-step-number">1</i><spanclass="ui-step-text">创建账户</span></div></li><li><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="ui-step-number">2</i><spanclass="ui-step-text">完善信息</span></div></li><liclass="ui-step-active"><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="ui-step-number">3</i><spanclass="ui-step-text">实名认证</span></div></li><liclass="ui-step-end"><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="iconfonticon-okui-step-number"></i><spanclass="ui-step-text">入驻成功</span></div></li></ol></div><divclass="aini-wrapper"><divclass="aini-body"><h4>${authI},您好</h4><h6>您已成功提交机构信息,我们的工作人员正在核实,正常2-3个工作日后会发邮件通知,请留意您的邮箱。</h6><h6>如果没有收到,请耐心等待或联系我们的工作人员咨询进度。</h6><h6>谢谢您的信任!</h6></div>##.aini-body</div>#layouttitle("机构入驻")#layoutscripts("${base}/res/js/jquery.validate/v1.13.0/jquery.validate.js")后台实现web-portal\src\main\java\com\ainigongyi\web\portal\controller\RegisterController.java页面流程代码

@RequestMapping(value

=

{"/register"},

method

=

POST,

params

=

"step=3")

public

ModelAndView

registerStep3(HttpServletRequest

req,

HttpServletResponse

res,

RegisterForm

form,

String

step)

{

//

form.getUserId

//

TODO

创建支付宝快捷登录链接,登录成功后校验实名信息(创建时指定的通知地址需要包含userId)

return

P.register.step4;

}会员注册(注册第四步:用户账号激活)页面设计业务流程图前端实现web-portal\src\main\webapp\template\register_step4.vm页面流程代码#set($layout="/template/layout.vm")<divclass="aini-main-navbaraini-setp"><h3>机构入驻</h3><hr><olclass="ui-stepui-step-4"><liclass="ui-step-start"><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="ui-step-number">1</i><spanclass="ui-step-text">创建账户</span></div></li><li><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="ui-step-number">2</i><spanclass="ui-step-text">完善信息</span></div></li><li><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="ui-step-number">3</i><spanclass="ui-step-text">实名认证</span></div></li><liclass="ui-step-endui-step-done"><divclass="ui-step-line">-</div><divclass="ui-step-icon"><iclass="iconfonticon-lingxing"></i><iclass="iconfonticon-okui-step-number"></i><spanclass="ui-step-text">入驻成功</span></div></li></ol></div><divclass="aini-wrapper"><divclass="aini-body"><h4>${authI},您好</h4><h6>您已成功注册成为了爱你公益平台的一员,我们将为实现您的公益梦想而努力!接下来您可以<ahref="${base}/login"class="">登录</a>爱你,迎接崭新的一天!</h6></div>##.aini-body</div>#layouttitle("机构入驻")#layoutscripts("${base}/res/js/jquery.validate/v1.13.0/jquery.validate.js")后台实现web-portal\src\main\java\com\ainigongyi\web\portal\controller\RegisterController.java页面流程代码

@RequestMapping(value

=

{"/register/acctActive"},

method

=

RequestMethod.GET)

public

ModelAndView

active(HttpServletRequest

req,

HttpServletResponse

res,

@RequestParam("id")

Integer

userId,

String

key)

{

userService.activeAccount(userId,

key);

return

new

ModelAndView(P.redirect_to.login(req));

}会员注册(显示注册页面)页面设计业务流程图前端实现页面流程代码后台实现web-portal\src\main\java\com\ainigongyi\web\portal\controller\RegisterController.java页面流程代码

@RequestMapping(value

=

{"/register"},

method

=

GET)

public

Model

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论