基于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复制}


