demo

xss大约 6 分钟demodemo


OrderInfoService


package com.javaclimb.xshopping.service;


import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.javaclimb.xshopping.common.Common;
import com.javaclimb.xshopping.common.ResultCode;
import com.javaclimb.xshopping.entity.GoodsInfo;
import com.javaclimb.xshopping.entity.OrderGoodsRel;
import com.javaclimb.xshopping.entity.OrderInfo;
import com.javaclimb.xshopping.entity.UserInfo;
import com.javaclimb.xshopping.exception.CustomException;
import com.javaclimb.xshopping.mapper.OrderGoodsRelMapper;
import com.javaclimb.xshopping.mapper.OrderInfoMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Service
public class OrderInfoService {

    @Resource
    private UserInfoService userInfoService;

    @Resource
    private OrderInfoMapper orderInfoMapper;

    @Resource
    private GoodsInfoService goodsInfoService;

    @Resource
    private CartInfoSevice cartInfoSevice;

    @Resource
    private OrderGoodsRelMapper orderGoodsRelMapper;




    /**
     * 下单
     *
     * 前端把订单商品列表返回后台orderInfo
     * orderInfo 存在用户id  后台获取用户信息
     * 修饰订单id 保存
     */
    //spring管理sql事务 出错回滚数据
    @Transactional
    public OrderInfo add(OrderInfo orderInfo){
        //1 生成订单信息 用户信息 放到orderOInfo
        Long userId=orderInfo.getUserid();
        //d订单id 用户id+当前时间+流水号
        String orderId=userId+ DateUtil.format(new Date(),"yyyyMMddHHmm")+ RandomUtil.randomNumbers(4);
        orderInfo.setOrderid(orderId);
        //用户相关
        // 用户查到的数据放到订单信息表
        UserInfo userInfo=userInfoService.findById(userId);
        //地址
        orderInfo.setLinkaddress(userInfo.getAddress());
        //昵称
        orderInfo.setLinkman(userInfo.getNickname());
        //电话
        orderInfo.setLinkphone(userInfo.getPhone());
        //2 保存订单表//订单创建时间
        orderInfo.setCreatetime(DateUtil.formatDateTime(new Date()));
        //保存
        orderInfoMapper.insertSelective(orderInfo);

        //
        List<OrderInfo> orderInfoList=orderInfoMapper.findByOrderId(orderId);



        /**
         * //3 查询订单商品列表 便利
         * goodsList
         * 从orderInfo获取商品列表
         * 获取各个商品id 在后台查询商品数量 商品库存 修改
         * 查询销量 修改销量 sale+count
         * 修改关联表
         */
        List<GoodsInfo> goodsList=orderInfo.getGoodsList();

        for (GoodsInfo orderGoodsVO : goodsList){

            Long goodsId=orderGoodsVO.getId();
            //goodsDetail   goodsInfoService  数据库
            GoodsInfo goodsDetail=goodsInfoService.findById(goodsId);

            if (goodsDetail == null){
                continue;
            }
            //order 购买
            Integer orderCount=orderGoodsVO.getCount() == null ? 0 : orderGoodsVO.getCount();
            // 库存
            Integer goodsCount=goodsDetail.getCount() == null ? 0 :goodsDetail.getCount();

        //4 修改库存
        if (orderCount>goodsCount){
            throw new CustomException(ResultCode.ORDER_PAY_ERROR);
        }
        goodsDetail.setCount(goodsCount - orderCount);
            //5 增加销量
            int sales=goodsDetail.getSales() == null ? 0 :goodsDetail.getSales();
            goodsDetail.setSales(sales+orderCount);
            goodsInfoService.update(goodsDetail);


            //6 商品订单关联表 将增加关系
            OrderGoodsRel orderGoodsRel=new OrderGoodsRel();
            orderGoodsRel.setOrderid(orderInfoList.get(0).getId());
            orderGoodsRel.setGoodsid(goodsId);
            orderGoodsRel.setCount(orderCount);
            orderGoodsRelMapper.insert(orderGoodsRel);
    }

        //7 清除购物车
        cartInfoSevice.empty(userId);

        return orderInfo;
    }

    /**
     * 根据终端用户获取 订单 状态
     *
     */
    public PageInfo<OrderInfo> findFrontPages(Long userId,String state,Integer pageNum,Integer pageSize){
        PageHelper.startPage(pageNum,pageSize);
        List<OrderInfo> orderInfos;
        //
        if (userId ==null){
            orderInfos=new ArrayList<>();
        }else {
            orderInfos=orderInfoMapper.findByEndUserId(userId,state);
        }
        for (OrderInfo orderInfo:orderInfos){
            packOrder(orderInfo);
        }



        return PageInfo.of(orderInfos);
    }




    /**
     *包装订单的用户和商品信息
     * order
     * userid  --> userinfo
     * id -----> order_goods_rel : orderid(order.id)  goodsid  count
     * goodsid --> goodsinfo
     * count
     *
     * 包装 把 用户信息user info  商品信息 goods info 查询到并放入orderinfo
     *
     */
    private void packOrder(OrderInfo orderInfo){

        //用户信息 userinfo  orderInfo.getUserid()不会空 在添加购物车已判断是否空
       orderInfo.setUserInfo(userInfoService.findById(orderInfo.getUserid())) ;

       //商品信息
        Long orderId=orderInfo.getId();
        //rel  id  goodsid count  用户买的什么商品id 买了多少件
        List<OrderGoodsRel> rels= orderGoodsRelMapper.findByOrderid(orderId);
        List<GoodsInfo> goodsInfoList=new ArrayList<>();

        for (OrderGoodsRel rel: rels){
            //获取 用户购买 商品的信息
            GoodsInfo goodsInfo=goodsInfoService.findById(rel.getGoodsid());
            if (goodsInfo != null){
                //rel.getCount()  用户买的什么商品id 买了多少件
                goodsInfo.setCount(rel.getCount());
                goodsInfoList.add(goodsInfo);
            }
        }
        orderInfo.setGoodsList(goodsInfoList);
        //orderInfo  userInfo +  goodsList
    }


    /**
     * 改变订单状态
     * @param id
     * @param state
     */
    public void changeState(Long id,String state){
        OrderInfo order=orderInfoMapper.finById(id);
        Long userId=order.getUserid();
        UserInfo user=userInfoService.findById(userId);

        if (state.equals("待发货")){
            //校验余额
            Double account=user.getAccount();
            Double totalPrice=order.getTotalprice();

            if ((account < totalPrice)){
                throw new CustomException("-1","账户余额不足");
            }
            user.setAccount(user.getAccount() - order.getTotalprice());
            //修改用户余额
            userInfoService.update(user);

        }

        if (state.equals("已退货")){
            //校验余额
            Double account=user.getAccount();
            Double totalPrice=order.getTotalprice();
            user.setAccount(user.getAccount() + order.getTotalprice());
            //修改用户余额
            userInfoService.update(user);
        }
        //更新订单的状态
        orderInfoMapper.updateState(id,state);
    }

    /**
     *后台 查看订单列表
     * @param userId
     * @param pageNum
     * @param pageSize
     * @param request
     * @return
     */
    public PageInfo<OrderInfo> findPage(Long userId, Integer pageNum, Integer pageSize, HttpServletRequest request){
        //
        UserInfo user=(UserInfo) request.getSession().getAttribute(Common.USER_INFO);
        if (user == null){
            throw new CustomException("1001","session已失效,请重新登录");

        }
        //
        Integer level=user.getLevel();
        PageHelper.startPage(pageNum,pageSize);
        List<OrderInfo> orderInfos;
        //
        if (1 == level){
            orderInfos=orderInfoMapper.selectAll();
        }else if(userId!=null){
            orderInfos=orderInfoMapper.findByEndUserId(userId,null);
        }else {
            orderInfos=new ArrayList<>();
        }
        for (OrderInfo orderInfo: orderInfos){
            packOrder(orderInfo);
        }
        return PageInfo.of(orderInfos);
    }





    /**
     * 删除订单
     * @param id
     * Transactional
     */
    @Transactional
    public void delete(Long id) {
        orderInfoMapper.deleteById(id);
        orderGoodsRelMapper.deleteByOrderId(id);
    }



    /**
     * 根据id查询订单信息
     *
     */
    public OrderInfo findById(Long id) {
      OrderInfo orderInfo= orderInfoMapper.selectByPrimaryKey(id);
      packOrder(orderInfo);
      return orderInfo;
    }


    /**
     *总交易额
     */

    public Double count(){
        return orderInfoMapper.count();
    }

    /**
     * 总销量
     */

    public Integer totalShopping(){
        return orderGoodsRelMapper.totalShopping();
    }

    /**
     * 分类总销售
     */

    public List<Map<String,Object>> getTypePrice(){
        return orderInfoMapper.getTypePrice();
    }
    /**
     * 分类总销售
     */

    public List<Map<String,Object>> getTypeCount(){
        return orderInfoMapper.getTypeCount();
    }

}

OrderInfoController


package com.javaclimb.xshopping.controller;

import com.github.pagehelper.PageInfo;
import com.javaclimb.xshopping.common.Result;
import com.javaclimb.xshopping.common.ResultCode;
import com.javaclimb.xshopping.entity.GoodsInfo;
import com.javaclimb.xshopping.entity.OrderInfo;
import com.javaclimb.xshopping.exception.CustomException;
import com.javaclimb.xshopping.service.OrderInfoService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 订单控制器
 */
@RestController
@RequestMapping(value = "/orderInfo")
public class OrderInfoController {

    @Resource
    OrderInfoService orderInfoService;

    /**
     * 下单
     */
    @PostMapping
    public Result<OrderInfo> add(@RequestBody OrderInfo orderInfo){

        Long userId=orderInfo.getUserid();
        List<GoodsInfo> goodsList=orderInfo.getGoodsList();
        if (userId == null || goodsList == null || goodsList.size() == 0){
            throw new CustomException(ResultCode.PARAM_ERROR);
        }

        orderInfo.setState("待付款");
        return Result.success(orderInfoService.add(orderInfo));

    }


    /**
     * 查询所有信息  分页
     * required = false 不是必须传值
     */
    @GetMapping("/page")
    public Result<PageInfo<OrderInfo>> findPage(@RequestParam(required = false) Long userId,
                                                    @RequestParam(required = false,defaultValue = "1") Integer pageNum,
                                                    @RequestParam(required = false,defaultValue = "10") Integer pageSize,
                                                    HttpServletRequest request){
        return Result.success(orderInfoService.findPage(userId,pageNum,pageSize,request));
    }



    /**
     * 查询所有信息  分页
     * required = false 不是必须传值
     */
    @GetMapping("/page/front")
    public Result<PageInfo<OrderInfo>> findFrontPage(@RequestParam(required = false) Long userId,
                                                     @RequestParam(required = false) String state,
                                                     @RequestParam(required = false,defaultValue = "1") Integer pageNum,
                                                     @RequestParam(required = false,defaultValue = "10") Integer pageSize){
        return Result.success(orderInfoService.findFrontPages(userId,state,pageNum,pageSize));
    }

    /**
     *改变订单状态
     */
    @PostMapping("/state/{id}/{state}")
    public Result state(@PathVariable Long id,@PathVariable String state){
        orderInfoService.changeState(id,state);
        return Result.success();
    }

    /**
     *删除订单
     */
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Long id){
        orderInfoService.delete(id);
        return Result.success();
    }
    /**
     * 根据id查询订单信息
     *
     */
    @GetMapping("/order/{id}")
    public Result<OrderInfo> findById(@PathVariable Long id){
        OrderInfo orderInfo= orderInfoService.findById(id);
        return Result.success(orderInfo);
    }

}

CartInfoSevice


package com.javaclimb.xshopping.service;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.javaclimb.xshopping.common.Common;
import com.javaclimb.xshopping.entity.CartInfo;
import com.javaclimb.xshopping.entity.GoodsInfo;
import com.javaclimb.xshopping.entity.UserInfo;
import com.javaclimb.xshopping.exception.CustomException;
import com.javaclimb.xshopping.mapper.CartInfoMapper;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 购物车 方法1
 */
@Service
public class CartInfoSevice {


    @Resource
    private CartInfoMapper cartInfoMapper;

    @Resource
    private GoodsInfoService goodsInfoService;


    /**
     * add
     */
    public CartInfo add(CartInfo detailInfo){
        Long userid=detailInfo.getUserid();
        Long goodsid=detailInfo.getGoodsid();

        //查询购物车有没有数据 有更新 没有添加
        //查询流
        //select * from cart_info where( ( userId = userId and goodsId = goodsId ) )
        Example example=new Example(CartInfo.class);
        example.createCriteria()
                .andEqualTo("userid",userid)
                .andEqualTo("goodsid",goodsid);
        List<CartInfo> infos=cartInfoMapper.selectByExample(example);

        //CollectionUtil 封装的工具类
        if (CollectionUtil.isEmpty(infos)){
            //没有添加
            detailInfo.setCreatetime(DateUtil.formatDateTime(new Date()));
            cartInfoMapper.insertSelective(detailInfo);
        }else {
            //有更新
            CartInfo cartInfo=infos.get(0);
            cartInfo.setCount(cartInfo.getCount()+detailInfo.getCount());
            cartInfoMapper.updateByPrimaryKeySelective(cartInfo);
        }
        return detailInfo;
    }

    /**
     * 根据用户id 获取购物车列表 获得购物车商品的数量
     * @param userId
     * @return
     */

    public List<GoodsInfo> findAll(Long userId){

        List<CartInfo> cartInfoList=cartInfoMapper.findCartByUserId(userId);
        List<GoodsInfo> goodsList=new ArrayList<>();

        for (CartInfo cartInfo:cartInfoList){

            long goodsId=cartInfo.getGoodsid();
            GoodsInfo goodsInfo=goodsInfoService.findById(goodsId);

            if (goodsInfo !=null){
                //注意 这里是用户加入购物车的数量
                goodsInfo.setCount(cartInfo.getCount());
                //这里的id是购物车的商品id
                goodsInfo.setId(cartInfo.getGoodsid());

                goodsList.add(goodsInfo);
            }
        }
        return goodsList;
    }

    /**
     * 删除 购物车对应商品
     * @param userId
     * @param goodsId
     */

    public void deleteGoods(Long userId,Long goodsId){
        cartInfoMapper.deleteGoods(userId,goodsId);
    }

    /**
     *
     * @param userId
     */
    public void empty(Long userId){
        cartInfoMapper.deleteByUserId(userId);
    }



    /**
     *
     *翻页查询购物车列表
     */
    public PageInfo<CartInfo> findPageDetails(Integer pageNum, Integer pageSize, HttpServletRequest request){
        UserInfo user=(UserInfo) request.getSession().getAttribute(Common.USER_INFO);
        if (user == null){
            throw new CustomException("1001","session已失效请重新登录");
        }
        Integer level=user.getLevel();
        PageHelper.startPage(pageNum,pageSize);
        List<CartInfo> list;
        if (level == 1){
            list=cartInfoMapper.findAll();
        }else {
            list=cartInfoMapper.findCartByUserId(user.getId());
        }
        return PageInfo.of(list);
    }


    /**
     * 根据id删除购物车
     * @param id
     * @return
     */
    public void delete(Long id) {
        cartInfoMapper.deleteByPrimaryKey(id);
    }
}

CartInfoController


package com.javaclimb.xshopping.controller;

import com.github.pagehelper.PageInfo;
import com.javaclimb.xshopping.common.Result;
import com.javaclimb.xshopping.entity.CartInfo;
import com.javaclimb.xshopping.entity.GoodsInfo;
import com.javaclimb.xshopping.service.CartInfoSevice;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 购物车控制
 */
@RestController
@RequestMapping(value = "/cartInfo")
public class CartInfoController {


    @Resource
    CartInfoSevice cartInfoSevice;

    /**
     * 添加购物车
     */
    @PostMapping
    public Result<CartInfo> add(@RequestBody CartInfo cartInfo){
        return Result.success(cartInfoSevice.add(cartInfo));
    }

    /**
     * 查询某用户购物车(不分页)
     */
    @GetMapping
    public Result<List<GoodsInfo>> findAll(@RequestParam Long userId){
        return Result.success(cartInfoSevice.findAll(userId));
    }

    /**
     *
     * @param userId
     * @param goodsId
     * @return
     */

    @DeleteMapping("/goods/{userId}/{goodsId}")
    public Result deleteGoods(@PathVariable Long userId,@PathVariable Long goodsId){
        cartInfoSevice.deleteGoods(userId,goodsId);
        return Result.success();
    }

    /**
     * 查询购物车  分页
     * required = false 不是必须传值
     */
    @GetMapping("/page")
    public Result<PageInfo<CartInfo>> findPage(@RequestParam(required = false,defaultValue = "1") Integer pageNum,
                                                @RequestParam(required = false,defaultValue = "10") Integer pageSize,
                                                HttpServletRequest request){
        return Result.success(cartInfoSevice.findPageDetails(pageNum,pageSize,request));
    }

    /**
     * 根据id删除购物车
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Long id){
        cartInfoSevice.delete(id);
        return Result.success();
    }

}

购物车添加 订单关系 下单等


Loading...