基于Springbot+微信小程序的购药平台的设计与实现
基于Springbot+微信小程序的购药平台的设计与实现
✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌
🍅文末获取项目下载方式🍅
一、项目背景介绍:
随着近年来我国网络基础设施的不断完善、信息技术的不断发展和第三方支付工具的广泛普及。网络购药己经成为了人们生活中的一项重要内容。基于PC平台的互联网商城系统方便了人们足不出户就能享受到购物的乐趣。而基于手机端的微信小程序互联网购物则发挥了智能终端的便携性,能使大众随时随地购买自己喜欢的商品。它是将线下的商品交易与互联网结合,让互联网成为线上交易的平台。此购药商城系统就是以互联网为基础,生活圈周边为基本单位,充分利用社区的信息化基础设施。将生活圈周边的小型药店与网络商城结合起来运营的一种新型电子商务模式,是传统电子商务的一次新的突破。其线上更加注重的是满足消费者便利的需求和会员的互动营销以及为实体店导流,线下则更多的是更好、更便捷的为用户提供现代化的智能购药体验服务。
新零售发展的核心是满足特定购物场景的顾客需求。在顾客已经信息化、技术化、移动互联网化的趋势下,快购、快送、快结的购物方式更被用户所青睐。但对于传统零售来说,为线下店铺提供一种方便快捷的线上购药渠道是增強顾客体验、提高零售效率的重要途径。为此,近年来国内外零售商都已经普遍提供线上与线下相合的社区类购物服务。纵观当下主流的线上购药系统主要有PC端购药系统,APP 购药系统,依赖于第三方应用程序的购物入口等。2017 年初,微信小程序的正式上线进一步活了微信的生态圈,微信小程序与原生 APP 相比最大的特点就是用户无需下载安装,通过扫码或搜索就可以获得小程序,由此可见基于微信和即用即走的轻量级小程序平台可以更好的连接线下的服务。
二、项目技术简介:
- JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
- Vue:Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。
Vue是一个独立的社区驱动的项目,它是由尤雨溪在2014年作为其个人项目创建, 是一个成熟的、经历了无数实战考验的框架,它是目前生产环境中使用最广泛的JavaScript框架之一,可以轻松处理大多数web应用的场景,并且几乎不需要手动优化,并且Vue完全有能力处理大规模的应用。 - SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
- Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。
- smart:微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。
全面开放申请后,主体类型为企业、政府、媒体、其他组织或个人的开发者,均可申请注册小程序。微信小程序、微信订阅号、微信服务号、微信企业号是并行的体系。
微信小程序是一种不用下载就能使用的应用,也是一项创新,经过将近两年的发展,已经构造了新的微信小程序开发环境和开发者生态。微信小程序也是这么多年来中国IT行业里一个真正能够影响到普通程序员的创新成果,已经有超过150万的开发者加入到了微信小程序的开发,与我们一起共同发力推动微信小程序的发展,微信小程序应用数量超过了一百万,覆盖200多个细分的行业,日活用户达到两个亿,微信小程序还在许多城市实现了支持地铁、公交服务。微信小程序发展带来更多的就业机会,2017年小程序带动就业104万人,社会效应不断提升。 - Spring-Mvc:Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框。
- Html:HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。
超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便。
三、系统功能模块介绍:
四、数据库设计:
1:mall_ad(mall_ad)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
name | varchar(63) | NULL | 广告标题 |
link | varchar(255) | NULL | 所广告的商品页面或者活动页面链接地址 |
url | varchar(255) | NULL | 广告宣传 |
position | tinyint(3) | NULL | 广告位置:1则是首页 |
content | varchar(255) | NULL | 活动内容 |
start_time | datetime(0) | NULL | 广告开始时间 |
end_time | datetime(0) | NULL | 广告结束时间 |
enabled | tinyint(1) | NULL | 是否启动 |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
2:mall_address(mall_address)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
name | varchar(63) | NULL | 收货人名称 |
user_id | int(11) | NULL | 用户表的用户ID |
province | varchar(63) | NULL | 行政区域表的省ID |
city | varchar(63) | NULL | 行政区域表的市ID |
county | varchar(63) | NULL | 行政区域表的区县ID |
address_detail | varchar(127) | NULL | 详细收货地址 |
area_code | char(6) | NULL | 地区编码 |
postal_code | char(6) | NULL | 邮政编码 |
tel | varchar(20) | NULL | 手机号码 |
is_default | tinyint(1) | NULL | 是否默认地址 |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
3:mall_admin(mall_admin)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
username | varchar(63) | NULL | 管理员名称 |
password | varchar(63) | NULL | 管理员密码 |
last_login_ip | varchar(63) | NULL | 最近一次登录IP地址 |
last_login_time | datetime(0) | NULL | 最近一次登录时间 |
avatar | varchar(255) | NULL | 头像 |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
role_ids | varchar(127) | NULL | 角色列表 |
4:mall_aftersale(mall_aftersale)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
aftersale_sn | varchar(63) | NULL | 售后编号 |
order_id | int(11) | NULL | 订单ID |
user_id | int(11) | NULL | 用户ID |
type | smallint(6) | NULL | 售后类型,0是未收货退款,1是已收货(无需退货)退款,2用户退货退款 |
reason | varchar(31) | NULL | 退款原因 |
amount | VARCHAR(255) | NULL |
5:mall_brand(mall_brand)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
name | varchar(255) | NULL | 品牌商名称 |
desc | varchar(255) | NULL | 品牌商简介 |
pic_url | varchar(255) | NULL | 品牌商页的品牌商 |
sort_order | tinyint(3) | NULL | |
floor_price | VARCHAR(255) | NULL |
6:mall_cart(mall_cart)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
user_id | int(11) | NULL | 用户表的用户ID |
goods_id | int(11) | NULL | 商品表的商品ID |
goods_sn | varchar(63) | NULL | 商品编号 |
goods_name | varchar(127) | NULL | 商品名称 |
product_id | int(11) | NULL | 商品货品表的货品ID |
price | VARCHAR(255) | NULL |
7:mall_category(mall_category)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
name | varchar(63) | NULL | 类目名称 |
keywords | varchar(1023) | NULL | 类目关键字,以JSON数组格式 |
desc | varchar(255) | NULL | 类目广告语介绍 |
pid | int(11) | NULL | 父类目ID |
icon_url | varchar(255) | NULL | 类目图标 |
pic_url | varchar(255) | NULL | 类目 |
level | varchar(255) | NULL | |
sort_order | tinyint(3) | NULL | 排序 |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
8:mall_collect(mall_collect)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
user_id | int(11) | NULL | 用户表的用户ID |
value_id | int(11) | NULL | 如果type=0,则是商品ID;如果type=1,则是专题ID |
type | tinyint(3) | NULL | 收藏类型,如果type=0,则是商品ID;如果type=1,则是专题ID |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
9:mall_comment(mall_comment)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
value_id | int(11) | NULL | 如果type=0,则是商品评论;如果是type=1,则是专题评论。 |
type | tinyint(3) | NULL | 评论类型,如果type=0,则是商品评论;如果是type=1,则是专题评论; |
content | varchar(1023) | NULL | 评论内容 |
admin_content | varchar(511) | NULL | 管理员回复内容 |
user_id | int(11) | NULL | 用户表的用户ID |
has_picture | tinyint(1) | NULL | 是否含有 |
pic_urls | varchar(1023) | NULL | 地址列表,采用JSON数组格式 |
star | smallint(6) | NULL | 评分,1-5 |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
10:mall_coupon(mall_coupon)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
name | varchar(63) | NULL | 优惠券名称 |
desc | varchar(127) | NULL | 优惠券介绍,通常是显示优惠券使用限制文字 |
tag | varchar(63) | NULL | 优惠券标签,例如新人专用 |
total | int(11) | NULL | 优惠券数量,如果是0,则是无限量 |
discount | VARCHAR(255) | NULL |
11:mall_coupon_user(mall_coupon_user)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
user_id | int(11) | NULL | 用户ID |
coupon_id | int(11) | NULL | 优惠券ID |
status | smallint(6) | NULL | 使用状态 |
12:mall_feedback(mall_feedback)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
user_id | int(11) | NULL | 用户表的用户ID |
username | varchar(63) | NULL | 用户名称 |
mobile | varchar(20) | NULL | 手机号 |
feed_type | varchar(63) | NULL | 反馈类型 |
content | varchar(1023) | NULL | 反馈内容 |
status | int(3) | NULL | 状态 |
has_picture | tinyint(1) | NULL | 是否含有 |
pic_urls | varchar(1023) | NULL | 地址列表,采用JSON数组格式 |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
13:mall_footprint(mall_footprint)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
user_id | int(11) | NULL | 用户表的用户ID |
goods_id | int(11) | NULL | 浏览商品ID |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
14:mall_goods(mall_goods)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
goods_sn | varchar(63) | NULL | 商品编号 |
name | varchar(127) | NULL | 商品名称 |
category_id | int(11) | NULL | 商品所属类目ID |
brand_id | int(11) | NULL | |
gallery | varchar(1023) | NULL | 商品宣传列表,采用JSON数组格式 |
keywords | varchar(255) | NULL | 商品关键字,采用逗号间隔 |
brief | varchar(255) | NULL | 商品简介 |
is_on_sale | tinyint(1) | NULL | 是否上架 |
sort_order | smallint(4) | NULL | |
pic_url | varchar(255) | NULL | 商品页面商品 |
share_url | varchar(255) | NULL | 商品分享海报 |
is_new | tinyint(1) | NULL | 是否新品首发,如果设置则可以在新品首发页面展示 |
is_hot | tinyint(1) | NULL | 是否人气推荐,如果设置则可以在人气推荐页面展示 |
unit | varchar(31) | NULL | 商品单位,例如件、盒 |
counter_price | VARCHAR(255) | NULL |
15:mall_goods_product(mall_goods_product)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
goods_id | int(11) | NULL | 商品表的商品ID |
specifications | varchar(1023) | NULL | 商品规格值列表,采用JSON数组格式 |
price | VARCHAR(255) | NULL |
16:mall_goods_specification(mall_goods_specification)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
goods_id | int(11) | NULL | 商品表的商品ID |
specification | varchar(255) | NULL | 商品规格名称 |
value | varchar(255) | NULL | 商品规格值 |
pic_url | varchar(255) | NULL | 商品规格 |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
17:mall_groupon(mall_groupon)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
order_id | int(11) | NULL | 关联的订单ID |
groupon_id | int(11) | NULL | 如果是开团用户,则groupon_id是0;如果是参团用户,则groupon_id是团购活动ID |
rules_id | int(11) | NULL | 团购规则ID,关联mall_groupon_rules表ID字段 |
user_id | int(11) | NULL | 用户ID |
share_url | varchar(255) | NULL | 团购分享地址 |
creator_user_id | int(11) | NULL | 开团用户ID |
creator_user_time | datetime(0) | NULL | 开团时间 |
status | smallint(6) | NULL | 团购活动状态,开团未支付则0,开团中则1,开团失败则2 |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
18:mall_groupon_rules(mall_groupon_rules)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
goods_id | int(11) | NULL | 商品表的商品ID |
goods_name | varchar(127) | NULL | 商品名称 |
pic_url | varchar(255) | NULL | 商品或者商品货品 |
discount | VARCHAR(255) | NULL |
19:mall_issue(mall_issue)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
question | varchar(255) | NULL | 问题标题 |
answer | varchar(255) | NULL | 问题答案 |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
20:mall_keyword(mall_keyword)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
keyword | varchar(127) | NULL | 关键字 |
url | varchar(255) | NULL | 关键字的跳转链接 |
is_hot | tinyint(1) | NULL | 是否是热门关键字 |
is_default | tinyint(1) | NULL | 是否是默认关键字 |
sort_order | int(11) | NULL | 排序 |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
21:mall_log(mall_log)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
admin | varchar(45) | NULL | 管理员 |
ip | varchar(45) | NULL | 管理员地址 |
type | int(11) | NULL | 操作分类 |
action | varchar(45) | NULL | 操作动作 |
status | tinyint(1) | NULL | 操作状态 |
result | varchar(127) | NULL | 操作结果,或者成功消息,或者失败消息 |
comment | varchar(255) | NULL | 补充信息 |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
22:mall_notice(mall_notice)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
title | varchar(63) | NULL | 通知标题 |
content | varchar(511) | NULL | 通知内容 |
admin_id | int(11) | NULL | 创建通知的管理员ID,如果是系统内置通知则是0. |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
23:mall_notice_admin(mall_notice_admin)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
notice_id | int(11) | NULL | 通知ID |
notice_title | varchar(63) | NULL | 通知标题 |
admin_id | int(11) | NULL | 接收通知的管理员ID |
read_time | datetime(0) | NULL | 阅读时间,如果是NULL则是未读状态 |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
24:mall_order(mall_order)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
user_id | int(11) | NULL | 用户表的用户ID |
order_sn | varchar(63) | NULL | 订单编号 |
order_status | smallint(6) | NULL | 订单状态 |
aftersale_status | smallint(6) | NULL | 售后状态,0是可申请,1是用户已申请,2是管理员审核通过,3是管理员退款成功,4是管理员审核拒绝,5是用户已取消 |
consignee | varchar(63) | NULL | 收货人名称 |
mobile | varchar(63) | NULL | 收货人手机号 |
address | varchar(127) | NULL | 收货具体地址 |
message | varchar(512) | NULL | 用户订单留言 |
goods_price | VARCHAR(255) | NULL |
25:mall_order_goods(mall_order_goods)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
order_id | int(11) | NULL | 订单表的订单ID |
goods_id | int(11) | NULL | 商品表的商品ID |
goods_name | varchar(127) | NULL | 商品名称 |
goods_sn | varchar(63) | NULL | 商品编号 |
product_id | int(11) | NULL | 商品货品表的货品ID |
number | smallint(5) | NULL | 商品货品的购买数量 |
price | VARCHAR(255) | NULL |
26:mall_permission(mall_permission)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
role_id | int(11) | NULL | 角色ID |
permission | varchar(63) | NULL | 权限 |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
27:mall_region(mall_region)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
pid | int(11) | NULL | 行政区域父ID,例如区县的pid指向市,市的pid指向省,省的pid则是0 |
name | varchar(120) | NULL | 行政区域名称 |
type | tinyint(3) | NULL | 行政区域类型,如如1则是省,如果是2则是市,如果是3则是区县 |
code | int(11) | NULL | 行政区域编码 |
28:mall_role(mall_role)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
name | varchar(63) | NULL | 角色名称 |
desc | varchar(1023) | NULL | 角色描述 |
enabled | tinyint(1) | NULL | 是否启用 |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
29:mall_search_history(mall_search_history)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
user_id | int(11) | NULL | 用户表的用户ID |
keyword | varchar(63) | NULL | 搜索关键字 |
from | varchar(63) | NULL | 搜索来源,如pc、wx、app |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
30:mall_storage(mall_storage)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
key | varchar(63) | NULL | 文件的唯一索引 |
name | varchar(255) | NULL | 文件名 |
type | varchar(20) | NULL | 文件类型 |
size | int(11) | NULL | 文件大小 |
url | varchar(255) | NULL | 文件访问链接 |
add_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
deleted | tinyint(1) | NULL | 逻辑删除 |
id | USING | NULL | |
31:mall_topic(mall_topic) |
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
title | varchar(255) | NULL | 专题标题 |
subtitle | varchar(255) | NULL | 专题子标题 |
content | text | NULL | 专题内容,富文本格式 |
price | VARCHAR(255) | NULL |
32:mall_user(mall_user)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
username | varchar(63) | NULL | 用户名称 |
password | varchar(63) | NULL | 用户密码 |
gender | tinyint(3) | NULL | 性别:0未知,1男,1女 |
birthday | date | NULL | 生日 |
last_login_time | datetime(0) | NULL | 最近一次登录时间 |
last_login_ip | varchar(63) | NULL | 最近一次登录IP地址 |
user_level | tinyint(3) | NULL | 0普通用户,1VIP用户,2高级VIP用户 |
nickname | varchar(63) | NULL | 用户昵称或网络名称 |
mobile | varchar(20) | NULL | 用户手机号码 |
avatar | varchar(255) | NULL | 用户头像 |
weixin_openid | varchar(63) | NULL | 微信登录openid |
session_key | varchar(100) | NULL | 微信登录会话KEY |
status | tinyint(3) | NULL | 0可用 |
五、功能模块:
-
登录:在微信小程序端点击登录按钮,系统将会弹出 是否确认使用微信用户信息,点击确认即可登录完成。
-
商品详情:本模块主要用来展示药品的基本信息,比如药品的轮播介绍图,药品名称,价格,以及参数。
用户可以在此界面使用收藏商品功能,添加购物车,和立即购买功能。购买完成之后既到了订单里面。 -
个人中心:个人中心主要分为订单模块,平台服务,以及必备工具等。
在订单模块中可以快速的减速出待付款,代发货,待收货等订单信息,平台服务中可以查询出个人的商品收藏信息,以及收货地址的管理。必备工具中可以查询帮助,反馈意见,浏览足迹等。 -
商品管理:此模块是商品数据的来源,在后台系统中编辑添加成功方可在用户端进行展示操作,主要有商品的添加,查看,编辑,删除,导出等功能。
-
订单管理:小程序端用户下单之后方可在此界面中查询到对应数据,此模块主要管理整个系统的订单,其中包括订单查询,详情,发货,退款,导出等相应操作。
-
用户管理模块:微信小程序端用户登录之后,其用户信息将会被系统所收集,收集到的信息可以在用户管理界面进行对应测查看操作,也可以对数据进行导出,方面进行数据统计分析。
六、代码示例:
登录
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();}}// tokenString 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);// 商品规格 返回的是定制的GoodsSpecificationVoCallable<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);}}}
}
七、论文参考:
八、项目总结:
药品商城是当今社会的潮流,将现实生活中的实体零售药业转入到网络层面是一个非常有意义的事情,人们在需要购买一些日常药品的时候,不需要跑到实体药店甚至前往医院去购买,可以减少人们很多繁琐的问题,方便人们的生活。药品商城的实现设计与方法主要体现在一下工作中。
采用微信小程序的方式来作为用户端的主体,从而使得购买更加方便,并且搭配一个对应的后台管理系统来操作用户端的商品,用户端主要的功能在与向用户打造一套完整的下单流程,从商品的查看到最后的订单交易成功。后台管理的主要功能在于如何简洁的管理用户端的商品,订单等信息。
最后采用多人同时操作的步骤来模拟并发情况下的下单流程,从而测试对应的系统吞吐量,以及整个系统的性能。经过不间断的测试,系统运行基本稳定,前后端交互流畅,交互速度快,并且在并发的情况下系统也能基本支撑。讲过实际检验,系统能够胜任基本的商城功能操作,方便人们的日常生活。
九、源码获取:
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻
链接点击直达:下载链接
相关文章:
基于Springbot+微信小程序的购药平台的设计与实现
基于Springbot微信小程序的购药平台的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、…...
aws lambda rust的sdk和自定义运行时
rust的aws sdk 参考资料 https://docs.aws.amazon.com/sdk-for-rust/latest/dg/getting-started.htmlhttps://awslabs.github.io/aws-sdk-rust/https://github.com/awslabs/aws-sdk-rusthttps://github.com/awsdocs/aws-doc-sdk-examples/tree/main/rust_dev_preview rus sd…...
[安装之3] 笔记本加装固态和内存条教程(超详细)
由于笔记本是几年前买的了,当时是4000,现在用起来感到卡顿,启动、运行速度特别慢,就决定换个固态硬盘,加个内存条,再给笔记本续命几年。先说一下加固态硬盘SSD的好处:1.启动快 2.读取延迟小 3.写…...
极客时间左耳听风-高效学习
左耳听风——高效学习篇 P95 | 高效学习:端正学习态度 本人真实⬇️⬇️⬇️⬇️ “ 大部分人都认为自己爱学习,但是: 他们都是只有意识没有行动,他们是动力不足的人。 他们都不知道自己该学什么,他们缺乏方向和目标。…...
MSR寄存器访问
1.介绍 MSR是CPU的一组64位寄存器,每个MSR都有它的地址值(如下图所示),可以分别通过RDMSR 和WRMSR 两条指令进行读和写的操作。 如图中为8个P-state寄存器,地址分别为0xC001 0064 ~ 0xC001 006B,每个寄存…...
ArcGIS:模型构建器实现批量按掩膜提取影像
用研究区域的矢量数据来裁剪栅格数据集时,一般我们使用ArcGIS中的【按掩膜提取工具】。如果需要裁剪的栅格数据太多,处理起来非常的麻烦,虽然ArcGIS中有批处理的功能,但是还是需要手动选择输入输出数据。 如下图,鼠标…...
算法刷题打卡第94天: 找出给定方程的正整数解
找出给定方程的正整数解 难度:中等 给你一个函数 f(x, y) 和一个目标结果 z,函数公式未知,请你计算方程 f(x,y) z 所有可能的正整数 数对 x 和 y。满足条件的结果数对可以按任意顺序返回。 尽管函数的具体式子未知,但它是单调…...
浅析SAS协议(1):基本介绍
文章目录概述SAS协议发展历程SAS技术特性SAS设备拓扑SAS phySAS地址SAS设备类型SAS协议分层参考链接概述 SAS,全称Serial Attached SCSI,即串行连结SCSI,是一种采用了串行总线的高速互连技术。通过物理上使用串行总线连结,在链路…...
93.【Vue-细刷-02】
Vue-02(十六)、基本列表渲染 (v-for)1.使用v-for遍历数组2.使用v-for遍历对象3.使用v-for遍历字符串(十七)、列表过滤 (filter())1.⭐JS中Change属性的原生状态⭐2.使用watch监听实现3.const {xxx} this 在Vue的作用⭐⭐4.JS箭头函数参数的简写⭐5.使用computed进行计算实现(最…...
Allegro负片层不显示反盘的原因和解决办法
Allegro负片层不显示反盘的原因和解决办法 在用Allegro做PCB设计的时候,负片设计是较为常用的一种方式,有时会出现打开负片层却看不到反盘的情况,如下图 L2层是负片层 L2层仍然只能看到盘 如何才能看到反盘显示的效果,具体操作如下 首先确定L2层层叠里面设置的是负片...
ACM数论 裴蜀定理(贝祖定理)
一.内容定义 「裴蜀定理」,又称贝祖定理(Bzouts lemma)。是一个关于最大公约数的定理。其内容定义为:对于不全为零的任意整数 a 和 b,记二者的最大公约数为 g 即 gcd(a,b) g,则对于任意整数 x 和 y 都一定…...
基础篇—CSS Position(定位)解析
CSS Position(定位) position 属性指定了元素的定位类型。 position 属性的五个值: relativefixedabsolutesticky元素可以使用的顶部,底部,左侧和右侧属性定位。然而,这些属性无法工作,除非是先设定position属性。他们也有不同的工作方式,这取决于定位方法。 1、static…...
正则表达式与grep
基本正则表达式BRE集合 匹配字符匹配次数位置锚定 符号作用^尖角号,用于模式的最正常,如“^haha”,匹配以haha单词开头的行$美元符,用于模式的最右侧,如“haha$”,表示haha单词结尾的行^$组合符ÿ…...
开发必备的IDEA 插件!效率提升 50 倍!
日常开发中,面向百度编程的程序员,很多时候,你跟大佬级别的差距,可能不仅仅是知识面的差距,还有就是开发效率的差距。以下是我常用的几个IDEA插件,废话不多说,直接肝干货! 1. Codot…...
aws eks 集群访问ecr仓库拉取镜像的认证逻辑
本文主要讨论三个问题 ecr帮助程序在docker上如何配置eks集群访问ecr仓库的逻辑kubelet授权ecr的源码分析 ecr帮助程序 在docker环境下,可以通过在$HOME/.docker/config.json中指定凭证管理程序 docker login aws同样提供了证书助手,避免手动执行ecr认…...
Linux Socket Buffer介绍
一. 前言 Linux内核网络子系统的实现之所以灵活高效,主要是在于管理网络数据包的缓冲器-socket buffer设计得高效合理。在Linux网络子系统中,socket buffer是一个关键的数据结构,它代表一个数据包在内核中处理的整个生命周期。 二. Socket Bu…...
ACL与NAT
ACL---访问控制列表,是一种策略控制工具 功能:1.定义感兴趣流量(数据层面 ) 2.定义感兴趣路由(控制层面) ACL 条目表项组成: 编号规则:步数或者跳数默认值为5,…...
使用gdb来debug程序并查找Segmentation fault原因
GDB 调试前言GDB基础用法1.启动及退出调试2.设置参数3.执行程序4.流程控制5.设置断点6.输出信息7.查看栈帧8.info命令9.显示源码GDB调试coredump文件关注公众号【程序员DeRozan】,回复【1207】,免费获取计算机经典资料及现金红包 前言 在开发程序时&…...
vbs简单语法及简单案例
文章目录一、简单语法1、变量2、输入3、输出4、选择语句5、循环二、用记事本编译中文乱码问题三、制作一个简单vbs脚本表白一、简单语法 1、变量 语法: dim 变量名例: dim a,b a1 b2 msgbox ab运行: 2、输入 语法:InputBox(…...
学板绘课程学费一般多少钱
学板绘课程学费一般多少钱?培训机构的费用和师资、模式有关,价格贵不贵要结合相同类型的机构多多对比。因为好些平台做了很多的宣传广告,运营成本很高, 终羊毛出在羊身上,这样的机构知名度很高,但是性价比不…...
48.在ROS中实现local planner(1)- 实现一个可以用的模板
有了之前45.在ROS中实现global planner(1)- 实现一个可以用模板的global planner的经验, 现在再去创建一个local planner的包就容易多了 1. 创建包 创建 cd ~/pibot_ros/ros_ws/src # 这里可以使用自己的ros workspace catkin_create_pkg sample_loc…...
jenkins基础部署
一、jenkins是什么1.Jenkins的前身是Hudson,采用JAVA编写的持续集成开源工具。Hudson由Sun公司在2004年启动,第一个版本于2005年在java.net发布。2007年开始Hudson逐渐取代CruiseControl和其他的开源构建工具的江湖地位。在2008年的JavaOne大会上在开发者…...
Unity3D -知识点(1)
1.场景视图鼠标滚轮:场景放大缩小鼠标右键:场景左右平移场景编辑器中,能看到什么?网格,每一格大小为1unit,建模不同,规定不同,(对应屏幕上100个像素)世界坐标系y轴向上为正x轴向右为…...
【学习笔记】NOIP暴零赛3
博弈(game) 观察到博弈过程中胜负态不会发生改变,那么求出从每个棋子出发能走的最长链,然后背包即可。 复杂度O(nm)O(nm)O(nm)。 #include<bits/stdc.h> #define ll long long #define pb push_back using namespace std; const int mod9982443…...
Java JSR规范列表
Java JSR规范列表目录概述需求:设计思路实现思路分析1.JSR2.JSR方法3.web service4.Webservice:5.数据处理器拓展实现参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,m…...
Java必备小知识点1
Java程序类型: Applications和AppletApplications:是指在计算机操作系统中运行的程序。是完整的程序,能独立运行。被编译后,用普通的Java解释器就可以使其边解释边执行。必定含有一个main方法,程序执行时,首先寻找main方法&#x…...
JavaScript作用域、闭包
文章目录作用域、作用域链作用域作用域链循环中的作用域自由变量、闭包自由变量闭包的定义、表现、应用如何确定在闭包中获取正确的变量总结作用域、作用域链 作用域 编程语言中存储、访问、修改变量当中的值是一项基本能力、存储变量、访问变量必须按照一定的规则࿰…...
JavaScript Date(日期) 对象
JavaScript Date 对象是 JavaScript 中用于处理日期和时间的内置对象。它可以用于获取当前时间、设置日期和时间、计算日期和时间之间的差异、以及将日期和时间格式化为各种字符串格式。在本文中,我们将详细介绍 JavaScript Date 对象的作用和在实际工作中的用途。 …...
rust过程宏 proc-macro-workshop解题-4-sorted
名字版本号rust1.69.0OSubuntu 22.04这一大关卡介绍的是属性式过程宏。 第一关:01-parse-enum 还是简单的看我们是否已经实现了一个属性式过程宏的空架子,如果有这个空架子,就直接通过了。 use proc_macro::TokenStream; use proc_macro2; use syn;#[proc_macro_attribut…...
数据结构与算法—队列
队列 队列介绍 有序列表,可以用数组或者链表实现。遵循先进先出原则。 数组实现队列 public class ArrayQueue {public static void main(String[] args) {ArrayQueue queue new ArrayQueue(3);// 接收用户输入char key ;Scanner sc new Scanner(System.in);…...
乐清企业网站建设/谷歌排名查询
往期精选● 架构师高并发高性能分布式教程(4000G)● 39阶段精品云计算大数据实战视频教程● 互联网技术干货视频教程大全【菜单为准】● 2017年8月最新Intellij IDEA全套视频教程● 程序员如何制作高质量的简历【视频简历】● 两套大型电商实战项目 ● 200本经典编程相关…...
建设网站销售/推广网站公司
我用来绕过“完整路径和文件名”长度限制以移动,复制或删除某些内容的一个技巧是,通过使用指向文件夹的映射驱动器号 “中途”(或更多)“ 插入 ”来缩短它顺路。所以你有c:\ some \ long \ path ... \ and \ foo \ bar \ folders \ oldfiles …...
手机网站建设比较好的公司/临沂seo公司
最近在看JVM虚拟机,想要搞懂虚拟机的内部运行机制,指令码的分析是必不可少的!来看一个简单的测试小程序,看看里面的运行机制!这里就需要借助javap命令去查看了! 第一步,创建一个简单的测试程序…...
营销网站的成功案例/制作网站的工具
策划|小智 “Single boy,single boy,single all the way~Cant find a girl for whole day,better to be gay,hey!” 国人有一种族天赋,就是可以把各种节都过成情人节,继而为爱鼓掌。但与此同时,中国又是一个性别比例失调严重的国家…...
网络工程有限公司/品牌企业seo咨询
965. 单值二叉树 难度简单69 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回 true;否则返回 false。 示例 1: 输入:[1,1,1,1,1,null,1] 输出:true示例…...
个人网站建设方案书模板/营销技巧有哪些
如果你忘记了mysql密码几乎是没有什么好办法可以直接修改密码了,但我们可以在my.ini把加上skip-grant-tables,然后重启mysql就不需要密码了,这时我们再修改root密码,最后再把skip-grant-tables删除重启即可。 首先,很…...