一、前言介绍: 随着社会的快速发展,计算机的影响是全面且深入的。人们生活水平的不断提高,日常生活中用户对手办周边商城方面的要求也在不断提高,而漫威系列手办周边商城得到广大用户的青睐,使得漫威系列手办周边商城的开发成为必需而且紧迫的事情。漫威系列手办周边商城主要是借助计算机,通过对漫威系列手办周边商城所需的信息管理,增加用户的选择,同时也方便对广大用户信息的及时查询、修改以及对用户信息的及时了解。手办周边商城对用户带来了更多的便利,该系统通过和数据库管理系统软件协作来满足用户的需求。计算机技术在现代管理中的应用,使计算机成为人们应用现代技术的重要工具。能够有效的解决获取信息便捷化、全面化的问题,提高效率。 二、功能设计: 本漫威系列手办周边商城系统主要功能设计为实现管理员;个人中心、系统公告管理、用户管理、商品系列管理、商品信息管理、订单评价管理、论坛管理、系统管理、订单管理,用户;个人中心、订单评价管理、我的收藏管理、订单管理,前台首页;首页、商品信息、论坛信息、我的、跳转到后台、购物车客服等信息管理功能。系统操作流程如下:三、功能截图: 普通用户登录注册: 首页主要功能介绍:商品信息、论坛信息、我的、跳转到后台、购物车客服等信息管理功能 商品详情:可加入购物车、修改数量、立即购买和收藏商品商品详情可以配置图文介绍等 商品评论交流模块 添加了论坛帖子系列功能:普通用户可以发布、可以对帖子进行交流讨论等 帖子详情数据查看、可以在底部评论 在我的个人中心可以查看我的发布、我的订单、我的地址修改以及我的收藏模块和个人信息模块 购物车模块:要选择收货地址信息等 我的订单模块: 我的收藏模块:普通用户后台中心: 订单评价: 收藏管理: 订单信息管理:四、 后端主要功能:修改密码: 用户管理: 商品系列管理: 商品信息管理: 商品详情修改: 商品评价管理: 论坛管理:客服管理: 首页轮播图管理: 订单信息管理:五、数据库设计:表address (地址)编号名称数据类型长度小数位允许空值主键1idbigint200NY2addtimetimestamp190NN3useridbigint200NN4addressvarchar2000NN5namevarchar2000NN6phonevarchar2000NN7isdefaultvarchar2000NN表cart (购物车表)编号名称数据类型长度小数位允许空值主键1idbigint200NY2addtimetimestamp190NN3tablenamevarchar2000YN4useridbigint200NN5goodidbigint200NN6goodnamevarchar2000YN7picturevarchar2000YN8buynumberint100NN9pricefloat130YN10discountpricefloat130YN表chat (客服聊天表)编号名称数据类型长度小数位允许空值主键说明1idbigint200NY主键2addtimetimestamp190NN创建时间3useridbigint200NN用户id4adminidbigint200YN管理员id5asklongtext21474836470YN提问6replylongtext21474836470YN回复7isreplyint100YN是否回复表config (配置文件)编号名称数据类型长度小数位允许空值主键说明1idbigint200NY主键2namevarchar1000NN配置参数名称3valuevarchar1000YN配置参数值表dingdanpingjia (订单评价)编号名称数据类型长度小数位允许空值主键说明1idbigint200NY主键2addtimetimestamp190NN创建时间3dingdanbianhaovarchar2000NN订单编号4shangpinbianhaovarchar2000YN商品编号5shangpinmingchengvarchar2000NN商品名称6shangpinxilievarchar2000YN商品系列7pingfenvarchar2000YN评分8pingjianeironglongtext21474836470YN评价内容9tianjiatupianvarchar2000YN添加图片10pingjiariqidate100YN评价日期11yonghumingvarchar2000YN用户名12lianxidianhuavarchar2000YN联系电话13sfshvarchar2000YN是否审核14shhflongtext21474836470YN审核回复表discussshangpinxinxi (商品信息评论表)编号名称数据类型长度小数位允许空值主键说明1idbigint200NY主键2addtimetimestamp190NN创建时间3refidbigint200NN关联表id4useridbigint200NN用户id5contentlongtext21474836470NN评论内容6replylongtext21474836470YN回复内容表discussxitonggonggao (系统公告评论表)编号名称数据类型长度小数位允许空值主键说明1idbigint200NY主键2addtimetimestamp190NN创建时间3refidbigint200NN关联表id4useridbigint200NN用户id5contentlongtext21474836470NN评论内容6replylongtext21474836470YN回复内容表forum (论坛表)编号名称数据类型长度小数位允许空值主键说明1idbigint200NY主键2addtimetimestamp190NN创建时间3titlevarchar2000YN帖子标题4contentlongtext21474836470NN帖子内容5parentidbigint200YN父节点id6useridbigint200NN用户id7usernamevarchar2000YN用户名8isdonevarchar2000YN状态表orders (订单)编号名称数据类型长度小数位允许空值主键说明1idbigint200NY主键2addtimetimestamp190NN创建时间3orderidvarchar2000NN订单编号4tablenamevarchar2000YN商品表名5useridbigint200NN用户id6goodidbigint200NN商品id7goodnamevarchar2000YN商品名称8picturevarchar2000YN商品图片9buynumberint100NN购买数量10pricefloat130NN价格/积分11discountpricefloat130YN折扣价格12totalfloat130NN总价格/总积分13discounttotalfloat130YN折扣总价格14typeint100YN支付类型15statusvarchar2000YN状态16addressvarchar2000YN地址表shangpinxilie (商品系列)编号名称数据类型长度小数位允许空值主键说明1idbigint200NY主键2addtimetimestamp190NN创建时间3shangpinxilievarchar2000NN商品系列表shangpinxinxi (商品信息)编号名称数据类型长度小数位允许空值主键说明1idbigint200NY主键2addtimetimestamp190NN创建时间3shangpinbianhaovarchar2000YN商品编号4shangpinmingchengvarchar2000NN商品名称5shangpinxilievarchar2000YN商品系列6tupianvarchar2000YN图片7guigevarchar2000YN规格8shangpinxiangqinglongtext21474836470YN商品详情9clicktimedatetime190YN最近点击时间10clicknumint100YN点击次数11pricefloat130NN价格表storeup (收藏表)编号名称数据类型长度小数位允许空值主键说明1idbigint200NY主键2addtimetimestamp190NN创建时间3useridbigint200NN用户id4refidbigint200YN收藏id5tablenamevarchar2000YN表名6namevarchar2000NN收藏名称7picturevarchar2000NN收藏图片表token (token表)编号名称数据类型长度小数位允许空值主键说明1idbigint200NY主键2useridbigint200NN用户id3usernamevarchar1000NN用户名4tablenamevarchar1000YN表名5rolevarchar1000YN角色6tokenvarchar2000NN密码7addtimetimestamp190NN新增时间8expiratedtimetimestamp190NN过期时间表users (用户表)编号名称数据类型长度小数位允许空值主键说明1idbigint200NY主键2usernamevarchar1000NN用户名3passwordvarchar1000NN密码4rolevarchar1000YN角色5addtimetimestamp190NN新增时间表xitonggonggao (系统公告)编号名称数据类型长度小数位允许空值主键说明1idbigint200NY主键2addtimetimestamp190NN创建时间3gonggaobiaotivarchar2000NN公告标题4gonggaoleixingvarchar2000NN公告类型5tupianvarchar2000YN图片6neironglongtext21474836470YN内容7faburiqidate100YN发布日期表yonghu (用户)编号名称数据类型长度小数位允许空值主键说明1idbigint200NY主键2addtimetimestamp190NN创建时间3yonghumingvarchar2000NN用户名4mimavarchar2000NN密码5xingmingvarchar2000NN姓名6xingbievarchar2000YN性别7touxiangvarchar2000YN头像8lianxidianhuavarchar2000YN联系电话9moneyfloat130YN余额六、关键代码: /** * 登录相关 */@RequestMapping("users")@RestControllerpublic class UserController{ @Autowired private UserService userService; @Autowired private TokenService tokenService; /** * 登录 */ @IgnoreAuth// @PostMapping(value = "/login") @RequestMapping(value = "/login", method ={RequestMethod.GET,RequestMethod.POST} ) public R login(String username, String password, String captcha, HttpServletRequest request) { UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username)); if(user==null || !user.getPassword().equals(password)) { return R.error("账号或密码不正确"); } String token = tokenService.generateToken(user.getId(),username, "users", user.getRole()); return R.ok().put("token", token); } /** * 注册 */ @IgnoreAuth @PostMapping(value = "/register") public R register(@RequestBody UserEntity user){// ValidatorUtils.validateEntity(user); if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) { return R.error("用户已存在"); } userService.insert(user); return R.ok(); } /** * 退出 */ @GetMapping(value = "logout") public R logout(HttpServletRequest request) { request.getSession().invalidate(); return R.ok("退出成功"); } /** * 密码重置 */ @IgnoreAuth @RequestMapping(value = "/resetPass") public R resetPass(String username, HttpServletRequest request){ UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username)); if(user==null) { return R.error("账号不存在"); } user.setPassword("123456"); userService.update(user,null); return R.ok("密码已重置为:123456"); } /** * 列表 */ @RequestMapping("/page") public R page(@RequestParam Map<String, Object> params,UserEntity user){ EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>(); PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params)); return R.ok().put("data", page); } /** * 列表 */ @RequestMapping("/list") public R list( UserEntity user){ EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>(); ew.allEq(MPUtil.allEQMapPre( user, "user")); return R.ok().put("data", userService.selectListView(ew)); } /** * 信息 */ @RequestMapping("/info/{id}") public R info(@PathVariable("id") String id){ UserEntity user = userService.selectById(id); return R.ok().put("data", user); } /** * 获取用户的session用户信息 */ @RequestMapping("/session") public R getCurrUser(HttpServletRequest request){ Long id = (Long)request.getSession().getAttribute("userId"); UserEntity user = userService.selectById(id); return R.ok().put("data", user); } /** * 保存 */ @PostMapping("/save") public R save(@RequestBody UserEntity user){// ValidatorUtils.validateEntity(user); if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) { return R.error("用户已存在"); } userService.insert(user); return R.ok(); } /** * 修改 */ @RequestMapping("/update") public R update(@RequestBody UserEntity user){// ValidatorUtils.validateEntity(user); userService.updateById(user);//全部更新 return R.ok(); } /** * 删除 */ @RequestMapping("/delete") public R delete(@RequestBody Long[] ids){ userService.deleteBatchIds(Arrays.asList(ids)); return R.ok(); }}<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 配置数据源 --> <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${jdbc_url}"/> <property name="username" value="${jdbc_username}"/> <property name="password" value="${jdbc_password}"/> <!-- 初始化连接大小 --> <property name="initialSize" value="0"/> <!-- 连接池最大使用连接数量 --> <property name="maxActive" value="20"/> <!-- 连接池最大空闲 --> <property name="maxIdle" value="20"/> <!-- 连接池最小空闲 --> <property name="minIdle" value="0"/> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="60000"/> <property name="validationQuery" value="${validationQuery}"/> <property name="testOnBorrow" value="false"/> <property name="testOnReturn" value="false"/> <property name="testWhileIdle" value="true"/> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000"/> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="25200000"/> <!-- 打开removeAbandoned功能 --> <property name="removeAbandoned" value="true"/> <!-- 1800秒,也就是30分钟 --> <property name="removeAbandonedTimeout" value="1800"/> <!-- 关闭abanded连接时输出错误日志 --> <property name="logAbandoned" value="true"/> <!-- 监控数据库 --> <property name="filters" value="mergeStat"/> </bean> <!-- Spring整合Mybatis,更多查看文档:http://mp.baomidou.com --> <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 自动扫描Mapping.xml文件 --> <property name="mapperLocations" value="classpath:mapper/*.xml"/> <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/> <property name="typeAliasesPackage" value="com..model.*"/> <property name="typeEnumsPackage" value="com.model.enums"/> <property name="plugins"> <array> <!-- 分页插件配置 --> <bean id="paginationInterceptor" class="com.baomidou.mybatisplus.plugins.PaginationInterceptor"> </bean> </array> </property> <!-- 全局配置注入 --> <property name="globalConfig" ref="globalConfig" /> </bean> <bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration"> <!-- AUTO->`0`("数据库ID自增") INPUT->`1`(用户输入ID") ID_WORKER->`2`("全局唯一ID") UUID->`3`("全局唯一ID") --> <property name="idType" value="2" /> <!-- MYSQL->`mysql` ORACLE->`oracle` DB2->`db2` H2->`h2` HSQL->`hsql` SQLITE->`sqlite` POSTGRE->`postgresql` SQLSERVER2005->`sqlserver2005` SQLSERVER->`sqlserver` --> <!-- Oracle需要添加该项 --> <!-- <property name="dbType" value="oracle" /> --> <!-- 全局表为下划线命名设置 true --> <!-- <property name="dbColumnUnderline" value="true" /> --> <property name="metaObjectHandler"> <bean class="com.config.MyMetaObjectHandler" /> </property> </bean> <!-- MyBatis 动态扫描 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.dao"/> </bean> <!-- 配置事务管理 --> <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 事务管理 属性 --> <tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="append*" propagation="REQUIRED"/> <tx:method name="save*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="modify*" propagation="REQUIRED"/> <tx:method name="edit*" propagation="REQUIRED"/> <tx:method name="insert*" propagation="REQUIRED"/> <tx:method name="delete*" propagation="REQUIRED"/> <tx:method name="remove*" propagation="REQUIRED"/> <tx:method name="repair" propagation="REQUIRED"/> <tx:method name="get*" propagation="REQUIRED" read-only="true"/> <tx:method name="find*" propagation="REQUIRED" read-only="true"/> <tx:method name="load*" propagation="REQUIRED" read-only="true"/> <tx:method name="search*" propagation="REQUIRED" read-only="true"/> <tx:method name="datagrid*" propagation="REQUIRED" read-only="true"/> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <!-- 配置切面 --> <aop:config> <aop:pointcut id="transactionPointcut" expression="execution(* com.service..*.*(..))"/> <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice"/> </aop:config> </beans>七、论文报告: 八、源码获取:大家点赞、收藏、关注、评论啦 、查看微信公众号获取联系方式打卡 文章 更新 200/ 365天 精彩专栏推荐订阅:在下方专栏Java项目精品实战案例《100套》web前端期末大作业网页实战《100套》原文链接:https://blog.csdn.net/weixin_39709134/article/details/122967896
吃完就睡,快乐加倍
发表于2022-02-20 22:18:35
2022-02-20 22:18:35
最后回复
747