基于SpringBoot的超市信息管理系

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

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


一、项目背景介绍:

随着我国经济的不断发展,许多零售企业在发展过程中面临着业务不断增长,而管理水平相对滞后的困境。尤其是许多企业在逐年经营过程中,积累了大量历史数据,但是信息比较分散、相互独立。在信息技术迅猛发展的今天,处于竞争性行业的中小型零售企业如何在未来的市场竞争中借助信息化实时掌握营销动态,不断提升服务水平,提高资源配置水平和核心竞争力,成为他们不得不面对的问题。
在零售企业中引入超市信息管理系统,利用收银机将超市中各种商品的进货、退货、销售等信息输入电脑,使得经营管理者能够及时掌控经营信息,作出合适的各种采购及货物库存决策。
超市信息管理系统,可完成商品采购订货、销售、盘点库存、财务分析等管理功能,并对商品的购销存状态实时跟踪记录。本论文主要介绍超市信息管理系统中的系统登录、商品录入、库存管理、商品销售等部分内容,以展现设计一个完整信息管理系统的思路和步骤。

二、项目技术简介:

  1. JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
  2. Spring:Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于J2EE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
  3. SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
  4. Mybatis:MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
    iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。
  5. Thymeleaf:thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发。它是一个开源的Java库,基于Apache License 2.0许可,由Daniel Fernández创建,该作者还是Java加密库Jasypt的作者。

Thymeleaf提供了一个用于整合Spring MVC的可选模块,在应用开发中,你可以使用Thymeleaf来完全代替JSP或其他模板引擎,如Velocity、FreeMarker等。Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑。
6. Redis:redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

三、系统功能模块介绍:

功能模块图

四、数据库设计:

1:‘销售账单表’(bill)

字段名类型默认值列注释
idbigintNULL账单项目编号
product_idvarcharNULL商品编号
product_namevarcharNULL商品名称
category_idbigintNULL分类编号
category_namevarcharNULL所属分类
purchase_pricedecimalNULL进货价
sale_pricedecimalNULL销售价
profitsdecimalNULL净利润
numberbigintNULL购买数量
create_timedatetimeNULL创建日期

2:‘代码生成业务表’(gen_table)

字段名类型默认值列注释
table_idbigintNULL编号
table_namevarcharNULL表名称
table_commentvarcharNULL表描述
sub_table_namevarcharNULL关联子表的表名
sub_table_fk_namevarcharNULL子表关联的外键名
class_namevarcharNULL实体类名称
tpl_categoryvarcharNULL使用的模板(crud单表操作 tree树表操作 sub主子表操作)
package_namevarcharNULL生成包路径
module_namevarcharNULL生成模块名
business_namevarcharNULL生成业务名
function_namevarcharNULL生成功能名
function_authorvarcharNULL生成功能作者
gen_typecharNULL生成代码方式(0zip压缩包 1自定义路径)
gen_pathvarcharNULL生成路径(不填默认项目路径)
optionsvarcharNULL其它生成选项
create_byvarcharNULL创建者
create_timedatetimeNULL创建时间
update_byvarcharNULL更新者
update_timedatetimeNULL更新时间
remarkvarcharNULL备注

3:‘代码生成业务表字段’(gen_table_column)

字段名类型默认值列注释
column_idbigintNULL编号
table_idvarcharNULL归属表编号
column_namevarcharNULL列名称
column_commentvarcharNULL列描述
column_typevarcharNULL列类型
java_typevarcharNULLJAVA类型
java_fieldvarcharNULLJAVA字段名
is_pkcharNULL是否主键(1是)
is_incrementcharNULL是否自增(1是)
is_requiredcharNULL是否必填(1是)
is_insertcharNULL是否为插入字段(1是)
is_editcharNULL是否编辑字段(1是)
is_listcharNULL是否列表字段(1是)
is_querycharNULL是否查询字段(1是)
query_typevarcharNULL查询方式(等于、不等于、大于、小于、范围)
html_typevarcharNULL显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)
dict_typevarcharNULL字典类型
sortintNULL排序
create_byvarcharNULL创建者
create_timedatetimeNULL创建时间
update_byvarcharNULL更新者
update_timedatetimeNULL更新时间

4:‘商品表’(product)

字段名类型默认值列注释
auto_idintNULL商品分类编号
idvarcharNULL条形码
category_idbigintNULL商品分类编号
provider_idbigintNULL供应商编号
namevarcharNULL商品名称
factory_addressvarcharNULL生产地址
purchase_pricedecimalNULL进货价
sale_pricedecimalNULL销售价
stockintNULL库存

5:‘商品分类表’(product_category)

字段名类型默认值列注释
idintNULL商品分类编号
namevarcharNULL商品分类名称

6:‘供应商表’(product_provider)

字段名类型默认值列注释
idbigintNULL供应商编号
namevarcharNULL供应商名称
contact_namevarcharNULL联系人姓名
contact_phonevarcharNULL联系人电话
addressvarcharNULL供应商地址

7:‘Blob类型的触发器表’(qrtz_blob_triggers)

字段名类型默认值列注释
sched_namevarcharNULL调度名称
trigger_namevarcharNULLqrtz_triggers表trigger_name的外键
trigger_groupvarcharNULLqrtz_triggers表trigger_group的外键
blob_datablobNULL存放持久化Trigger对象

8:‘日历信息表’(qrtz_calendars)

字段名类型默认值列注释
sched_namevarcharNULL调度名称
calendar_namevarcharNULL日历名称
calendarblobNULL存放持久化calendar对象

9:‘Cron类型的触发器表’(qrtz_cron_triggers)

字段名类型默认值列注释
sched_namevarcharNULL调度名称
trigger_namevarcharNULLqrtz_triggers表trigger_name的外键
trigger_groupvarcharNULLqrtz_triggers表trigger_group的外键
cron_expressionvarcharNULLcron表达式
time_zone_idvarcharNULL时区

10:‘已触发的触发器表’(qrtz_fired_triggers)

字段名类型默认值列注释
sched_namevarcharNULL调度名称
entry_idvarcharNULL调度器实例id
trigger_namevarcharNULLqrtz_triggers表trigger_name的外键
trigger_groupvarcharNULLqrtz_triggers表trigger_group的外键
instance_namevarcharNULL调度器实例名
fired_timebigintNULL触发的时间
sched_timebigintNULL定时器制定的时间
priorityintNULL优先级
statevarcharNULL状态
job_namevarcharNULL任务名称
job_groupvarcharNULL任务组名
is_nonconcurrentvarcharNULL是否并发
requests_recoveryvarcharNULL是否接受恢复执行

11:‘任务详细信息表’(qrtz_job_details)

字段名类型默认值列注释
sched_namevarcharNULL调度名称
job_namevarcharNULL任务名称
job_groupvarcharNULL任务组名
descriptionvarcharNULL相关介绍
job_class_namevarcharNULL执行任务类名称
is_durablevarcharNULL是否持久化
is_nonconcurrentvarcharNULL是否并发
is_update_datavarcharNULL是否更新数据
requests_recoveryvarcharNULL是否接受恢复执行
job_datablobNULL存放持久化job对象

12:‘存储的悲观锁信息表’(qrtz_locks)

字段名类型默认值列注释
sched_namevarcharNULL调度名称
lock_namevarcharNULL悲观锁名称

13:‘暂停的触发器表’(qrtz_paused_trigger_grps)

字段名类型默认值列注释
sched_namevarcharNULL调度名称
trigger_groupvarcharNULLqrtz_triggers表trigger_group的外键

14:‘调度器状态表’(qrtz_scheduler_state)

字段名类型默认值列注释
sched_namevarcharNULL调度名称
instance_namevarcharNULL实例名称
last_checkin_timebigintNULL上次检查时间
checkin_intervalbigintNULL检查间隔时间

15:‘简单触发器的信息表’(qrtz_simple_triggers)

字段名类型默认值列注释
sched_namevarcharNULL调度名称
trigger_namevarcharNULLqrtz_triggers表trigger_name的外键
trigger_groupvarcharNULLqrtz_triggers表trigger_group的外键
repeat_countbigintNULL重复的次数统计
repeat_intervalbigintNULL重复的间隔时间
times_triggeredbigintNULL已经触发的次数

16:‘同步机制的行锁表’(qrtz_simprop_triggers)

字段名类型默认值列注释
sched_namevarcharNULL调度名称
trigger_namevarcharNULLqrtz_triggers表trigger_name的外键
trigger_groupvarcharNULLqrtz_triggers表trigger_group的外键
str_prop_1varcharNULLString类型的trigger的第一个参数
str_prop_2varcharNULLString类型的trigger的第二个参数
str_prop_3varcharNULLString类型的trigger的第三个参数
int_prop_1intNULLint类型的trigger的第一个参数
int_prop_2intNULLint类型的trigger的第二个参数
long_prop_1bigintNULLlong类型的trigger的第一个参数
long_prop_2bigintNULLlong类型的trigger的第二个参数
dec_prop_1decimalNULLdecimal类型的trigger的第一个参数
dec_prop_2decimalNULLdecimal类型的trigger的第二个参数
bool_prop_1varcharNULLBoolean类型的trigger的第一个参数
bool_prop_2varcharNULLBoolean类型的trigger的第二个参数

17:‘触发器详细信息表’(qrtz_triggers)

字段名类型默认值列注释
sched_namevarcharNULL调度名称
trigger_namevarcharNULL触发器的名字
trigger_groupvarcharNULL触发器所属组的名字
job_namevarcharNULLqrtz_job_details表job_name的外键
job_groupvarcharNULLqrtz_job_details表job_group的外键
descriptionvarcharNULL相关介绍
next_fire_timebigintNULL上一次触发时间(毫秒)
prev_fire_timebigintNULL下一次触发时间(默认为-1表示不触发)
priorityintNULL优先级
trigger_statevarcharNULL触发器状态
trigger_typevarcharNULL触发器的类型
start_timebigintNULL开始时间
end_timebigintNULL结束时间
calendar_namevarcharNULL日程表名称
misfire_instrsmallintNULL补偿执行的策略
job_datablobNULL存放持久化job对象

18:‘参数配置表’(sys_config)

字段名类型默认值列注释
config_idintNULL参数主键
config_namevarcharNULL参数名称
config_keyvarcharNULL参数键名
config_valuevarcharNULL参数键值
config_typecharNULL系统内置(Y是 N否)
create_byvarcharNULL创建者
create_timedatetimeNULL创建时间
update_byvarcharNULL更新者
update_timedatetimeNULL更新时间
remarkvarcharNULL备注

19:‘部门表’(sys_dept)

字段名类型默认值列注释
dept_idbigintNULL部门id
parent_idbigintNULL父部门id
ancestorsvarcharNULL祖级列表
dept_namevarcharNULL部门名称
order_numintNULL显示顺序
leadervarcharNULL负责人
phonevarcharNULL联系电话
emailvarcharNULL邮箱
statuscharNULL部门状态(0正常 1停用)
del_flagcharNULL删除标志(0代表存在 2代表删除)
create_byvarcharNULL创建者
create_timedatetimeNULL创建时间
update_byvarcharNULL更新者
update_timedatetimeNULL更新时间

20:‘字典数据表’(sys_dict_data)

字段名类型默认值列注释
dict_codebigintNULL字典编码
dict_sortintNULL字典排序
dict_labelvarcharNULL字典标签
dict_valuevarcharNULL字典键值
dict_typevarcharNULL字典类型
css_classvarcharNULL样式属性(其他样式扩展)
list_classvarcharNULL表格回显样式
is_defaultcharNULL是否默认(Y是 N否)
statuscharNULL状态(0正常 1停用)
create_byvarcharNULL创建者
create_timedatetimeNULL创建时间
update_byvarcharNULL更新者
update_timedatetimeNULL更新时间
remarkvarcharNULL备注

21:‘字典类型表’(sys_dict_type)

字段名类型默认值列注释
dict_idbigintNULL字典主键
dict_namevarcharNULL字典名称
dict_typevarcharNULL字典类型
statuscharNULL状态(0正常 1停用)
create_byvarcharNULL创建者
create_timedatetimeNULL创建时间
update_byvarcharNULL更新者
update_timedatetimeNULL更新时间
remarkvarcharNULL备注

22:‘定时任务调度表’(sys_job)

字段名类型默认值列注释
job_idbigintNULL任务ID
job_namevarcharNULL任务名称
job_groupvarcharNULL任务组名
invoke_targetvarcharNULL调用目标字符串
cron_expressionvarcharNULLcron执行表达式
misfire_policyvarcharNULL计划执行错误策略(1立即执行 2执行一次 3放弃执行)
concurrentcharNULL是否并发执行(0允许 1禁止)
statuscharNULL状态(0正常 1暂停)
create_byvarcharNULL创建者
create_timedatetimeNULL创建时间
update_byvarcharNULL更新者
update_timedatetimeNULL更新时间
remarkvarcharNULL备注信息

23:‘定时任务调度日志表’(sys_job_log)

字段名类型默认值列注释
job_log_idbigintNULL任务日志ID
job_namevarcharNULL任务名称
job_groupvarcharNULL任务组名
invoke_targetvarcharNULL调用目标字符串
job_messagevarcharNULL日志信息
statuscharNULL执行状态(0正常 1失败)
exception_infovarcharNULL异常信息
create_timedatetimeNULL创建时间

24:‘系统访问记录’(sys_logininfor)

字段名类型默认值列注释
info_idbigintNULL访问ID
login_namevarcharNULL登录账号
ipaddrvarcharNULL登录IP地址
login_locationvarcharNULL登录地点
browservarcharNULL浏览器类型
osvarcharNULL操作系统
statuscharNULL登录状态(0成功 1失败)
msgvarcharNULL提示消息
login_timedatetimeNULL访问时间

25:‘菜单权限表’(sys_menu)

字段名类型默认值列注释
menu_idbigintNULL菜单ID
menu_namevarcharNULL菜单名称
parent_idbigintNULL父菜单ID
order_numintNULL显示顺序
urlvarcharNULL请求地址
targetvarcharNULL打开方式(menuItem页签 menuBlank新窗口)
menu_typecharNULL菜单类型(M目录 C菜单 F按钮)
visiblecharNULL菜单状态(0显示 1隐藏)
is_refreshcharNULL是否刷新(0刷新 1不刷新)
permsvarcharNULL权限标识
iconvarcharNULL菜单图标
create_byvarcharNULL创建者
create_timedatetimeNULL创建时间
update_byvarcharNULL更新者
update_timedatetimeNULL更新时间
remarkvarcharNULL备注

26:‘通知公告表’(sys_notice)

字段名类型默认值列注释
notice_idintNULL公告ID
notice_titlevarcharNULL公告标题
notice_typecharNULL公告类型(1通知 2公告)
notice_contentvarcharNULL公告内容
statuscharNULL公告状态(0正常 1关闭)
create_byvarcharNULL创建者
create_timedatetimeNULL创建时间
update_byvarcharNULL更新者
update_timedatetimeNULL更新时间
remarkvarcharNULL备注

27:‘操作日志记录’(sys_oper_log)

字段名类型默认值列注释
oper_idbigintNULL日志主键
titlevarcharNULL模块标题
business_typeintNULL业务类型(0其它 1新增 2修改 3删除)
methodvarcharNULL方法名称
request_methodvarcharNULL请求方式
operator_typeintNULL操作类别(0其它 1后台用户 2手机端用户)
oper_namevarcharNULL操作人员
dept_namevarcharNULL部门名称
oper_urlvarcharNULL请求URL
oper_ipvarcharNULL主机地址
oper_locationvarcharNULL操作地点
oper_paramvarcharNULL请求参数
json_resultvarcharNULL返回参数
statusintNULL操作状态(0正常 1异常)
error_msgvarcharNULL错误消息
oper_timedatetimeNULL操作时间

28:‘岗位信息表’(sys_post)

字段名类型默认值列注释
post_idbigintNULL岗位ID
post_codevarcharNULL岗位编码
post_namevarcharNULL岗位名称
post_sortintNULL显示顺序
statuscharNULL状态(0正常 1停用)
create_byvarcharNULL创建者
create_timedatetimeNULL创建时间
update_byvarcharNULL更新者
update_timedatetimeNULL更新时间
remarkvarcharNULL备注

29:‘角色信息表’(sys_role)

字段名类型默认值列注释
role_idbigintNULL角色ID
role_namevarcharNULL角色名称
role_keyvarcharNULL角色权限字符串
role_sortintNULL显示顺序
data_scopecharNULL数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)
statuscharNULL角色状态(0正常 1停用)
del_flagcharNULL删除标志(0代表存在 2代表删除)
create_byvarcharNULL创建者
create_timedatetimeNULL创建时间
update_byvarcharNULL更新者
update_timedatetimeNULL更新时间
remarkvarcharNULL备注

30:‘角色和部门关联表’(sys_role_dept)

字段名类型默认值列注释
role_idbigintNULL角色ID
dept_idbigintNULL部门ID

31:‘角色和菜单关联表’(sys_role_menu)

字段名类型默认值列注释
role_idbigintNULL角色ID
menu_idbigintNULL菜单ID

32:‘用户信息表’(sys_user)

字段名类型默认值列注释
user_idbigintNULL用户ID
dept_idbigintNULL部门ID
login_namevarcharNULL登录账号
user_namevarcharNULL用户昵称
user_typevarcharNULL用户类型(00系统用户 01注册用户)
emailvarcharNULL用户邮箱
phonenumbervarcharNULL手机号码
sexcharNULL用户性别(0男 1女 2未知)
avatarvarcharNULL头像路径
passwordvarcharNULL密码
saltvarcharNULL盐加密
statuscharNULL帐号状态(0正常 1停用)
del_flagcharNULL删除标志(0代表存在 2代表删除)
login_ipvarcharNULL最后登录IP
login_datedatetimeNULL最后登录时间
pwd_update_datedatetimeNULL密码最后更新时间
create_byvarcharNULL创建者
create_timedatetimeNULL创建时间
update_byvarcharNULL更新者
update_timedatetimeNULL更新时间
remarkvarcharNULL备注

33:‘在线用户记录’(sys_user_online)

字段名类型默认值列注释
sessionIdvarcharNULL用户会话id
login_namevarcharNULL登录账号
dept_namevarcharNULL部门名称
ipaddrvarcharNULL登录IP地址
login_locationvarcharNULL登录地点
browservarcharNULL浏览器类型
osvarcharNULL操作系统
statusvarcharNULL在线状态on_line在线off_line离线
start_timestampdatetimeNULLsession创建时间
last_access_timedatetimeNULLsession最后访问时间
expire_timeintNULL超时时间,单位为分钟

34:‘用户与岗位关联表’(sys_user_post)

字段名类型默认值列注释
user_idbigintNULL用户ID
post_idbigintNULL岗位ID

35:‘用户和角色关联表’(sys_user_role)

字段名类型默认值列注释
user_idbigintNULL用户ID
role_idbigintNULL角色ID

五、功能模块:

  1. 登录:通过管理员给与的账号登录进入到系统中,不同的账号拥有不同的权限,而权限不同登录进系统所看到的和能够使用的功能也不一样

    登录注册

  2. 系统首页:在系统首页可以查看系统的数据统计信息,系统的用户订单收入等多维度的统计信息

    系统首页

  3. 超市收银台:在超市收银台中输入商品信息和数量系统回自己统计价格,在结账后系统回将金额统计进入销售账单中,并且同步到系统首页的大屏统计中,同时对应的库存也会对应的减少

    超市收银台

  4. 销售账单:销售账单中为收银台的每一笔记账信息

    销售账单

  5. 库存管理:

    库存管理

  6. 商品分类:在商品分类管理中系统回将每个商品进行分类,而可以选择的类型则是在商品分类中进行管理

    商品分类

  7. 供应商:供应商列表对是对超市的供应商做了一个清单管理,超市人员可以很直观的了解超市的供应商信息

    供应商

  8. 数据权限管理:在超市管理中有用户,角色,菜单,部门,岗位等信息的管理,他们的关系是每个用户都拥有有属于的部门,并且管理员可以通过设置不同的角色,角色拥有的菜单和数据权限,用户拥有不同的角色来达到对系统的额权限进行管理.

    数据权限管理

12

10

9

8

六、代码示例:

;

@Controller
@RequestMapping("/system/checkout")
public class CheckOutController extends BaseController {

  private String prefix = "system/checkout";

  @Autowired
  private CheckoutService checkoutService;

//  @RequiresPermissions("system:checkout:view")
  @GetMapping()
  public String product() {
    return prefix + "/checkout";
  }

  /**
   * 新增保存商品分类
   */
  @PostMapping("/tmp-bill-item/add")
  @ResponseBody
  public AjaxResult saveTempBillItem(AddTempBillItemDto addTempBillItemDto)
  {
    User currentUser = ShiroUtils.getSysUser();
    Long userId = currentUser.getUserId();
    boolean success = checkoutService.saveTempBillItem(userId, addTempBillItemDto);
    if (success) {
      return AjaxResult.success("添加成功");
    } else {
      return AjaxResult.error("找不到商品,请检查商品编号是否正确");
    }
  }

  /**
   * 获取数据集合
   */
  @PostMapping("/tmp-bill-item")
  @ResponseBody
  public TableDataInfo getTempBillItem() {
    User currentUser = ShiroUtils.getSysUser();
    Long userId = currentUser.getUserId();
    return getDataTable(checkoutService.getTempBillItems(userId));
  }

  /**
   * 获取数据集合
   */
  @GetMapping("/search-product")
  @ResponseBody
  public AjaxResult collection(@RequestParam("id") String id)
  {
    AjaxResult ajax = new AjaxResult();
    ajax.put("result", checkoutService.matchProductSuggestByProductId(id));
    return ajax;
  }

  /**
   * 获取数据集合
   */
  @GetMapping("/total-should-pay")
  @ResponseBody
  public AjaxResult countTempBillItemsTotalShouldPay() {
    User currentUser = ShiroUtils.getSysUser();
    Long userId = currentUser.getUserId();
    AjaxResult ajax = new AjaxResult();
    ajax.put("result", checkoutService.countTempBillItemsTotalShouldPay(userId).toString());
    return ajax;
  }


  @GetMapping("/tmp-bill-item/remove")
  @ResponseBody
  public AjaxResult removeTempBillItem(@RequestParam("index") int index)
  {
    User currentUser = ShiroUtils.getSysUser();
    Long userId = currentUser.getUserId();
    checkoutService.removeTempBillItem(userId, index);
    return AjaxResult.success("删除成功");
  }

  @GetMapping("/tmp-bill-item/close")
  @ResponseBody
  public AjaxResult closeTempBillItem()
  {
    User currentUser = ShiroUtils.getSysUser();
    Long userId = currentUser.getUserId();
    checkoutService.closeTempBillItem(userId);
    return AjaxResult.success("删除成功");
  }

  /*
    确认结算
   */
  @GetMapping("/tmp-bill-item/submit")
  @ResponseBody
  public AjaxResult submitTempBillItem()
  {
    User currentUser = ShiroUtils.getSysUser();
    Long userId = currentUser.getUserId();
    checkoutService.submitTempBillItem(userId);
    return AjaxResult.success("结算成功");
  }
}


@Controller
@RequestMapping("/system/product")
public class ProductController extends BaseController
{
    private String prefix = "system/product";

    @Autowired
    private IProductService productService;

    @RequiresPermissions("system:product:view")
    @GetMapping()
    public String product()
    {
        return prefix + "/product";
    }

    /**
     * 查询商品列表
     */
    @RequiresPermissions("system:product:list")
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(Product product)
    {
        startPage();
        List<Product> list = productService.selectProductList(product);
        return getDataTable(list);
    }

    /**
     * 导出商品列表
     */
    @RequiresPermissions("system:product:export")
    @Log(title = "商品", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(Product product)
    {
        List<Product> list = productService.selectProductList(product);
        ExcelUtil<Product> util = new ExcelUtil<Product>(Product.class);
        return util.exportExcel(list, "商品数据");
    }

    /**
     * 新增商品
     */
    @GetMapping("/add")
    public String add()
    {
        return prefix + "/add";
    }

    /**
     * 新增保存商品
     */
    @RequiresPermissions("system:product:add")
    @Log(title = "商品", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(Product product)
    {
        return toAjax(productService.insertProduct(product));
    }

    /**
     * 修改商品
     */
    @RequiresPermissions("system:product:edit")
    @GetMapping("/edit/{id}")
    public String edit(@PathVariable("id") String id, ModelMap mmap)
    {
        Product product = productService.selectProductById(id);
        mmap.put("product", product);
        return prefix + "/edit";
    }

    /**
     * 修改保存商品
     */
    @RequiresPermissions("system:product:edit")
    @Log(title = "商品", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(Product product)
    {
        return toAjax(productService.updateProduct(product));
    }

    /**
     * 删除商品
     */
    @RequiresPermissions("system:product:remove")
    @Log(title = "商品", businessType = BusinessType.DELETE)
    @PostMapping( "/remove")
    @ResponseBody
    public AjaxResult remove(String ids)
    {
        return toAjax(productService.deleteProductByIds(ids));
    }
}


七、论文参考:

论文参考···论文参考图

八、项目总结:

通过对基于springboot的超市信息管理系的开发,让我深刻明白开发一个程序软件需要经历的流程,当确定要开发一个基于springboot的超市信息管理系的程序时,
我在开发期间,对其功能进行合理的需求分析,然后才是程序软件的功能的框架设计,数据库的实体与数据表设计,
程序软件的功能详细界面实现,以及程序的功能测试等进行全方位的细致考虑,虽然在此过程中,各个环节都遇到了大大小小的困难,但是通过对这些问题进行反复的分析,深入的思考,
借助各种相关文献资料提供的方法与解决思路成功解决面临的各个问题,最后成功的让我开发的基于springboot的超市信息管理系得以正常运行。
基于springboot的超市信息管理系在功能上面是基本可以满足用户对系统的操作,但是这个程序软件也有许多方面是不足的,因此,在下一个时间阶段,有几点需要改进的地方需要提出来,它们分别是:
(1)操作页面可以满足用户简易操作的要求,但是在页面多样化设计层面上需要把一些比较丰富的设计结构考虑进来。
(2)程序软件的总体安全性能需要优化,例如程序的退出安全性,以及程序的并发性等问题都需要进行安全性升级,让开发的基于springboot的超市信息管理系中的相关网站更贴合。
(3)需要对程序的数据结构方面,程序的代码方面等进行优化,让运行起来的程序可以保持稳定运行,也让程序能够保证短时间内处理相关事务,节省处理事务的时间,提高事务处理的效率,
同时对服务器上资源占用的比例进行降低。
基于springboot的超市信息管理系的开发一方面是对自身专业知识技能进行最终考核,另一方面也是让自己学会独立解决程序开发过程中所遇到的问题,掌握将理论知识运用于程序开发实践的方法。
基于springboot的超市信息管理系的开发最终目标就是让系统更具人性化,同时在逻辑设计上,让系统能够更加的严谨。

九、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取项目下载链接,博主联系方式👇🏻👇🏻👇🏻

链接点击直达:下载链接

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

送PDF书 | 豆瓣9.2分,超250万Python新手的选择!蟒蛇书入门到实践

在此疾速成长的科技元年&#xff0c;编程就像是许多人通往无限可能世界的门票。而在编程语言的明星阵容中&#xff0c;Python就像是那位独领风 骚的超级巨星&#xff0c; 以其简洁易懂的语法和强大的功能&#xff0c;脱颖而出&#xff0c;成为全球最炙手可热的编程语言之一。 …

【第二节:微信小程序 app.json配置】微信小程序入门,以思维导图的方式展开2

以思维导图的方式呈现出来&#xff0c;是不是会更加直观一些呢 如果看不清楚&#xff0c;私信给单发 &#xff1a; 第二节&#xff1a;微信小程序 app.json配置&#xff1a; 包括&#xff1a; window pages tabBar networkTimeout debug 如下图所示&#xff1a; 2、ap…

使用 OpenCV 发现圆角矩形的轮廓

OpenCV - 如何找到圆角矩形的矩形轮廓? 问题: 在图像中,我试图找到矩形对象的圆角轮廓。然而,我对两者的尝试 HoughLinesP 并 findContours 没有产生预期的结果。 我的目标是找到一个类似于以下形状的矩形: 。 代码: import cv2 import matplotlib.pyplot as plt…

亚信科技AntDB数据库与库瀚存储方案完成兼容性互认证

近日&#xff0c;亚信科技AntDB数据库与苏州库瀚信息科技有限公司自主研发的RISC-V数据库存储解决方案进行了产品兼容测试。经过双方团队的严格测试&#xff0c;亚信科技AntDB数据库与库瀚数据库存储解决方案完全兼容、运行稳定。除高可用性测试外&#xff0c;双方进一步开展TP…

[C/C++]数据结构 堆排序(详细图解)

一:前言 在[C/C]数据结构 堆的详解中,介绍了什么是堆,并且完成了堆的实现和一系列接口,包括向上调整法和向下调整法等,接下来小编介绍一个有点量级的排序方法------堆排序,时间复杂度为O(n*lgn) 二:堆排序详解 2.1 方法介绍 1.首先将待排序数组建为大堆,此时堆顶元素就为数组…

Linux操作系统 1.初识Linux

一、Linux学习大致内容 二、操作系统概述 操作系统的作用&#xff1a; 常见操作系统&#xff1a; 1、pc&#xff08;电脑端&#xff09;&#xff1a;windows、Linux、MacOS 2、移动端&#xff1a;Android、ios、鸿蒙系统 总结 1.计算机由哪两个部分组成&#xff1f;、 硬件…

04:2440---内存控制器

目录 一:介绍 1:引入 2:概念 3:通信 A:片选信号 B:片选信号的地址空间范围 ​​​​ 4:地址线 A:不同位数的接法 B:访问原理 C:访问地址 5:时序 1:NOR FLASH A:2440NOR FLASH时序 B:原理/时序图 C:寄存器 6:SDARM A:访问方式 B:原理图 C:BWSCON D:BANKCON…

【Linux系统编程】操作系统详解(什么是操作系统?为什么会存在操作系统?设计操作系统的目的是什么?)

目录 一、前言 二、 什么是操作系统 &#x1f4a6;操作系统的引入 &#x1f4a6;操作系统的概念理解 &#x1f4a6;操作系统设计的目的与定位 &#x1f4a6;总结 二、操作系统之上之下分别有什么 三、深度理解操作系统的“管理” &#x1f4a6;场景理解 &#x1f4a6;操…

视频文件+EasyDarwin做摄像机模拟器模拟RTSP流很方便,还能做成系统服务,方法与流程

之前我看到过一家人工智能做算法的企业&#xff0c;用EasyDarwinFFMPEG做了一个摄像机的模拟器&#xff0c;方法大概是&#xff1a; 用ffmpeg读取mp4等类型的视频文件&#xff08;当然ffmpeg啥都能读取&#xff09;&#xff0c;再以RTSP协议的形式推送给EasyDarwin&#xff1b…

不会提问不打紧,不敢提问才要命

最近在星球里回答了球友提出来的一些问题&#xff0c;我都给了回复&#xff0c;不经过在明确问题、探索问题的过程&#xff0c;对我启发挺大&#xff0c;特此来记录下感受和感悟。 缘起 最近新加入球友提的问题&#xff0c;有几次&#xff0c;我第一时间没看懂&#xff0c;甚…

【沐风老师】3DMAX快速地板屋顶墙面铺设插件使用方法详解

3DMAX快速地板屋顶墙面铺设插件使用教程 3DMAX快速地板屋顶墙面铺设插件&#xff0c;一键生成各种地板、墙面纹理模型&#xff0c;是一款非常实用的室内设计和建筑建模插件。 【适用版本】 3dMax7或更新版本 【安装方法】 该插件无需安装&#xff0c;直接在建模过程中使用&a…

【leetcode】62. 不同路径

题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff1f; …

如何减少40%的Docker构建时间

随着Docker的普及&#xff0c;许多公司的产品会将组件构建为Docker镜像。但随着时间的推移&#xff0c;一些镜像变得越来越大&#xff0c;对应的CI构建也变得越来越慢。 如果能在喝完一杯咖啡的时间&#xff08;不超过5分钟&#xff09;内完成构建&#xff0c;将是一个理想状态…

关于高斯核是实现尺度空间变换的唯一性思考

受到自己的启发&#xff0c;唯一性证明有了思路&#xff1a; 谁的一阶导数是自己&#xff0c;exp&#xff08;x&#xff09;&#xff0c;只有是自己&#xff0c;才能保持自己在其中。 为什么不能是exp&#xff08;x&#xff09;呢&#xff1f;不变导致图像不会模糊&#xff0…

二叉树:leetcode1457. 二叉树中的伪回文路径

给你一棵二叉树&#xff0c;每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的&#xff0c;当它满足&#xff1a;路径经过的所有节点值的排列中&#xff0c;存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。 给定二叉树的节点数目…

【LeetCode 热题 HOT 100】题解笔记 —— Day02

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…

「媒体邀约」三农,农业类媒体资源有哪些?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 农业在我国国民经济中的地位是基础&#xff0c;农业是国民经济建设和发展的基础产业&#xff0c;因此围绕三农发展有很多的公司和企业&#xff0c;每年全国都有大大小小关于农业的展览&a…

浅谈联网汽车安全漏洞

“智能网联汽车存在内生共性问题&#xff0c;即软硬件的漏洞后门&#xff0c;基于此进行的网络攻击可以直接带来勒索、盗窃、大规模车辆恶意操控风险&#xff0c;还有数据泄露等网络安全事件。如果内生的漏洞后门问题不解决&#xff0c;系统自身难保&#xff0c;很难谈系统安全…

Oracle Linux 9.3 发布

导读Oracle Linux 9 系列发布了第 3 个版本更新&#xff0c;支持 64 位 Intel 和 AMD (x86_64) 以及 64 位 Arm (aarch64) 平台。与所有的 Oracle Linux 版本一样&#xff0c;此版本与相应 RHEL 版本 100% 应用二进制兼容。 对于 x86_64 和 aarch64 架构&#xff0c;Oracle Li…

HT97220与HT97230耳机放大器芯片对比

HT97230有两个不同开启时间(tON)版本&#xff0c;版本A、C和E的导通时间tON为5.5ms&#xff0c;用于耳机驱动&#xff1b;B和D则具有130ms的tON&#xff0c;用于机顶盒设计&#xff08;目前仅提供A版本&#xff0c;其他版本需预定&#xff09;。内部电荷泵对输入电源反相&#…