BS1049-基于SpringSSM开发实现互联网电商平台及后台系统

2022-12-05 10:24:23 浏览数 (1)

基于SpringSSM的电商平台及后台系统,系统采用多层MVC软件架构,采用Java SpringMVC Mybatis Mysql框架实现互联网电商商品数据的爬虫采集,商品销售数据分析以及商品在线销售电商程序。系统爬虫端主要采用JSOUP HttpClient实时采集分析互联网电商平台网站数据,

通过数据过滤,去重,变换成规则化的数据写入mysql数据库。系统服务端主要针对系统内部注册用户提供商品上架,商品销售,用户注册登录,添加购物车,商品下单支付等功能。系统电商后台提供针对商品,用户,订单等不同数据的管理及可视化分析等等。

原文地址

一、程序设计

本次基于SpringSSM的电商平台及后台系统,主要内容涉及:

主要功能模块:电商网站前台,商品销售,商品管理,添加购物车,商品下单,我的订单,销售管理,数据分析,系统管理等等

主要包含技术:SpringSSM,java,Jsoup,HttpClient,Echarts,网络爬虫,mysql,html,javascript,echarts,vue.js

主要包含算法:数据分析计算等

二、效果实现

系统首页

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

我的订单

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

用户管理

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

订单支付

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

其他效果省略

核心代码

/**

代码语言:txt复制
 * 根据商品id查询商品信息
 * @param goodIds
 * @return
 */
@Override
public List<Goods> getGoods(Integer[] goodIds) {
    List<Goods> goodsList = settleMapper.getGoods(goodIds);
代码语言:txt复制
    return goodsList;
代码语言:txt复制
}
代码语言:txt复制
/**
代码语言:txt复制
 * 1.判断库存是否充足
 * 2.true:生成新订单  false:回滚
 * 3.插入订单和用户的收货地址
 * 4.删除购物车里的数据
 *
 * @param goodsInfos
 * @param defaultTakeDeliveryAddressId
 * @param userId
 * @return
 */
@Override
public Results confirmOrder(Map<Integer, Integer> goodsInfos, Integer defaultTakeDeliveryAddressId, Integer userId) {
代码语言:txt复制
    Results result = null;
代码语言:txt复制
    // 获取所有的商品id
代码语言:txt复制
    Set<Integer> goodIds = goodsInfos.keySet();
代码语言:txt复制
    // 将所有的商品id存入数组中
代码语言:txt复制
    Integer[] ids = goodIds.toArray(new Integer[goodIds.size()]);
代码语言:txt复制
    //通过商品id获取商品信息
代码语言:txt复制
    List<Goods> goodsList =settleMapper.getGoods(ids);
代码语言:txt复制
    // 确认订单后获取总价格
代码语言:txt复制
    BigDecimal totalPrice = BigDecimal.valueOf(0);
代码语言:txt复制
    // 返回数据
代码语言:txt复制
    Map<String,Object> resultData = new HashMap<>();
代码语言:txt复制
    // 判断库存,生成新订单
代码语言:txt复制
    for (Integer goodId : goodIds) {
代码语言:txt复制
        // 查看该商品的库存余量
代码语言:txt复制
        int stockNum = settleMapper.checkStock(goodId);
代码语言:txt复制
        // 查看用户购买该商品的数量
代码语言:txt复制
        Integer buyNum = goodsInfos.get(goodId);
代码语言:txt复制
        // 若供不应求,自动回滚
代码语言:txt复制
        if (buyNum > stockNum){
代码语言:txt复制
            result  = new Results(-1, "库存不足");
代码语言:txt复制
            return result;
代码语言:txt复制
        }else { // 若库存充足,减少相应商品的库存量,购买成功
代码语言:txt复制
            settleMapper.updateStockNum(stockNum - buyNum,goodId);
代码语言:txt复制
        }
代码语言:txt复制
    }
代码语言:txt复制
    // // 库存充足,生成支付成功订单
代码语言:txt复制
    String orderNo = newOrderNo();
代码语言:txt复制
    // 将新订单编号放入结果集中
代码语言:txt复制
    resultData.put("orderNo", orderNo);
代码语言:txt复制
    // 遍历该商品的所有相关信息,作为新订单数据存入数据库中
代码语言:txt复制
    for (Goods goods : goodsList) {
代码语言:txt复制
        Integer goodsId = goods.getGoodsId();
代码语言:txt复制
        BigDecimal price = goods.getPrice();
代码语言:txt复制
        String title = goods.getTitle();
代码语言:txt复制
        String smallPic = goods.getSmallPic();

// String pic = smallPic.substring(27);

代码语言:txt复制
        System.out.println("图片完整路径:"   smallPic);
代码语言:txt复制
        // 获取该商品的购买数量
代码语言:txt复制
        Integer buyCount = goodsInfos.get(goodsId);
代码语言:txt复制
        // 将上述信息插入到订单中
代码语言:txt复制
        QueryUser queryUser = new QueryUser(orderNo,price,buyCount,0,0,userId,new Date(),
代码语言:txt复制
                goodsId,smallPic,title);
代码语言:txt复制
        settleMapper.insertOrder(queryUser);
代码语言:txt复制
        // 计算该商品的总价格
代码语言:txt复制
        totalPrice = totalPrice.add(price.multiply(BigDecimal.valueOf(buyCount)));
代码语言:txt复制
    }
代码语言:txt复制
    // 插入订单的收货地址
代码语言:txt复制
    settleMapper.insertOrderAddress(orderNo, defaultTakeDeliveryAddressId);
代码语言:txt复制
    // 删除该用户购物车的数据
代码语言:txt复制
    settleMapper.deleteShoppingCart(userId);
代码语言:txt复制
    result  = new Results(1, "确认订单完成");
代码语言:txt复制
    resultData.put("totalPrice",totalPrice);
代码语言:txt复制
    result.setObject(resultData);
代码语言:txt复制
    return result;
代码语言:txt复制
}
代码语言:txt复制
/**
代码语言:txt复制
 * 点击取消支付按钮
 * @param orderNo
 * @return
 */
@Override
public Results cancelOrder(String orderNo) {
    try {
        settleMapper.cancelOrder(orderNo);
        return new Results(1,"取消订单");
    }catch (Exception e){
        e.printStackTrace();
    }
    return new Results(-1,"取消失败");
}
代码语言:txt复制
/**
代码语言:txt复制
 * 支付成功,修改订单状态
 * @param o_no
 */
@Override
public void successPay(Date nowDate,String o_no) {
    settleMapper.successPay(nowDate,o_no);
}
代码语言:txt复制
// 支付成功后,生成流水
代码语言:txt复制
@Override
代码语言:txt复制
public void insertCount(String out_trade_no,Date nowDate, String total_amount,String type) {
代码语言:txt复制
    settleMapper.insertCount(out_trade_no,total_amount,new Date(),type);
代码语言:txt复制
}
代码语言:txt复制
// 支付过程中查询支付状态
代码语言:txt复制
@Override
代码语言:txt复制
public Integer[] status(String orderNo) {
代码语言:txt复制
    Integer[] status = settleMapper.status(orderNo);
代码语言:txt复制
    return status;
代码语言:txt复制
}
代码语言:txt复制
// 支付遇到问题,将支付状态设为 未支付 状态
代码语言:txt复制
public Results problemStatus(String orderNo){
代码语言:txt复制
    Results results = new Results();
代码语言:txt复制
    try {
代码语言:txt复制
        settleMapper.problemStatus(orderNo);
代码语言:txt复制
        results.setCode(1);
代码语言:txt复制
        results.setMsg("success");
代码语言:txt复制
        return results;
代码语言:txt复制
    }catch (Exception e){
代码语言:txt复制
        e.printStackTrace();
代码语言:txt复制
        results.setCode(-1);
代码语言:txt复制
        results.setMsg("fail");
代码语言:txt复制
        return results;
代码语言:txt复制
    }
代码语言:txt复制
}
代码语言:txt复制
// 生成订单编号
代码语言:txt复制
public String newOrderNo() {
代码语言:txt复制
    Date date = new Date();
代码语言:txt复制
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
代码语言:txt复制
    String dateNo = sdf.format(date);
代码语言:txt复制
    return dateNo;
代码语言:txt复制
}

0 人点赞