鲜花商城系统

鲜花商城系统

一、项目演示

鲜花销售系统

二、项目介绍

基于springboot和vue前后端分离的鲜花商城系统

系统角色:用户、管理员

主要菜单功能:

[1]后台(管理员也就是商家):登录,首页,用户管理,商品管理,订单管理,财务管理,系统管理,充值管理,角色管理,个人中心

[2]前台(用户):注册,登录,首页,自商城区,登录,注册,我的订单,我的收藏,个人中心,购物车,评论

语言:java
前端技术:Vue、 ELementUI、echarts
后端技术:SpringBoot、Mybatis-Plus
数据库:MySQL

三、系统部分功能截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、部分代码展示

package com.mall.goods.controller;

import com.mall.common.utils.FuyouResult;
import com.mall.common.utils.JsonUtils;
import com.mall.common.utils.RedisOperator;
import com.mall.goods.entity.ShopCat;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;

@Api(value = "购物车接口controller", tags = {"购物车接口相关的api"})
@RequestMapping("shopcart")
@RestController
public class  ShopCatController extends BaseController{

    @Autowired
    private RedisOperator redisOperator;

    @ApiOperation(value = "添加商品到购物车", notes = "添加商品到购物车", httpMethod = "POST")
    @PostMapping("/add")
    public FuyouResult add(@RequestBody ShopCat shopCat,
                                           HttpServletRequest request,
                                           HttpServletResponse response) {
        if (StringUtils.isBlank(shopCat.getUserId())) {
            return FuyouResult.errorMsg("");
        }
        System.out.println(shopCat);
        //前端用户在登录的情况下,添加商品到购物车,会同时在后端同步购物车到redis缓存
        //需要判断当前购物车中已经存在的商品,如果存在,则累加数量
        String shopcartJson = redisOperator.get(FUYOU_SHOPCART + ":" +shopCat.getUserId());
        List<ShopCat> shopCatsList = null;
        if (StringUtils.isNotBlank(shopcartJson)){
            //redis中已经有购物车了
            shopCatsList = JsonUtils.jsonToList(shopcartJson,ShopCat.class);
            //判断购物车中是否存在已有商品,如果有的话number直接替换
            boolean isHaving = false;
            for (ShopCat sc : shopCatsList){
                String tmpSpecId = sc.getId();
                if (tmpSpecId.equals(shopCat.getId())) {
                    sc.setNumber(sc.getNumber() + shopCat.getNumber());
                    if (sc.getNumber() <= sc.getStock()){
                        isHaving = true;
                    }else {
                        return FuyouResult.errorMsg("数量超过库存了哦!");
                    }
                }
            }
            if (!isHaving){
                shopCatsList.add(shopCat);
            }
        }else {
            //redis中没有购物车
            shopCatsList = new ArrayList<>();
            //直接添加到购物车中
            shopCatsList.add(shopCat);
        }
        //覆盖现有redis中的购物车
        redisOperator.set(FUYOU_SHOPCART + ":" +shopCat.getUserId(),JsonUtils.objectToJson(shopCatsList));
        return FuyouResult.ok();
    }

    @ApiOperation(value = "修改购物车商品数量", notes = "修改购物车商品数量", httpMethod = "GET")
    @GetMapping("/selectNumber")
    public FuyouResult selectNumber(@RequestParam String userId,
                                    @RequestParam String activityNumber,
                                    @RequestParam Integer number,
                                    HttpServletRequest request,
                                    HttpServletResponse response){

        if (StringUtils.isBlank(userId) || StringUtils.isBlank(activityNumber)) {
            return FuyouResult.errorMsg("参数不能为空");
        }
        String shopcartJson = redisOperator.get(FUYOU_SHOPCART+":"+userId);
        if (StringUtils.isNotBlank(shopcartJson)){
            //redis中已经有了购物车
            List<ShopCat> shopCatList = JsonUtils.jsonToList(shopcartJson,ShopCat.class);
            //判断购物车中是否存在已有商品,如果有的话则删除
            for (ShopCat sc : shopCatList){
                String tmpSpecId = sc.getAcitivityNumber();
                if (tmpSpecId.equals(activityNumber)){
                    sc.setNumber(number);
                    //覆盖现有redis中的购物车数据
                    redisOperator.set(FUYOU_SHOPCART+":"+userId,JsonUtils.objectToJson(shopCatList));
                    break;
                }
            }
        }
        return FuyouResult.ok("数量修改成功");
    }

    @ApiOperation(value = "从购物车中删除商品", notes = "从购物车中删除商品", httpMethod = "POST")
    @PostMapping("/del")
    public FuyouResult del(@RequestParam String userId,
                                           @RequestParam String activityNumber,
                                           HttpServletRequest request,
                                           HttpServletResponse response) {
        if (StringUtils.isBlank(userId) || StringUtils.isBlank(activityNumber)) {
            return FuyouResult.errorMsg("参数不能为空");
        }
        // TODO 用户在页面删除购物车中的商品数据,如果此时用户已经登录,则需要同步删除后端购物车中的商品
        String shopcartJson = redisOperator.get(FUYOU_SHOPCART+":"+userId);
        if (StringUtils.isNotBlank(shopcartJson)){
            //redis中已经有购物车了
            List<ShopCat> shopCatList = JsonUtils.jsonToList(shopcartJson,ShopCat.class);
            //判断购物车中是否存在已有商品,如果有的话则删除
            for (ShopCat sc : shopCatList){
                String tmpSpecId = sc.getAcitivityNumber();
                if (tmpSpecId.equals(activityNumber)){
                    shopCatList.remove(sc);
                    break;
                }
            }
            //覆盖现有redis中的购物车数据
            redisOperator.set(FUYOU_SHOPCART+":"+userId,JsonUtils.objectToJson(shopCatList));
        }
        return FuyouResult.ok("删除成功");
    }

    @ApiOperation(value = "查询购物车的商品", notes = "查询购物车的商品", httpMethod = "GET")
    @GetMapping("/get")
    public JSONArray get(@RequestParam String userId,
                         HttpServletRequest request,
                         HttpServletResponse response) {
        String shopcartJson =redisOperator.get(FUYOU_SHOPCART+":"+userId);
        JSONArray jsonArray = JSONObject.parseArray(shopcartJson);
        System.out.println(jsonArray);
        return jsonArray;
    }

}

package com.mall.sys.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mall.common.result.R;
import com.mall.common.utils.FieldAssert;
import com.mall.goods.entity.User;
import com.mall.goods.entity.queryVo.UserQueryVo;
import com.mall.goods.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RestController;

/**
 * 商城用户表 前端控制器
 */
@RestController
@RequestMapping("/sys/goodsUser")
@Api(tags = "商城用户表")
public class GoodsSysUserController {

    @Autowired
    UserService iGoodsUserService;

    /**
     * 查询商城用户表列表
     */
    @PostMapping("queryGoodsUserList")
    @ApiOperation("商城用户表列表")
    public R queryGoodsUserList(@RequestBody UserQueryVo queryVo) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        Page<User> page = iGoodsUserService.page(queryVo.getPage(), queryWrapper);
        return R.ok().data("dataList", page);
    }

    /**
     * 保存或者更新商城用户表信息
     */
    @PostMapping("saveOrUpdateGoodsUser")
    @ApiOperation("保存或者更新商城用户表信息")
    public R saveOrUpdateGoodsUser(@RequestBody User entity) {
        boolean b = true;
        if (StringUtils.isEmpty(entity.getId())) {
            b = iGoodsUserService.save(entity);
        } else {
            b = iGoodsUserService.updateById(entity);
        }
        return R.th(b);
    }


    /**
     * 根据id查询商城用户表信息
     */
    @GetMapping("getByIdGoodsUser/{id}")
    @ApiOperation("根据id查询商城用户表信息")
    public R getByIdGoodsUser(@PathVariable("id") String id) {
        User dataGoodsUser = iGoodsUserService.getById(id);
        return R.ok().data("entity", dataGoodsUser);

    }

    /**
     * 根据id删除商城用户表信息
     */
    @DeleteMapping("removeByIdGoodsUser/{id}")
    @ApiOperation("根据id删除商城用户表信息")
    public R removeByIdGoodsUser(@PathVariable("id") String id) {
        boolean effect = iGoodsUserService.removeById(id);
        return R.th(effect);

    }


    /**
     * 查询携带余额的用户信息
     */
    @GetMapping("getByCarryMoneyDetail/{id}")
    public R getByCarryMoneyDetail(@PathVariable("id") Long id) {
        return R.ok().data("dataInfo",iGoodsUserService.getByCarryMoneyDetail(id));
    }


    @PostMapping("uptUserInfo")
    public R uptUserInfo(@RequestBody User user) {
        if (!StringUtils.isEmpty(user.getUsername())){
            QueryWrapper<User> queryWrapper=new QueryWrapper<>();
            queryWrapper.eq("username",user.getUsername());
             iGoodsUserService.list(queryWrapper).forEach(res->{
                 FieldAssert.isTrue(res.getId().equals(user.getId()),"用户已存在");
            });
        }
        iGoodsUserService.updateById(user);
        return R.ok();
    }

}


package com.mall.sys.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mall.common.result.R;
import com.mall.common.utils.MailServiceImpl;
import com.mall.sys.entity.MallOrder;
import com.mall.sys.entity.queryVo.MallOrderQueryVo;
import com.mall.sys.entity.vo.MallGoodsOrderVo;
import com.mall.sys.mapper.MallGoodsOrderMapper;
import com.mall.sys.service.MallOrderService;
import com.mall.goods.entity.Address;
import com.mall.goods.entity.User;
import com.mall.goods.service.AddressService;
import com.mall.goods.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 订单详情表 前端控制器
 */
@RestController
@RequestMapping("/sys/mallOrder")
@Api(tags = "订单详情表")
public class MallOrderController {

    @Autowired
    MallOrderService iMallOrderService;

    @Autowired
    AddressService addressService;

    @Resource
    MallGoodsOrderMapper mallGoodsOrderMapper;


    @Autowired
    private MailServiceImpl mailService;

    @Autowired
    UserService iUserService;


    /**
     * 查询订单详情表列表
     */
    @PostMapping("queryMallOrderList")
    @ApiOperation("订单详情表列表")
    public R queryMallOrderList(@RequestBody MallOrderQueryVo queryVo) {
        QueryWrapper<MallOrder> queryWrapper = new QueryWrapper<>();
        if (queryVo.getUserId() != null) {
            queryWrapper.eq("user_id", queryVo.getUserId());
        }
        queryWrapper.orderByDesc("gmt_create");
        Page<MallOrder> page = iMallOrderService.page(queryVo.getPage(), queryWrapper);
        return R.ok().data("dataList", page);
    }

    /**
     * 保存或者更新订单详情表信息
     */
    @PostMapping("saveOrUpdateMallOrder")
    @ApiOperation("保存或者更新订单详情表信息")
    public R saveOrUpdateMallOrder(@RequestBody MallOrder entity) {
        boolean b = true;
        if (StringUtils.isEmpty(entity.getId())) {
            b = iMallOrderService.save(entity);
        } else {
            b = iMallOrderService.updateById(entity);
        }
        return R.th(b);
    }


    /**
     * 根据id查询订单详情表信息
     */
    @GetMapping("getByIdMallOrder/{id}")
    @ApiOperation("根据id查询订单详情表信息")
    public R getByIdMallOrder(@PathVariable("id") String id) {
        QueryWrapper<MallOrder> orderQueryWrapper = new QueryWrapper<>();
        orderQueryWrapper.eq("order_umber", id);
        MallOrder one = iMallOrderService.getOne(orderQueryWrapper);
        Address byId = addressService.getById(one.getAddressId());
        List<MallGoodsOrderVo> mallGoodsOrderVoList = mallGoodsOrderMapper.getMallGoodsOrderVoList(id);
        return R.ok().data("orderInfo", one).data("goodsAddressInfo", byId).data("MallGoodsList", mallGoodsOrderVoList);

    }

    /**
     * 根据id删除订单详情表信息
     */
    @DeleteMapping("removeByIdMallOrder/{id}")
    @ApiOperation("根据id删除订单详情表信息")
    public R removeByIdMallOrder(@PathVariable("id") String id) {
        boolean effect = iMallOrderService.removeById(id);
        return R.th(effect);

    }

    @GetMapping("sendCore/{orderNumber}")
    public R sendCore(@PathVariable String orderNumber) throws Exception {
        QueryWrapper<MallOrder> mallOrderQueryWrapper = new QueryWrapper<>();
        mallOrderQueryWrapper.eq("order_umber", orderNumber);
        MallOrder one = iMallOrderService.getOne(mallOrderQueryWrapper);
        User byId = iUserService.getById(one.getUserId());
        Map<String, Object> hashMap = new HashMap<>();
        hashMap.put("username", byId.getUsername());
        hashMap.put("orderNumber", orderNumber);
        //mailService.sendHtmlMessageMail(byId.getEmail(), "发货通知", hashMap, "sys-notice.ftl");
        UpdateWrapper<MallOrder> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("order_umber", orderNumber);
        updateWrapper.set("status",1);
        iMallOrderService.update(updateWrapper);
        return R.ok();
    }

}


package com.mall.sys.controller;


import cn.hutool.json.JSONUtil;
import com.mall.common.annotation.IgnoreSecurity;
import com.mall.common.result.R;
import com.mall.common.utils.JwtUtils;
import com.mall.common.utils.SnowflakeUtil;
import com.mall.common.utils.UserInfoUtil;
import com.mall.common.utils.UserLogInfoDto;
import com.mall.sys.entity.MallSysUser;
import com.mall.sys.entity.queryVo.MallSysUserQueryVo;
import com.mall.sys.service.MallMenuService;
import com.mall.sys.service.MallSysUserService;
import io.jsonwebtoken.Claims;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * 用户表 前端控制器
 */
@RestController
@RequestMapping("/sys/mallSysUser")
@Api(tags = "用户表")
public class MallSysUserController {

    @Autowired
    MallSysUserService mallSysUserService;


    @Autowired
    MallMenuService mallMenuService;




    /**
     * 登录接口
     */
    @PostMapping("login")
    @IgnoreSecurity
    @ApiOperation("登录")
    public R login(@RequestBody MallSysUser user, HttpServletRequest request) {

        Map login = mallSysUserService.login(user, request);

        return R.ok().data(login);
    }

    @PostMapping("uptToken")
    @IgnoreSecurity
    @ApiOperation("uptToken")
    public R aaa(@RequestBody String tokenS) {
        Claims claims = JwtUtils.validateJWT(tokenS);
        String issuedAt = claims.getSubject();
        UserLogInfoDto userLogInfoDto = JSONUtil.toBean(issuedAt, UserLogInfoDto.class);
        String token = JwtUtils.createJWT(SnowflakeUtil.randomLong() + "", "hujie", "{'userId':" + userLogInfoDto.getUserId() + ",'username':" + userLogInfoDto.getUsername() + ",'type':" + userLogInfoDto.getType() + ",'roleId':" + userLogInfoDto.getRoleId() + ",loginDateLong:" + userLogInfoDto.getLoginDateLong() + ",loginKey:" + userLogInfoDto.getLoginKey() + "}", 60 * 1000 * 30);


        return R.ok().data("token", token);
    }


    /**
     分页查询
     */
    @PostMapping("queryPage")
    @ApiOperation("查看用户列表")
    public R queryPage(@RequestBody MallSysUserQueryVo mallSysUserQueryVo) {
        return R.ok().data("list", mallSysUserService.queryPage(mallSysUserQueryVo));
    }


    /**
     更新用户状态
     */
    @PutMapping("/users/{uid}/state/{status}")
    @ApiOperation("更新用户状态")
    public R uptStatus(@PathVariable("uid") Long uid, @PathVariable("status") Boolean b) {
        MallSysUser hujieitUser = new MallSysUser();
        hujieitUser.setId(uid);
        hujieitUser.setMgState(b);
        mallSysUserService.uptUser(hujieitUser);
        return R.ok();
    }

    @PostMapping("save")
    @ApiOperation("添加用户")
    public R saveUser(@RequestBody MallSysUser mallSysUser) {
        if (StringUtils.isEmpty(mallSysUser.getId())) {
            mallSysUserService.addUser(mallSysUser);
        } else {
            mallSysUserService.saveOrUpdate(mallSysUser);
        }

        return R.ok();
    }

    @DeleteMapping("del/{id}")
    @ApiOperation("删除用户")
    public R delUser(@PathVariable String id) {
        boolean b = mallSysUserService.delUser(id);
        return R.th(b);
    }


    @GetMapping("getById/{id}")
    @ApiOperation("查询用户详情")
    public R getByIdUser(@PathVariable String id) {
        return R.ok().data(mallSysUserService.userDetail(id));
    }

    @GetMapping("getByIdThis")
    @ApiOperation("查询用户详情")
    public R getByIdUserThis() {
        return R.ok().data(mallSysUserService.userDetail(UserInfoUtil.getUserId()));
    }

}


五、底部获取项目源码(9.9¥带走)

有问题,或者需要协助调试运行项目的也可以

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一杯奶茶¥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值