基于Springbot+微信小程序的购药平台的设计与实现

news2024/11/16 3:19:59

基于Springbot+微信小程序的购药平台的设计与实现

✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌

🍅文末获取项目下载方式🍅


一、项目背景介绍:

随着近年来我国网络基础设施的不断完善、信息技术的不断发展和第三方支付工具的广泛普及。网络购药己经成为了人们生活中的一项重要内容。基于PC平台的互联网商城系统方便了人们足不出户就能享受到购物的乐趣。而基于手机端的微信小程序互联网购物则发挥了智能终端的便携性,能使大众随时随地购买自己喜欢的商品。它是将线下的商品交易与互联网结合,让互联网成为线上交易的平台。此购药商城系统就是以互联网为基础,生活圈周边为基本单位,充分利用社区的信息化基础设施。将生活圈周边的小型药店与网络商城结合起来运营的一种新型电子商务模式,是传统电子商务的一次新的突破。其线上更加注重的是满足消费者便利的需求和会员的互动营销以及为实体店导流,线下则更多的是更好、更便捷的为用户提供现代化的智能购药体验服务。
新零售发展的核心是满足特定购物场景的顾客需求。在顾客已经信息化、技术化、移动互联网化的趋势下,快购、快送、快结的购物方式更被用户所青睐。但对于传统零售来说,为线下店铺提供一种方便快捷的线上购药渠道是增強顾客体验、提高零售效率的重要途径。为此,近年来国内外零售商都已经普遍提供线上与线下相合的社区类购物服务。纵观当下主流的线上购药系统主要有PC端购药系统,APP 购药系统,依赖于第三方应用程序的购物入口等。2017 年初,微信小程序的正式上线进一步活了微信的生态圈,微信小程序与原生 APP 相比最大的特点就是用户无需下载安装,通过扫码或搜索就可以获得小程序,由此可见基于微信和即用即走的轻量级小程序平台可以更好的连接线下的服务。

二、项目技术简介:

  1. JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
  2. Vue:Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。
    Vue是一个独立的社区驱动的项目,它是由尤雨溪在2014年作为其个人项目创建, 是一个成熟的、经历了无数实战考验的框架,它是目前生产环境中使用最广泛的JavaScript框架之一,可以轻松处理大多数web应用的场景,并且几乎不需要手动优化,并且Vue完全有能力处理大规模的应用。
  3. SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
  4. Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。
  5. smart:微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。
    全面开放申请后,主体类型为企业、政府、媒体、其他组织或个人的开发者,均可申请注册小程序。微信小程序、微信订阅号、微信服务号、微信企业号是并行的体系。
    微信小程序是一种不用下载就能使用的应用,也是一项创新,经过将近两年的发展,已经构造了新的微信小程序开发环境和开发者生态。微信小程序也是这么多年来中国IT行业里一个真正能够影响到普通程序员的创新成果,已经有超过150万的开发者加入到了微信小程序的开发,与我们一起共同发力推动微信小程序的发展,微信小程序应用数量超过了一百万,覆盖200多个细分的行业,日活用户达到两个亿,微信小程序还在许多城市实现了支持地铁、公交服务。微信小程序发展带来更多的就业机会,2017年小程序带动就业104万人,社会效应不断提升。
  6. Spring-Mvc:Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框。
  7. Html:HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。
    超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便。

三、系统功能模块介绍:

功能模块图

四、数据库设计:

1:mall_ad(mall_ad)

字段名类型默认值列注释
idint(11)NULL
namevarchar(63)NULL广告标题
linkvarchar(255)NULL所广告的商品页面或者活动页面链接地址
urlvarchar(255)NULL广告宣传
positiontinyint(3)NULL广告位置:1则是首页
contentvarchar(255)NULL活动内容
start_timedatetime(0)NULL广告开始时间
end_timedatetime(0)NULL广告结束时间
enabledtinyint(1)NULL是否启动
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

2:mall_address(mall_address)

字段名类型默认值列注释
idint(11)NULL
namevarchar(63)NULL收货人名称
user_idint(11)NULL用户表的用户ID
provincevarchar(63)NULL行政区域表的省ID
cityvarchar(63)NULL行政区域表的市ID
countyvarchar(63)NULL行政区域表的区县ID
address_detailvarchar(127)NULL详细收货地址
area_codechar(6)NULL地区编码
postal_codechar(6)NULL邮政编码
telvarchar(20)NULL手机号码
is_defaulttinyint(1)NULL是否默认地址
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

3:mall_admin(mall_admin)

字段名类型默认值列注释
idint(11)NULL
usernamevarchar(63)NULL管理员名称
passwordvarchar(63)NULL管理员密码
last_login_ipvarchar(63)NULL最近一次登录IP地址
last_login_timedatetime(0)NULL最近一次登录时间
avatarvarchar(255)NULL头像
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除
role_idsvarchar(127)NULL角色列表

4:mall_aftersale(mall_aftersale)

字段名类型默认值列注释
idint(11)NULL
aftersale_snvarchar(63)NULL售后编号
order_idint(11)NULL订单ID
user_idint(11)NULL用户ID
typesmallint(6)NULL售后类型,0是未收货退款,1是已收货(无需退货)退款,2用户退货退款
reasonvarchar(31)NULL退款原因
amountVARCHAR(255)NULL

5:mall_brand(mall_brand)

字段名类型默认值列注释
idint(11)NULL
namevarchar(255)NULL品牌商名称
descvarchar(255)NULL品牌商简介
pic_urlvarchar(255)NULL品牌商页的品牌商
sort_ordertinyint(3)NULL
floor_priceVARCHAR(255)NULL

6:mall_cart(mall_cart)

字段名类型默认值列注释
idint(11)NULL
user_idint(11)NULL用户表的用户ID
goods_idint(11)NULL商品表的商品ID
goods_snvarchar(63)NULL商品编号
goods_namevarchar(127)NULL商品名称
product_idint(11)NULL商品货品表的货品ID
priceVARCHAR(255)NULL

7:mall_category(mall_category)

字段名类型默认值列注释
idint(11)NULL
namevarchar(63)NULL类目名称
keywordsvarchar(1023)NULL类目关键字,以JSON数组格式
descvarchar(255)NULL类目广告语介绍
pidint(11)NULL父类目ID
icon_urlvarchar(255)NULL类目图标
pic_urlvarchar(255)NULL类目
levelvarchar(255)NULL
sort_ordertinyint(3)NULL排序
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

8:mall_collect(mall_collect)

字段名类型默认值列注释
idint(11)NULL
user_idint(11)NULL用户表的用户ID
value_idint(11)NULL如果type=0,则是商品ID;如果type=1,则是专题ID
typetinyint(3)NULL收藏类型,如果type=0,则是商品ID;如果type=1,则是专题ID
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

9:mall_comment(mall_comment)

字段名类型默认值列注释
idint(11)NULL
value_idint(11)NULL如果type=0,则是商品评论;如果是type=1,则是专题评论。
typetinyint(3)NULL评论类型,如果type=0,则是商品评论;如果是type=1,则是专题评论;
contentvarchar(1023)NULL评论内容
admin_contentvarchar(511)NULL管理员回复内容
user_idint(11)NULL用户表的用户ID
has_picturetinyint(1)NULL是否含有
pic_urlsvarchar(1023)NULL地址列表,采用JSON数组格式
starsmallint(6)NULL评分,1-5
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

10:mall_coupon(mall_coupon)

字段名类型默认值列注释
idint(11)NULL
namevarchar(63)NULL优惠券名称
descvarchar(127)NULL优惠券介绍,通常是显示优惠券使用限制文字
tagvarchar(63)NULL优惠券标签,例如新人专用
totalint(11)NULL优惠券数量,如果是0,则是无限量
discountVARCHAR(255)NULL

11:mall_coupon_user(mall_coupon_user)

字段名类型默认值列注释
idint(11)NULL
user_idint(11)NULL用户ID
coupon_idint(11)NULL优惠券ID
statussmallint(6)NULL使用状态

12:mall_feedback(mall_feedback)

字段名类型默认值列注释
idint(11)NULL
user_idint(11)NULL用户表的用户ID
usernamevarchar(63)NULL用户名称
mobilevarchar(20)NULL手机号
feed_typevarchar(63)NULL反馈类型
contentvarchar(1023)NULL反馈内容
statusint(3)NULL状态
has_picturetinyint(1)NULL是否含有
pic_urlsvarchar(1023)NULL地址列表,采用JSON数组格式
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

13:mall_footprint(mall_footprint)

字段名类型默认值列注释
idint(11)NULL
user_idint(11)NULL用户表的用户ID
goods_idint(11)NULL浏览商品ID
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

14:mall_goods(mall_goods)

字段名类型默认值列注释
idint(11)NULL
goods_snvarchar(63)NULL商品编号
namevarchar(127)NULL商品名称
category_idint(11)NULL商品所属类目ID
brand_idint(11)NULL
galleryvarchar(1023)NULL商品宣传列表,采用JSON数组格式
keywordsvarchar(255)NULL商品关键字,采用逗号间隔
briefvarchar(255)NULL商品简介
is_on_saletinyint(1)NULL是否上架
sort_ordersmallint(4)NULL
pic_urlvarchar(255)NULL商品页面商品
share_urlvarchar(255)NULL商品分享海报
is_newtinyint(1)NULL是否新品首发,如果设置则可以在新品首发页面展示
is_hottinyint(1)NULL是否人气推荐,如果设置则可以在人气推荐页面展示
unitvarchar(31)NULL商品单位,例如件、盒
counter_priceVARCHAR(255)NULL

15:mall_goods_product(mall_goods_product)

字段名类型默认值列注释
idint(11)NULL
goods_idint(11)NULL商品表的商品ID
specificationsvarchar(1023)NULL商品规格值列表,采用JSON数组格式
priceVARCHAR(255)NULL

16:mall_goods_specification(mall_goods_specification)

字段名类型默认值列注释
idint(11)NULL
goods_idint(11)NULL商品表的商品ID
specificationvarchar(255)NULL商品规格名称
valuevarchar(255)NULL商品规格值
pic_urlvarchar(255)NULL商品规格
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

17:mall_groupon(mall_groupon)

字段名类型默认值列注释
idint(11)NULL
order_idint(11)NULL关联的订单ID
groupon_idint(11)NULL如果是开团用户,则groupon_id是0;如果是参团用户,则groupon_id是团购活动ID
rules_idint(11)NULL团购规则ID,关联mall_groupon_rules表ID字段
user_idint(11)NULL用户ID
share_urlvarchar(255)NULL团购分享地址
creator_user_idint(11)NULL开团用户ID
creator_user_timedatetime(0)NULL开团时间
statussmallint(6)NULL团购活动状态,开团未支付则0,开团中则1,开团失败则2
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

18:mall_groupon_rules(mall_groupon_rules)

字段名类型默认值列注释
idint(11)NULL
goods_idint(11)NULL商品表的商品ID
goods_namevarchar(127)NULL商品名称
pic_urlvarchar(255)NULL商品或者商品货品
discountVARCHAR(255)NULL

19:mall_issue(mall_issue)

字段名类型默认值列注释
idint(11)NULL
questionvarchar(255)NULL问题标题
answervarchar(255)NULL问题答案
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

20:mall_keyword(mall_keyword)

字段名类型默认值列注释
idint(11)NULL
keywordvarchar(127)NULL关键字
urlvarchar(255)NULL关键字的跳转链接
is_hottinyint(1)NULL是否是热门关键字
is_defaulttinyint(1)NULL是否是默认关键字
sort_orderint(11)NULL排序
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

21:mall_log(mall_log)

字段名类型默认值列注释
idint(11)NULL
adminvarchar(45)NULL管理员
ipvarchar(45)NULL管理员地址
typeint(11)NULL操作分类
actionvarchar(45)NULL操作动作
statustinyint(1)NULL操作状态
resultvarchar(127)NULL操作结果,或者成功消息,或者失败消息
commentvarchar(255)NULL补充信息
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

22:mall_notice(mall_notice)

字段名类型默认值列注释
idint(11)NULL
titlevarchar(63)NULL通知标题
contentvarchar(511)NULL通知内容
admin_idint(11)NULL创建通知的管理员ID,如果是系统内置通知则是0.
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

23:mall_notice_admin(mall_notice_admin)

字段名类型默认值列注释
idint(11)NULL
notice_idint(11)NULL通知ID
notice_titlevarchar(63)NULL通知标题
admin_idint(11)NULL接收通知的管理员ID
read_timedatetime(0)NULL阅读时间,如果是NULL则是未读状态
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

24:mall_order(mall_order)

字段名类型默认值列注释
idint(11)NULL
user_idint(11)NULL用户表的用户ID
order_snvarchar(63)NULL订单编号
order_statussmallint(6)NULL订单状态
aftersale_statussmallint(6)NULL售后状态,0是可申请,1是用户已申请,2是管理员审核通过,3是管理员退款成功,4是管理员审核拒绝,5是用户已取消
consigneevarchar(63)NULL收货人名称
mobilevarchar(63)NULL收货人手机号
addressvarchar(127)NULL收货具体地址
messagevarchar(512)NULL用户订单留言
goods_priceVARCHAR(255)NULL

25:mall_order_goods(mall_order_goods)

字段名类型默认值列注释
idint(11)NULL
order_idint(11)NULL订单表的订单ID
goods_idint(11)NULL商品表的商品ID
goods_namevarchar(127)NULL商品名称
goods_snvarchar(63)NULL商品编号
product_idint(11)NULL商品货品表的货品ID
numbersmallint(5)NULL商品货品的购买数量
priceVARCHAR(255)NULL

26:mall_permission(mall_permission)

字段名类型默认值列注释
idint(11)NULL
role_idint(11)NULL角色ID
permissionvarchar(63)NULL权限
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

27:mall_region(mall_region)

字段名类型默认值列注释
idint(11)NULL
pidint(11)NULL行政区域父ID,例如区县的pid指向市,市的pid指向省,省的pid则是0
namevarchar(120)NULL行政区域名称
typetinyint(3)NULL行政区域类型,如如1则是省,如果是2则是市,如果是3则是区县
codeint(11)NULL行政区域编码

28:mall_role(mall_role)

字段名类型默认值列注释
idint(11)NULL
namevarchar(63)NULL角色名称
descvarchar(1023)NULL角色描述
enabledtinyint(1)NULL是否启用
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

29:mall_search_history(mall_search_history)

字段名类型默认值列注释
idint(11)NULL
user_idint(11)NULL用户表的用户ID
keywordvarchar(63)NULL搜索关键字
fromvarchar(63)NULL搜索来源,如pc、wx、app
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除

30:mall_storage(mall_storage)

字段名类型默认值列注释
idint(11)NULL
keyvarchar(63)NULL文件的唯一索引
namevarchar(255)NULL文件名
typevarchar(20)NULL文件类型
sizeint(11)NULL文件大小
urlvarchar(255)NULL文件访问链接
add_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
deletedtinyint(1)NULL逻辑删除
idUSINGNULL
31:mall_topic(mall_topic)
字段名类型默认值列注释
idint(11)NULL
titlevarchar(255)NULL专题标题
subtitlevarchar(255)NULL专题子标题
contenttextNULL专题内容,富文本格式
priceVARCHAR(255)NULL

32:mall_user(mall_user)

字段名类型默认值列注释
idint(11)NULL
usernamevarchar(63)NULL用户名称
passwordvarchar(63)NULL用户密码
gendertinyint(3)NULL性别:0未知,1男,1女
birthdaydateNULL生日
last_login_timedatetime(0)NULL最近一次登录时间
last_login_ipvarchar(63)NULL最近一次登录IP地址
user_leveltinyint(3)NULL0普通用户,1VIP用户,2高级VIP用户
nicknamevarchar(63)NULL用户昵称或网络名称
mobilevarchar(20)NULL用户手机号码
avatarvarchar(255)NULL用户头像
weixin_openidvarchar(63)NULL微信登录openid
session_keyvarchar(100)NULL微信登录会话KEY
statustinyint(3)NULL0可用

五、功能模块:

  1. 登录:在微信小程序端点击登录按钮,系统将会弹出 是否确认使用微信用户信息,点击确认即可登录完成。

    登录

  2. 商品详情:本模块主要用来展示药品的基本信息,比如药品的轮播介绍图,药品名称,价格,以及参数。
    用户可以在此界面使用收藏商品功能,添加购物车,和立即购买功能。购买完成之后既到了订单里面。

    商品详情

  3. 个人中心:个人中心主要分为订单模块,平台服务,以及必备工具等。
    在订单模块中可以快速的减速出待付款,代发货,待收货等订单信息,平台服务中可以查询出个人的商品收藏信息,以及收货地址的管理。必备工具中可以查询帮助,反馈意见,浏览足迹等。

    个人中心

  4. 商品管理:此模块是商品数据的来源,在后台系统中编辑添加成功方可在用户端进行展示操作,主要有商品的添加,查看,编辑,删除,导出等功能。

    商品管理

  5. 订单管理:小程序端用户下单之后方可在此界面中查询到对应数据,此模块主要管理整个系统的订单,其中包括订单查询,详情,发货,退款,导出等相应操作。

    订单管理

  6. 用户管理模块:微信小程序端用户登录之后,其用户信息将会被系统所收集,收集到的信息可以在用户管理界面进行对应测查看操作,也可以对数据进行导出,方面进行数据统计分析。

    用户管理模块

六、代码示例:

登录
 public Object loginByWeixin(@RequestBody WxLoginInfo wxLoginInfo, HttpServletRequest request) {
        String code = wxLoginInfo.getCode();
        UserInfo userInfo = wxLoginInfo.getUserInfo();
        if (code == null || userInfo == null) {
            return ResponseUtil.badArgument();
        }

        String sessionKey = null;
        String openId = null;
        try {
            WxMaJscode2SessionResult result = this.wxService.getUserService().getSessionInfo(code);
            sessionKey = result.getSessionKey();
            openId = result.getOpenid();
        } catch (Exception e) {
            e.printStackTrace();
        }

        if (sessionKey == null || openId == null) {
            return ResponseUtil.fail();
        }

        MallUser user = userService.queryByOid(openId);
        if (user == null) {
            user = new MallUser();
            user.setUsername(openId);
            user.setPassword(openId);
            user.setWeixinOpenid(openId);
            user.setAvatar(userInfo.getAvatarUrl());
            user.setNickname(userInfo.getNickName());
            user.setGender(userInfo.getGender());
            user.setUserLevel((byte) 0);
            user.setStatus((byte) 0);
            user.setLastLoginTime(LocalDateTime.now());
            user.setLastLoginIp(IpUtil.getIpAddr(request));
            user.setSessionKey(sessionKey);

            userService.add(user);

            // 新用户发送注册优惠券
            couponAssignService.assignForRegister(user.getId());
        } else {
            user.setLastLoginTime(LocalDateTime.now());
            user.setLastLoginIp(IpUtil.getIpAddr(request));
            user.setSessionKey(sessionKey);
            if (userService.updateById(user) == 0) {
                return ResponseUtil.updatedDataFailed();
            }
        }

        // token
        String token = UserTokenManager.generateToken(user.getId());

        Map<Object, Object> result = new HashMap<Object, Object>();
        result.put("token", token);
        result.put("userInfo", userInfo);
        return ResponseUtil.ok(result);
    }
商品详情
	// 商品信息
		MallGoods info = goodsService.findById(id);

		// 商品属性
		Callable<List> goodsAttributeListCallable = () -> goodsAttributeService.queryByGid(id);

		// 商品规格 返回的是定制的GoodsSpecificationVo
		Callable<Object> objectCallable = () -> goodsSpecificationService.getSpecificationVoList(id);

		// 商品规格对应的数量和价格
		Callable<List> productListCallable = () -> productService.queryByGid(id);

		// 商品问题,这里是一些通用问题
		Callable<List> issueCallable = () -> goodsIssueService.querySelective("", 1, 4, "", "");

		// 商品品牌商
		Callable<MallBrand> brandCallable = ()->{
			Integer brandId = info.getBrandId();
			MallBrand brand;
			if (brandId == 0) {
				brand = new MallBrand();
			} else {
				brand = brandService.findById(info.getBrandId());
			}
			return brand;
		};
个人中心
 public List<MallAddress> queryByUid(Integer uid) {
        MallAddressExample example = new MallAddressExample();
        example.or().andUserIdEqualTo(uid).andDeletedEqualTo(false);
        return addressMapper.selectByExample(example);
    }
商品管理
public List<MallGoods> querySelective(Integer goodsId, String goodsSn, String name, Integer page, Integer size, String sort, String order) {
        MallGoodsExample example = new MallGoodsExample();
        MallGoodsExample.Criteria criteria = example.createCriteria();

        if (goodsId != null) {
            criteria.andIdEqualTo(goodsId);
        }
        if (!StringUtils.isEmpty(goodsSn)) {
            criteria.andGoodsSnEqualTo(goodsSn);
        }
        if (!StringUtils.isEmpty(name)) {
            criteria.andNameLike("%" + name + "%");
        }
        criteria.andDeletedEqualTo(false);

        if (!StringUtils.isEmpty(sort) && !StringUtils.isEmpty(order)) {
            example.setOrderByClause(sort + " " + order);
        }

        PageHelper.startPage(page, size);
        return goodsMapper.selectByExampleWithBLOBs(example);
    }
订单管理
Integer orderId = JacksonUtil.parseInteger(body, "orderId");
        String shipSn = JacksonUtil.parseString(body, "shipSn");
        String shipChannel = JacksonUtil.parseString(body, "shipChannel");
        if (orderId == null || shipSn == null || shipChannel == null) {
            return ResponseUtil.badArgument();
        }

        MallOrder order = orderService.findById(orderId);
        if (order == null) {
            return ResponseUtil.badArgument();
        }

        // 如果订单不是已付款状态,则不能发货
        if (!order.getOrderStatus().equals(OrderUtil.STATUS_PAY)) {
            return ResponseUtil.fail(ORDER_CONFIRM_NOT_ALLOWED, "订单不能确认收货");
        }

        order.setOrderStatus(OrderUtil.STATUS_SHIP);
        order.setShipSn(shipSn);
        order.setShipChannel(shipChannel);
        order.setShipTime(LocalDateTime.now());
        if (orderService.updateWithOptimisticLocker(order) == 0) {
            return ResponseUtil.updatedDateExpired();
        }
        notifyService.notifySmsTemplate(order.getMobile(), NotifyType.SHIP, new String[]{shipChannel, shipSn});
        logHelper.logOrderSucceed("发货", "订单编号 " + order.getOrderSn());
        return ResponseUtil.ok();
用户管理模块
public List<MallUser> querySelective(String username, String mobile, Integer page, Integer size, String sort, String order) {
        MallUserExample example = new MallUserExample();
        MallUserExample.Criteria criteria = example.createCriteria();
        if (!StringUtils.isEmpty(username)) {
            criteria.andUsernameLike("%" + username + "%");
        }
        if (!StringUtils.isEmpty(mobile)) {
            criteria.andMobileEqualTo(mobile);
        }
        criteria.andDeletedEqualTo(false);
        if (!StringUtils.isEmpty(sort) && !StringUtils.isEmpty(order)) {
            example.setOrderByClause(sort + " " + order);
        }
        PageHelper.startPage(page, size);
        return userMapper.selectByExample(example);
    }
        }
    }
}

七、论文参考:

八、项目总结:

药品商城是当今社会的潮流,将现实生活中的实体零售药业转入到网络层面是一个非常有意义的事情,人们在需要购买一些日常药品的时候,不需要跑到实体药店甚至前往医院去购买,可以减少人们很多繁琐的问题,方便人们的生活。药品商城的实现设计与方法主要体现在一下工作中。
采用微信小程序的方式来作为用户端的主体,从而使得购买更加方便,并且搭配一个对应的后台管理系统来操作用户端的商品,用户端主要的功能在与向用户打造一套完整的下单流程,从商品的查看到最后的订单交易成功。后台管理的主要功能在于如何简洁的管理用户端的商品,订单等信息。
最后采用多人同时操作的步骤来模拟并发情况下的下单流程,从而测试对应的系统吞吐量,以及整个系统的性能。经过不间断的测试,系统运行基本稳定,前后端交互流畅,交互速度快,并且在并发的情况下系统也能基本支撑。讲过实际检验,系统能够胜任基本的商城功能操作,方便人们的日常生活。

九、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻

链接点击直达:下载链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/355102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jackson 序列化:Cannot deserialize value of type `java.time.LocalDateTime`

问题描述 使用 jackson 反序列化异常如下&#xff1a; Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type java.time.LocalDateTime from String “2023-02-13 19:43:01”: Failed to deserialize java.time.LocalDat…

MySQL的四种事务隔离级别

目录一、事务的基本要素&#xff08;ACID&#xff09;1、原子性&#xff08;Atomicity&#xff09;&#xff1a;2、一致性&#xff08;Consistency&#xff09;&#xff1a;3、隔离性&#xff08;Isolation&#xff09;&#xff1a;4、持久性&#xff08;Durability&#xff09…

使用canvas给上传的整张图片添加平铺的水印

写在开头 哈喽&#xff0c;各位倔友们又见面了&#xff0c;本章我们继续来分享一个实用小技巧&#xff0c;给图片加水印功能&#xff0c;水印功能的目的是为了保护网站或作者版权&#xff0c;防止内容被别人利用或白嫖。 但是网络中&#xff0c;是没有绝对安全的&#xff0c;…

iOS接入Google登录

1.在Google Cloud后台配置客户端ID 首先要在 Google Cloud 中创建一个项目。新创建的Project需要先配置同意屏幕。一共有4步骤需要配置。 1.OAuth 同意屏幕 User Type选择"外部"进行创建。填写必必要的信息&#xff0c;应用名称、用户支持电子邮件地址、开发者电子邮…

chatGPT是什么?chatGPT运用场景有哪些?

大家好&#xff0c;小编来为大家解答以下问题 chatGPT是什么&#xff1f;&#xff0c;chatGPT概念股有哪些&#xff1f;一个有趣的事情&#xff0c;一个有趣的事情&#xff0c;现在让我们一起来看看吧&#xff01; 1、chatpgt是什么 ChatGPT是OpenAI开发的大型预训练语言模型。…

yolov5 onnx 前后处理+运行推理(暂记)

代码在这个基础上改的&#xff0c;虽然跑通了&#xff0c;还是很混乱&#xff0c;这里先简单记录一下处理的流程&#xff1a; yolov5 环境设置yolov5 网络结构ONNX yolov5导出 convert error --grid番外&#xff1a;onnx直接操作番外&#xff1a;yolov5的重新训练 result 0 -…

[安装之4] 联想ThinkPad 加装固态硬盘教程

方案&#xff1a;保留原有的机械硬盘&#xff0c;再加装一个固态硬盘作为系统盘。由于X250没有光驱&#xff0c;这样就无法使用第二个2.5寸的硬盘。还好&#xff0c;X250留有一个M.2接口&#xff0c;这样&#xff0c;就可以使用NGFF M.2接口的固态硬盘。不过&#xff0c;这种接…

短视频时代是靠什么赚钱的,介绍常见的5种方式,简单明了

目前&#xff0c;短视频越来越火热&#xff0c;大家都知道做短视频可以赚钱&#xff0c;那么究竟是靠什么赚钱的&#xff0c;又有几个人知道呢&#xff1f;短视频创业有个人、有团队&#xff0c;怎么实现团队的生存和发展。 常见的几种变现方式有&#xff1a; 1、平台分成 各…

C语言中用rand()函数产生一随机数

在C语言中如何产生一个随机数呢&#xff1f;用rand()函数。 rand()函数在头文件&#xff1a;#include <stdio.h>中&#xff0c;函数原型&#xff1a;int rand(void);。rand()会返回一个范围在0到RAND_MAX&#xff08;32767&#xff09;之间的随机数&#xff08;整数&…

Pytorch 基础之张量数据类型

学习之前&#xff1a;先了解 Tensor&#xff08;张量&#xff09; 官方文档的解释是&#xff1a; 张量如同数组和矩阵一样, 是一种特殊的数据结构。在PyTorch中, 神经网络的输入、输出以及网络的参数等数据, 都是使用张量来进行描述。 说白了就是一种数据结构 基本数据类型…

Python可以解码吗,解码打码是如何实现的

前言 咳咳&#xff0c;进来的铁汁都是抱着学习的心态进来看的吧&#xff0c;咱今天不讲解解码&#xff0c;咱来说说python如何来实现打码功能~ 这一个个进来的 都是标题党吧哈哈哈 有兴趣的可以继续看看哦 最近重温了一档综艺节目 至于叫什么 这里就不细说了 老是看着看着就…

【QT 5 相关实验-示波器-学习笔记-示波器组件练习与使用总结】

【QT 5 相关实验-示波器-学习笔记-示波器组件练习与使用总结】1、概述2、实验环境3、参考资料-致谢4、自我提升实验效果视频演示5、代码练习-学习后拆解-实验步骤&#xff08;1&#xff09;头文件部分-"mwaveview.h"&#xff08;2&#xff09;cpp文件部分-"mwav…

UDP数据报套接字编程

DatagramSocket API DatagramSocket 是UDP Socket&#xff0c;用于发送和接收UDP数据报。 DatagramSocket 构造方法&#xff1a; DatagramSocket 方法&#xff1a; DatagramPacket API DatagramPacket是UDP Socket发送和接收的数据报。 DatagramPacket 构造方法&#xff…

本地生成动漫风格 AI 绘画 图像|Stable Diffusion WebUI 的安装和局域网部署教程

Stable Diffusion WebUI 的安装和部署教程1. 简介2. 安装环境2.1 Windows2.2 Linux3. 运行4. 模型下载链接5. 局域网部署5.1 Windows5.2 Linux6. 其他资源1. 简介 先放一张WebUI的图片生成效果图&#xff0c;以给大家学习的动力 &#xff1a;&#xff09; 怎么样&#xff0c;…

浅析SAS协议(1):基本介绍

文章目录概述SAS协议发展历程SAS技术特性SAS设备拓扑SAS phySAS地址SAS设备类型SAS协议分层参考链接概述 SAS&#xff0c;全称Serial Attached SCSI&#xff0c;即串行连结SCSI&#xff0c;是一种采用了串行总线的高速互连技术。通过物理上使用串行总线连结&#xff0c;在链路…

用一行Python代码,为图片上水印版权!

今天一个朋友跟我吐槽&#xff1a;前段时间&#xff0c;我辛辛苦苦整理的一份XX攻略&#xff0c;分享给自己的一些朋友&#xff0c;结果今天看到有人堂而皇之地拿着这份攻略图片去引流&#xff0c;并声称是自己整理的&#xff0c;真是岂有此理&#xff01;他自己总结吃一堑长一…

超低成本DDoS攻击来袭,看WAF如何绝地防护

一、DDoS攻击&#xff0c;不止于网络传输层 网络世界里为人们所熟知的DDoS攻击&#xff0c;多数是通过对带宽或网络计算资源的持续、大量消耗&#xff0c;最终导致目标网络与业务的瘫痪&#xff1b;这类DDOS攻击&#xff0c; 工作在OSI模型的网络层与传输层&#xff0c;利用协…

【MyBatis】源码学习 03 - 类型处理器 TypeHandler

文章目录前言参考目录学习笔记1、type 包中类的归类总结2、类型处理器2.1、TypeReference 类3、类型注册表3.1、TypeHandlerRegistry#getTypeHandler前言 本文内容对应的是书本第 8 章的内容&#xff0c;主要是关于类型处理器 TypeHandler 的学习。 这一章节的学习有些地方理…

Java爬虫——WebMagic案例

抓取51Job的招聘信息一&#xff0c; Scheduler组件在解析页面的时候&#xff0c;很可能会解析出相同的url地址(例如商品标题和商品图片超链接&#xff0c;而且url一样)&#xff0c;如果不进行处理&#xff0c;同样的url会解析处理多次&#xff0c;浪费资源。所以我们需要有一个…

【Unity3d】Unity与Android之间通信

在unity开发或者sdk开发经常遇到unity与移动端原生层之间进行通信&#xff0c;这里把它们之间通信做一个整理。 关于Unity与iOS之间通信&#xff0c;参考【Unity3d】Unity与iOS之间通信 Unity(c#)调用Android (一)、编写Java代码 实际上&#xff0c;任何已经存在的Java代码…