4 系统详细设计与实现
沧州旅游攻略分享互动平台的详细设计与实现主要是根据前面的沧州旅游攻略分享互动平台的需求分析和沧州旅游攻略分享互动平台的总体设计来设计页面并实现业务逻辑。主要从沧州旅游攻略分享互动平台界面实现、业务逻辑实现这两部分进行介绍。
系统首页以上中下的布局进行展示,正上方是系统的导航栏,下面可查看轮播图、旅游公告、广告投放、旅游商城、攻略论坛推荐(根据首次浏览优先推荐)、景点信息推荐(根据首次浏览和新添加的景点类型优先推荐),并可使用系统其他功能,并可点击首页的智能机器人,和智能客服进行交流沟通其主界面展示如下图4-1所示。
图4-1 前台首页界面图
用户右上角“注册”按钮进入注册页面填写账号、密码、确认密码、昵称、邮箱、身份等信息后点击“注册”按钮,系统会对输入的信息进行验证,验证通过后即可完成注册,其界面展示如下图4-2所示。
图4-2 注册界面图
用户注册的关键代码如下:
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = JSON.parseObject(JSON.toJSONString(user));
query.put("username",user.getUsername());
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
用户注册后可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,系统会对输入的信息进行验证,验证通过后即可完成登录,其界面如下图4-3所示。
图4-3登录界面图
用户登录关键代码如下:
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
Duration duration = Duration.ofSeconds(7200L);
redisTemplate.opsForValue().set(accessToken.getToken(), accessToken,duration);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
可查看发布的所有旅游商城信息,支持局部搜索和下拉(筛选、排序)搜索,热门商品推荐,点击可查看详情(封面图、主图、标题、描述、原价、卖家、库存、分类、商品规格、正文),进行收藏、评论,并可点击立即购买和加入购物车操作。其界面如下图所示。
图4-4旅游商城详情界面图
可查看所有景点信息,支持关键字(景点名称、景点类型)、搜索和下拉(景点类型、排序)搜索,点击可查看详情,进行点赞、收藏和评论,并可点击下单购票操作,填写并提交购票信息(购票日期、购票用户、用户手机、购票数量、支付金额)。其界面如下图所示。
图4-5景点信息详情界面图
可对个人首页、攻略论坛、购票订单、订单配送、收藏等信息进行管控。例如,点击“攻略论坛”,可查看自己的攻略论坛信息,进行增改删查操作,支持攻略标题、攻略分类、攻略标签、审核状态搜索,点击可查看详情和查看评论;点击“购票订单”,可查看自己的购票订单信息,进行查询操作,支持购票单号、景点名称、购票日期、审核状态、支付状态搜索,点击可查看详情,并可点击进行支付操作;点击“订单配送”,可查看自己的订单配送信息,进行查询操作,支持配送状态、签收状态搜索,可点击查看详情,和进行签收操作;点击“收藏”,可管理所有收藏信息,包括旅游商城、攻略论坛等,进行查看和删除操作。可点击查看详情。其界面如下图所示:
图4-6个人中心论坛攻略界面图
可查看商品销售金额统计、商品销售数量统计等信息数据分析图表。其界面如下图所示。
图4-7后台首页界面图
可对旅游用户和管理员进行管控,包括进行增删改查操作,点击可查看详情。其界面如下图所示。
图4-8系统用户界面图
可对攻略论坛和进行管理,进行增删改查操作,支持攻略标题、攻略分类、攻略标签、审核状态搜索,可点击查看详情(攻略标题、攻略分类、攻略标签、发布人、攻略内容、审核状态),进行审核,并可查看评论。其界面如下图所示。
图4-9 攻略论坛管理详情界面图
可查看所有景点信息,进行增删改查操作,支持景点名称、景点类型搜索,点击可查看详情(景点名称、景点类型、封面、售票单价、景点电话、景点地址、景点介绍)和查看评论)。其界面如下图所示。
图4-10 景点信息管理界面图
可查看所有购票订单信息,进行查询和删除操作,支持购票单号、景点名称、购票日期、审核状态、支付状态搜索,点击可查看详情,并可点击支付,修改支付状态。其界面如下图所示。
图4-11 购票订单管理界面图
可对首页的轮播图和广告进行管理。点击“轮播图”,可查看添加的轮播图信息,进行增删改查操作,支持标题搜索,可点击查看详情;点击“广告管理”,可查看添加的广告信息,进行增删改查操作,支持标题、投放位置搜索,可点击查看详情(标题、链接、投放位置、内容)。其界面如下图所示。
图4-12 系统管理广告界面图
轮播图片上传的代码如下:
@PostMapping("/upload")
public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
log.info("进入方法");
if (file.isEmpty()) {
return error(30000, "没有选择文件");
}
try {
//判断有没路径,没有则创建
String filePath = System.getProperty("user.dir") + "/src/main/resources/static/";
File targetDir = new File(filePath);
if (!targetDir.exists() && !targetDir.isDirectory()) {
if (targetDir.mkdirs()) {
log.info("创建目录成功");
} else {
log.error("创建目录失败");
}
}
String fileName = file.getOriginalFilename();
File dest = new File(filePath + fileName);
log.info("文件路径:{}", dest.getPath());
log.info("文件名:{}", dest.getName());
file.transferTo(dest);
JSONObject jsonObject = new JSONObject();
jsonObject.put("url", "/api/upload/" + fileName);
return success(jsonObject);
} catch (IOException e) {
log.info("上传失败:{}", e.getMessage());
}
return error(30000, "上传失败");
}
可对旅游商城、分类列表、订单列表、订单配送等信息进行管理,进行增删改查操作,可点击查看详情。例如,点击“旅游商城”,可查看所有旅游商城信息,支持标题、分类、商品规格搜索,可点击查看详情和查看评论;点击“分类列表”,可查看所有分类信息,支持分类名称搜索,可点击查看详情;点击“订单列表”,可查看所有订单信息,支持订单号、商品名称、联系人姓名、状态搜索,可点击查看详情(商品名称、订单号、商品图片、价格、原价、购买数量、总价、联系人名称、联系人地址、订单状态、买家、备注、发货日期),和点击进行配送操作;点击“订单配送”,可查看所有订单配送信息,支持配送状态、签收状态搜索,可点击查看详情(订单号、商品名称、购买数量、交易总额、发货日期、配送单号、联系人、买家、收货地址、配送状态、签收状态),可点击签收,修改签收状态。其界面如下图所示。
图4-13 商城管理订单列表界面图
添加关键代码如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
删除关键代码如下:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
public void delete(Map<String,String> query,Map<String,String> config){
QueryWrapper wrapper = new QueryWrapper<E>();
toWhereWrapper(query, "0".equals(config.get(FindConfig.GROUP_BY)),wrapper);
baseMapper.delete(wrapper);
log.info("[{}] - 删除操作:{}",wrapper.getSqlSelect());
}
5系统测试
无论什么样的系统,测试都至关重要,通过测试可以检查出潜藏的缺陷,从而确保系统的性能和稳定性,避免Bug的出现,并确保系统的功能和性价比达到预期的要求。
系统测试包括:用户登录功能测试、旅游商城展示功能、景点信息添加功能、密码修改功能测试,如表5-1、5-2、5-3、5-4所示:
表5-1 用户登录功能测试表
用例名称 | 用户登录系统 |
目的 | 测试用户通过正确的用户名和密码可否登录功能 |
前提 | 未登录的情况下 |
测试流程 | 1) 进入登录页面 2) 输入正确的用户名和密码 |
预期结果 | 用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
实际结果 | 实际结果与预期结果一致 |
旅游商城展示功能测试:
表5-2 旅游商城展示功能测试表
用例名称 | 旅游商城展示 |
目的 | 测试旅游商城展示功能 |
前提 | 用户登录 |
测试流程 | 点击旅游商城 |
预期结果 | 可以查看到所有旅游商城信息 |
实际结果 | 实际结果与预期结果一致 |
景点信息添加界面测试:
表5-3 景点信息添加界面测试表
用例名称 | 景点信息添加测试用例 |
目的 | 测试景点信息添加功能 |
前提 | 管理员用户正常登录情况下 |
测试流程 | 1)管理员点击商城管理下方的景点信息,进入添加页面填写信息。 2)填写完毕后点击进行提交。 |
预期结果 | 提交以后,页面会显示新的景点信息 |
密码修改功能测试:
表5-4 密码修改功能测试表
用例名称 | 密码修改测试用例 |
目的 | 测试密码修改功能 |
前提 | 旅游用户和管理员用户正常登录情况下 |
测试流程 | 1)点击密码修改并完成填写。 2)点击进行提交。 |
预期结果 | 使用新的密码可以登录 |
实际结果 | 实际结果与预期结果一致 |
通过编写沧州旅游攻略分享互动平台的测试用例,已经检测完毕用户登录功能测试、旅游商城展示功能、景点信息添加功能、密码修改功能测试,通过的测试为沧州旅游攻略分享互动平台的后期推广运营提供了强力的技术支撑。
网页设计制作 html上海市人才服务网什么播放软件新片多衡阳网站有哪些丹阳找工作的网站广东省江门市江海区疫情最新情况免费企业网站空间建设1688货源网一件代发官双肩包广州开发区第二幼儿园上海财务代理实力丽掌柜代理记账淘宝店铺运营推广的几种方式桂林生活网团购web制作一个简单的网页aso优化注意什么客户管理系统基础班东方丽人女子医院郑州app开发云双网页源代码是用什么语言书写的服装详情页设计模板福田公司董事长是谁企业平台流程建设与使用心得体会财务软件app泰安房产管理服务中心官网芜湖疫情最新情况最新消息今天北京最近疫情为什么这么严重新生活cms进货系统seo进行内部优化的目的是什么推广应用方案室内设计平面图包括什么广东品牌设计公司哪正规建筑工程公司是做什么的