基于java微信小程序的校园二手商城设计与实现

发布时间:2024-12-09 13:10

使用微信小程序支付,需扫描商家二维码 #生活知识# #生活经验# #软件#

基于java微信小程序的二手商城设计与实现 首先介绍一下SpringSecurity安全登陆框架微信小程序我用的是mysql数据库这是我小程序的用例图系统总体功能架构图系统功能模块设计数据库ER图数据库设计的表下面给你们看一下效果图下面给你们看一下核心部分代码

这是我毕设时候所写的小程序,本来也想和他们一样 写一个管理系统或者写一个网站 ,这样也好实现,可谁知道,我的导师和我说,不允许写网站或者管理系统,然后我就实在是没办法,选了个校园二手交易系统,唉 没办法,简直是写的我头疼,好在最后写的差不多。和你们分享一下吧 也希望你们能够顺利毕业。

首先介绍一下SpringSecurity安全登陆框架

Spring 是一个非常流行和成功的java应用开发框架。

Spring Security 基于Spring 框架,提供了一套web应用安全性的完整解决方案。

一般来说,Web 应用的安全性包括两部分:

1. 用户认证(Authentication)

用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。

2. 用户授权(Authorization)

用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。

一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。

对于上面提到的两种应用情景,Spring Security 框架都有很好的支持。

在用户认证方面,Spring Security 框架支持主流的认证方式,包括 HTTP 基本认证、HTTP 表单验证、HTTP 摘要认证、OpenID 和 LDAP 等。

在用户授权方面,Spring Security 提供了基于角色的访问控制和访问控制列表(Access Control List,ACL),可以对应用中的领域对象进行细粒度的控制。

微信小程序

小程序是一种建立在微信公众平台基础上的可即时打开的应用程序,他实现了腾讯所提到的“触手可及”的梦想,小程序不需要下载其他App,只需要打开微信扫一扫或者搜一下便可打开应用[7]。他的英文名称是Wechat Mini Program。自16年上线到现在一直是人
们开发设计的重点。已经有超过150万的开发者投入到了小程序的设计开发中。人们将
商店,游戏,便捷操作等等功能都添加到了小程序中,微信applet应用的发展,近年来
带动了业界许多人士,也给社会有关方面的人才提供了一个很好的就业平台。

微信applet是腾讯公司在微信基础上新增的功能模块,个人或团体通过对这个平台可以
进行开发来实现和特定群体的信息沟通互动。小程序和传统的App相比,具有以下几
个特定的优势[8]。
(1)小程序的开发相对于传统App来说,成本低,效益高,方便使用。
(2)小程序由于是建立在微信的基础上,所以更容易获得用户的亲睐。
(3)传统App开发周期长,成本高,小程序的门槛底,提高创业机率。
(4)App的排名竞争十分激烈,小程序不需要和他们竞争,其发展空间很大,对未来有着十分重大的影响。

我用的是mysql数据库

MySQL数据库支持多种语言开发,使得开发者能够使用许多不同的编程语言

去访问和连接。常见的数据库中,MySQL所具有的优势比如易读取,小型

等,已经使得大部分公司使用其作为后台数据库开发工具。MySQL存储、读

取和更新数据效率很快,例如在系统中,能够很快地对商品的详细信息、用

户的个人信息等做出一个很迅速的反应,使开发的效率和用户的体验等效率

得到了很大提高[11]。MySQL使用的结构化查询语句,既保留了传统且经典

的DML即查询、检索或者修改数据,DDL即对数据库中存在对象的创建、修

改或者删除,DCL即根据用户对数据的需求来做出的权限等操作,又会在数

据类型定义上增加全新的功能,使得数据更加精炼和准确,以便让用户得到

最好的体验。

MySQL数据库具有以下特点:

(1)算法优化查询SQL语句,搜索速度快。

(2)可以在多种操作系统上运行。有很好的可变性。

(3)可供各种各样的编程语言的API编写。

(4)所使用的CPU资源支持多线程进程。

(5)InnoDB作为默认的存储引擎,采用C++编写。

(6)任何独立的编程环境可通过网络上的客户端和服务器来编程,也可使用 在数据表和其他软件访问中嵌入时用作的名称。

(7)所使用的管理工具十分方便,并且数据库优化的操作也易上手。

(8)数据库内存大,可存放成千上万条数据信息的记录。

这是我小程序的用例图

主要分游客和管理员两个角色,游客进入微信小程序只能简单的浏览商品和查看商品的信息。用户需要授权登陆之后才可以进行商品购买收藏等操作。
后台管理员部分是单独的分离开来,用账号密码进行登陆到网页进行管理

系统总体功能架构图

本系统前端采用的微信小程序,后端是基于SpringBoot框架来设计的后台系统,数据库采用关系型数据库MySQL,用Navicate可视化软件来进行数据库的分析和设计。后端的图表采用的Echarts,把Java代码和微信小程序开发相结合结合,设计该小程序。本系统分为三个逻辑相互独立的层,每个层都有定义好的接口,整体架构图
在这里插入图片描述

系统功能模块设计

这是整个小程序系统的功能模块图。
在这里插入图片描述

数据库ER图

在这里插入图片描述

去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block var foo = 'bar'; 12

数据库设计的表

用户表
在这里插入图片描述
管理员表
在这里插入图片描述
商品表
在这里插入图片描述
数据库模型
在这里插入图片描述

下面给你们看一下效果图

这是登录到小程序首页的效果图
在这里插入图片描述
这是收藏的列表
商品发布
在这里插入图片描述
消息沟通交流
在这里插入图片描述
在这里插入图片描述
我的信息资料
在这里插入图片描述

这是管理员的主界面
在这里插入图片描述

下面给你们看一下核心部分代码

首先是登陆部分的实现,代码太多 !!!!!!!

/** * @author ddj */ @Slf4j @RestController @RequestMapping("/api/user") public class UserController { @Autowired private CurrentUser currentUser; @Autowired private UserRepository userRepository; @Value("${weChat.appid}") String appid; @Value("${weChat.secret}") String secret; /** * code登录获取用户openid * @param @RequestBody LoginUser loginUser * @return * @throws Exception */ @PostMapping("/login") public ResponseResult login(@RequestBody LoginUser loginUser)throws Exception{ JSONObject sessionInfo = JSONObject.parseObject(jcode2Session(loginUser.getCode())); String openid =sessionInfo.getString("openid"); String sessionkey=sessionInfo.getString("session_key"); User optionalUser = userRepository.findByOpenid(openid); if (optionalUser==null){ optionalUser = new User(); optionalUser.setOpenid(openid); } optionalUser.setSessienkey(sessionkey); optionalUser.setNickname(loginUser.getNickName()); optionalUser.setHeadurl(loginUser.getHeadUrl()); optionalUser=userRepository.save(optionalUser); ArrayList roles=new ArrayList<String>(); roles.add("user"); String token = JwtTokenUtils.createToken(optionalUser.getSessienkey(),roles); return ResponseResult.ok("登录成功",token); } /** * code登录获取用户openid * @param @RequestBody LoginUser loginUser * @return * @throws Exception */ @PostMapping("/info") public ResponseResult info()throws Exception{ return ResponseResult.ok("success",userRepository.findBySessienkey(currentUser.getCurrentUser().getUsername())); } /** * 登录凭证校验 * @param code * @return * @throws Exception */ private String jcode2Session(String code)throws Exception{ String sessionInfo = Jcode2SessionUtil.jscode2session(appid,secret,code,"authorization_code");//登录grantType固定 log.info(sessionInfo); return sessionInfo; } }

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

商品的上下架处理以及收藏的实现

/** * @ddj */ @RestController @RequestMapping("/api/goods") public class ApiGoodsController { @Autowired GoodsRepository goodsRepository; @Autowired CurrentUser currentUser; @Autowired UserRepository userRepository; @Autowired LoveRecordRepository loveRecordRepository; @Autowired OrderRepository orderRepository; @GetMapping("/all") public ResponseResult getPageData() { return ResponseResult.ok(goodsRepository.findAll()); } @PostMapping("/publish") public ResponseResult save(@RequestBody Goods categories) { categories.setPublishUserId(currentUser.getCurrentUser().getUserInfo().getId()); categories.setStatus(1); goodsRepository.save(categories); return ResponseResult.ok(categories); } @GetMapping("/publish_list") public ResponseResult publishList(@RequestParam(value = "page", defaultValue = "1") int pageNum) { int user_id= currentUser.getCurrentUser().getUserInfo().getId(); return ResponseResult.ok(goodsRepository.findByPublishUserId(user_id,PageRequest.of(pageNum-1, 20))); } @GetMapping("/down") public ResponseResult down(@RequestParam(value = "goods_id", defaultValue = "1") int goods_id,@RequestParam(value = "status", defaultValue = "0") int status) { Goods goods = goodsRepository.findById(goods_id).get(); goods.setStatus(status); goodsRepository.save(goods); return ResponseResult.ok("下架成功"); } @GetMapping("/getdetail") public ResponseResult detail(@RequestParam(value = "goods_id", defaultValue = "1") int goods_id) { Optional<Goods> optional= goodsRepository.findById(goods_id); if(optional.isPresent()){ Goods good= optional.get(); User user= userRepository.findById(good.getPublishUserId()).get(); user.setOpenid(""); user.setStatus(null); user.setSessienkey(null); GoodsDetailsInfo goodsInfo =new GoodsDetailsInfo(); goodsInfo.setGoods(good); goodsInfo.setUser(user); goodsInfo.set_loved(loveRecordRepository.findByGoodsidAndUserid(goods_id,user.getId()).isPresent()); goodsInfo.setRecommends(goodsRepository.findRecommandGoods(good.getCategoriesId())); goodsInfo.setOrders(orderRepository.getEvaluation(good.getPublishUserId())); return ResponseResult.ok(goodsInfo); } return ResponseResult.error(40003,"没有该商品"); } @GetMapping("/love") public ResponseResult love(@RequestParam(value = "goods_id", defaultValue = "1") int goods_id) { int user_id= currentUser.getCurrentUser().getUserInfo().getId(); Optional<LoveRecord> optional= loveRecordRepository.findByGoodsidAndUserid(goods_id,user_id); if (optional.isPresent()){ loveRecordRepository.delete(optional.get()); return ResponseResult.ok("取消收藏成功",false); }else{ LoveRecord lr=new LoveRecord(); lr.setGoodsid(goods_id); lr.setUserid(user_id); loveRecordRepository.save(lr); return ResponseResult.ok("收藏成功"); } } @GetMapping("/lovelist") public ResponseResult lovelist(@RequestParam(value = "page", defaultValue = "1") int pageNum) { int user_id= currentUser.getCurrentUser().getUserInfo().getId(); return ResponseResult.ok(goodsRepository.lovegoodslist(user_id,PageRequest.of(pageNum-1, 20))); } @GetMapping("/getlist") public ResponseResult list(@RequestParam(value = "page", defaultValue = "1") int pageNum, @RequestParam(value = "categories_id",defaultValue = "1") int categories_id) { return ResponseResult.ok(goodsRepository.findByCategoriesId(categories_id,PageRequest.of(pageNum-1, 100))); } @GetMapping("/search") public ResponseResult search(@RequestParam(value = "page", defaultValue = "1") int pageNum, @RequestParam(value = "key",defaultValue = "") String searchKey) { return ResponseResult.ok(goodsRepository.searchGoods(searchKey,PageRequest.of(pageNum-1, 100))); } }

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100

这是地址部分的代码

/** * @ddj */ @Slf4j @RestController @RequestMapping("/api/address") public class AddressController { @Autowired private CurrentUser currentUser; @Autowired private AddressRepository addressRepository; @GetMapping("/all") public ResponseResult getPageData() { return ResponseResult.ok(addressRepository.findAll()); } @PostMapping("/save") public ResponseResult save(@RequestBody Address categories) { categories.setUser_id(currentUser.getCurrentUser().getUserInfo().getId()); addressRepository.save(categories); return ResponseResult.ok(categories); } @GetMapping("/delete") public ResponseResult deleteAddress(@RequestParam(value = "id", defaultValue = "1") int id) { addressRepository.deleteById(id); return ResponseResult.ok("删除成功"); } @GetMapping("/set_default") public ResponseResult set_default(@RequestParam(value = "id") int id,@RequestParam(value = "is_default") int is_default) { addressRepository.clear_default(currentUser.getCurrentUser().getUserInfo().getId()); if (is_default==1){ addressRepository.set_default(id); } return ResponseResult.ok("设置成功"); } }

12345678910111213141516171819202122232425262728293031323334353637

订单部分代码

/** * @ddj */ @RestController @RequestMapping("/api/order") public class OrderController { @Autowired CurrentUser currentUser; @Autowired UserRepository userRepository; @Autowired GoodsRepository goodsRepository ; @Autowired OrderRepository orderRepository ; @GetMapping("/create") public ResponseResult publishList(@RequestParam(value = "goods_id") int goods_id,@RequestParam(value = "address_id") int address_id) { Goods goods = goodsRepository.findById(goods_id).get(); User seller = userRepository.findById(goods.getPublishUserId()).get(); User buyer = userRepository.findById(currentUser.getCurrentUser().getUserInfo().getId()).get(); if (goods.getStatus()==1){ Order order=new Order(); order.setGoodsId(goods_id); order.setUserId(currentUser.getCurrentUser().getUserInfo().getId()); order.setSn(generateOrderNumber()); order.setAddress_id(address_id); order.setStatus(1); order.setCreate_time(DateUtils.format(new Date(),DateUtils.ISO8601_DATETIME_PATTERN)); int id=orderRepository.save(order).getId(); goods.setStatus(2); goodsRepository.save(goods); buyer.setBuyTimes(buyer.getBuyTimes()+1); seller.setSellCount(seller.getSellCount()+1); userRepository.save(buyer); userRepository.save(seller); return ResponseResult.ok("下单成功",id); }else{ return ResponseResult.error(5003,"下单失败"); } } @GetMapping("/getdetail") public ResponseResult detail(@RequestParam(value = "order_id", defaultValue = "1") int order_id) { Optional<Order> optional= orderRepository.findById(order_id); if(optional.isPresent()){ Order order = optional.get(); Goods good= goodsRepository.findById(order.getGoodsId()).get(); User publisher= userRepository.findById(good.getPublishUserId()).get(); User buyer= userRepository.findById(order.getUserId()).get(); buyer.setOpenid(""); buyer.setStatus(null); buyer.setSessienkey(null); publisher.setOpenid(""); publisher.setStatus(null); publisher.setSessienkey(null); OrdertDetailsInfo odi =new OrdertDetailsInfo(); odi.setGoods(good); odi.setPublisher(publisher); odi.setBuyer(buyer); odi.setOrder(order); odi.setIsbuyer(buyer.getId()==currentUser.getCurrentUser().getUserInfo().getId()); return ResponseResult.ok(odi); } return ResponseResult.error(40003,"没有该商品"); } @GetMapping("/getbuylist") public ResponseResult lovelist(@RequestParam(value = "page", defaultValue = "1") int pageNum) { int user_id= currentUser.getCurrentUser().getUserInfo().getId(); return ResponseResult.ok(orderRepository.getBuyList(user_id,PageRequest.of(pageNum-1, 20))); } @GetMapping("/getselllist") public ResponseResult sellout(@RequestParam(value = "page", defaultValue = "1") int pageNum) { int user_id= currentUser.getCurrentUser().getUserInfo().getId(); return ResponseResult.ok(orderRepository.getSellOutrList(user_id,PageRequest.of(pageNum-1, 20))); } @GetMapping("/sendout") public ResponseResult sendout(@RequestParam(value = "order_id", defaultValue = "1") int order_id,@RequestParam(value = "wldh", defaultValue = "1") String wldh) { Order order = orderRepository.findById(order_id).get(); order.setKddh(wldh); order.setStatus(2); order.setSend_time(DateUtils.format(new Date(),DateUtils.ISO8601_DATETIME_PATTERN)); orderRepository.save(order); return ResponseResult.ok("发货成功"); } @GetMapping("/receive") public ResponseResult receive(@RequestParam(value = "order_id", defaultValue = "1") int order_id,@RequestParam(value = "evaluation", defaultValue = "") String evaluation) { Order order = orderRepository.findById(order_id).get(); order.setStatus(3); order.setEvaluation(evaluation); order.setFinish_time(DateUtils.format(new Date(),DateUtils.ISO8601_DATETIME_PATTERN)); orderRepository.save(order); return ResponseResult.ok("收货成功"); } public static String generateOrderNumber() { Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); String timeStr = DateUtils.format(cal.getTime(), "yyyyMMddHHmmssSSS"); return timeStr + CharUtil.getRandomNum(6); } }

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115

网址:基于java微信小程序的校园二手商城设计与实现 https://www.yuejiaxmz.com/news/view/423537

相关内容

基于微信小程序校园二手交易平台设计与实现(源码+lw+部署文档+讲解等)
基于uniapp微信小程序的校园二手书交易系统
基于微信小程序的校园二手闲置物品交易平台的设计与实现
小程序设计基本微信小程序的校园生活助手系统
【开题报告】基于Springboot+vue校园二手交易平台微信小程序(程序+源码+论文) 计算机毕业设计
【毕业设计】基于微信小程序的校园二手书籍拍卖系统小程序
【计算机开题报告】基于微信小程序的校园二手交易平台
基于微信小程序的校园二手图书交易小程序设计与实现(源码+lw+部署+讲解)
【计算机毕业设计】基于微信小程序的校园生活服务平台
【毕业设计】Java基于微信小程序的同城二手物品租赁系统

随便看看