文章目錄
- 鋒迷商城專案
- 1.通過Maven聚合工程搭建專案:
- 1. 創建一個Maven的父專案,然后修改它的pom.xml檔案,可以洗掉src等一些沒有用的目錄
- 2.在父專案下面創建多個module,包括(common,beans,mapper,service,api)把它們全部打包成jar包
- 3.由于mapper層需要呼叫beans層(pojo),需要在pom.xml檔案中,然后可以在mapper中加入相關的依賴,
- 4.創建service需要呼叫mapper,和common,需要在pom.xml檔案中加上
- 5.api層需要接收前端的請求所以需要我們創建一個SpringBoot工程,你可以創建一個Maven工程,然后加入相關的依賴
- 6.api子工程,對外提供介面
- 鋒迷商城資料庫設計
- 2.軟體開發步驟
- 3.資料庫設計流程
- 3.資料建模工具PDMan
- Spu和Sku的區別
- 4.鋒城業務流程設計
- 4.1用戶管理9業務流程分析
- 5介面介紹
- 5.1介面規范
- 5.2Swagger(自動生成服務器介面的規范性檔案)
- 5.2.1引入相關的依賴:
- 5.2.2 創建相關的配置類
- 5.2.3根據你的配置的埠號進行相關的測驗
- 5.2.4 swagger提供了一套注解對每個介面進行詳細的說明
- 5.2.5swagger-ui插件使用
- 1.api的module加入依賴
- 2.進行訪問,然后可以使用它進行相關的測驗
- 一、鋒迷商城設計及實作用戶管理
- 1.UserDao介面的創建:
- 2.UserMapper.xml
- 3.UserService
- 4.UserServiceimpl:
- 5.api模塊的UserController:
- 6.ResultVO一個和前端進行資料互動的類
- 7.在common模塊的MD5Utils類:
- 二、逆向工程
- 7.1逆向工程配置
- 7.2在pom.xml檔案中指定generatorConfig.xml檔案的路徑
- 三、跨域問題
- 四、前端頁面的傳值
- 4.1Cookie使用(自定義封裝一個js,cookie_utils.js)
- 4.2localStorage
- 4.3Vue實作登錄
- 五、前后端分離開發用戶認證的問題
- 5.1單體專案中:
- 5.2前后端分離專案中
- 基于token認證的用戶代碼實作
- 六、JWT(json Web Token)一個別人封裝好的工具類生成相關的token
- 6.1生成JWT
- 6.2使用攔截器進行攔截
- 6.3使用請求頭進行傳遞token
- axios通過請求頭傳值 里面的引數用Headers 不用Params
- 6.3.1 **CheckTokenInterceptor類** 前端會發送預險性請求(只有它通過以后才可以進行第二次請求),需要攔截器進行放行
- 七首頁的分類串列的的實作
- 7.1介面實作
- 7.2業務層實作
- 控制層實作
- 八、商品的推薦功能實作
- 8.1 流程分析
- 8.2介面開發
- 8.2.1資料庫的實作
- ProductMapper檔案:
- ProductImgMapper檔案:
- ProductMapper.xml檔案實作
- 8.2.2業務層實作
- 8.2.3控制層實作
- 九、商品詳情顯示(在Introduction.html進行相關的顯示)
- 9.1介面實作
- 9.1.1 商品詳情介面
- 十、顯示商品評價的資訊(通過用戶和商品評論表進行相關的連表查詢)
- 10.1 新建的VO,ProductCommentsVO (一對一的連表查詢可以不用在物體類中宣告另一個物體類)
- 十一、添加購物車的功能實作
- 10.1流程分析:
- 10.2資料庫的相關的操作
- 10.2.1 購買的數量的前端實作在vue的methods中添加+和-的點擊事件
- 10.2.2給加入購物車這個按鈕添加點擊事件
- 十二、添加購物車時候用戶未登錄
- 12.1 添加購物車用戶未登錄,業務處理方式:
- 12.2我們使用第三種難度最大的來
- 12.3使用Layui進行添加購物車成功/失敗的提示
- 12.3.1宣告layui的彈窗組件
- 12.3.2成功失敗進行提示
- 十三購物車的串列
- 13.1資料庫dao介面的實作
- 13.2pojo介面實作
- 13.3修改購物車
- 13.31通過這個進行購物車數量的修改:
- 13.32changNum函式進行實作:
- 十四購物車提交訂單結算功能實作
- 14.1實作流程分析
- 十五、訂單提交及支付流程
- 15.1流程分析
- 15.2訂單添加介面實作
- 15.3資料庫操作
- 15.4serviceimpl層實作 注意:這個方法需要加上@Transactional,也就是訂單生成的時候,快照也必須生成
- swagger報錯解決
- 十六 商品分類資訊的查詢
- 16.1 流程分析
- 16.2 介面開發
- 16.2.1根據類別查詢商品介面
鋒迷商城專案
使用Maven聚合專案進行創建(一個maven的父專案多個maven的子專案),
可以在父專案pom.xml檔案中加上:
<package>pom<package>
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-NA1kXE9E-1633446686620)(C:\Users\CourageAndLove\AppData\Roaming\Typora\typora-user-images\image-20210812151308862.pngred">注意一下 :訂單表的設計功能:因為訂單表只要用戶一下訂單,訂單表的相關資訊就不可以進行改變 ,所以需要進行地址的的快照 ,和商品資訊的快照,這樣就算你臨時改變了價格的資訊或者其他的也沒有關系
購物車的設計:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xztkvKoC-1633446686626)(C:\Users\CourageAndLove\AppData\Roaming\Typora\typora-user-images\image-20210814213038578.pngred">(一對一的連表查詢可以不用在物體類中宣告另一個物體類)
package com.qfedu.fmmall.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.Table;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProductCommentsVO {
private Integer productId;
private String productName;
private Integer orderItemId;
private String isannonymouns;
private Integer commType;
private Integer commLevel;
private String commImgs;
private String sepcName;
private Integer replyStatus;
private String replyContent;
private Date replyTime;
private Integer isShow;
//用于封裝評論對應的用戶資料
private Integer userId;
private String username;
private String nickname;
private String userImg;
}
在Mapper定義相應的介面:
package com.qfedu.fmmall.dao;
import com.qfedu.fmmall.entity.ProductComments;
import com.qfedu.fmmall.entity.ProductCommentsVO;
import com.qfedu.fmmall.general.GeneralDao;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface ProductCommentsMapper extends GeneralDao<ProductComments> {
public List<ProductCommentsVO> selectCommentsByProductId(int productId);
}
十一、添加購物車的功能實作
10.1流程分析:
點擊添加購物車---------商品、選擇套餐id,套餐屬性,數量,token-------------進行token的校驗
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-m6DHVLUt-1633446686639)(C:\Users\CourageAndLove\AppData\Roaming\Typora\typora-user-images\image-20210917194652463.pngred"> 注意一下資料庫的shopping_cart表不需要加上這兩個欄位,是通過product_img表和product表的column屬性來進行關聯的
13.3修改購物車
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-a4sYcBBB-1633446686644)(C:\Users\CourageAndLove\AppData\Roaming\Typora\typora-user-images\image-20210924171559447.pngred"> 獲取生成商品快照的資料 只需在ShoppingCartVO中多加上一個stock欄位就好,然后在ShoppCartMapper.xml加上需要查詢的這個欄位
15.4serviceimpl層實作 注意:這個方法需要加上@Transactional,也就是訂單生成的時候,快照也必須生成
- 生成OrderId的方法 UUID.random().toString()
- 通過時間戳生成System.currentTimeMillis()+(new Random().nextInt(9999)+100)+""
package com.qfedu.fmmall.service.impl;
import com.qfedu.fmmall.dao.OrdersItemMapper;
import com.qfedu.fmmall.dao.OrdersMapper;
import com.qfedu.fmmall.dao.ProductSkuMapper;
import com.qfedu.fmmall.dao.ShoppingCartMapper;
import com.qfedu.fmmall.entity.Orders;
import com.qfedu.fmmall.entity.OrdersItem;
import com.qfedu.fmmall.entity.ProductSku;
import com.qfedu.fmmall.entity.ShoppingCartVO;
import com.qfedu.fmmall.service.OrderService;
import com.qfedu.fmmall.vo.ResultStatus;
import com.qfedu.fmmall.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.SQLException;
import java.util.*;
import static java.math.BigDecimal.*;
@Service
public class OrderServiceimpl implements OrderService{
@Autowired
private ShoppingCartMapper shoppingCartMapper;
@Autowired
private OrdersMapper ordersMapper;
@Autowired
private OrdersItemMapper ordersItemMapper;
@Autowired
private ProductSkuMapper productSkuMapper;
/* userId 1(zhangsan) 3(houzhicong)
*cids "39,40,41"
* @return
*
* */
// int userId, String receiverName,
// String receiverMobile,String address,
// double price,int payType,String orderRemark 把這些用Orders物件來接收
// 保存訂單的步驟
// 1.查詢選中購買的購物車詳情
// 2. 校驗庫存
// 3.保存訂單
// 4.保存訂單快照
// 5.購買成功需要洗掉購物車記錄
// 可以知道這四個步驟需要同時成功或者同時失敗,符合一個事務的操作(ACID)
@Transactional
public Map<String,String> addOrder(List<Integer> cids, Orders orders) throws SQLException{
Map<String,String> map=new HashMap<>();
// 根據cids查詢購物車的詳情記錄(包括庫存)
List<ShoppingCartVO> shoppingCartVOList = shoppingCartMapper.selectShoppingcartByids(cids);
// 校驗庫存
boolean f=true;
String untitled="";
for (ShoppingCartVO sc :shoppingCartVOList
) {
if(Integer.valueOf(sc.getCartNum())>sc.getStock()){
f=false;
}
// 獲取所有的商品名稱,以,分割拼接成字串
untitled=untitled+sc.getProductName()+",";
}
if(f){
// 表示庫存充足進行保存
// 1.userId 2 untitled名稱 3 收件人地址,姓名,電話,地址
// 4. 總價格 5.支付方式
// 6.創建 訂單的時間
// 7.訂單初始狀態 1 待支付
orders.setStatus(1);
orders.setUntitled(untitled);
orders.setCreateTime(new Date());
orders.setCancelTime(new Date());
orders.setDeliveryTime(new Date());
// 生成訂單編號
String orderId = UUID.randomUUID().toString().replace("-", "");
orders.setOrderId(orderId);
// 保存訂單
int i=ordersMapper.insert(orders);
if(i>0){
// ordersItem 生成商品快照
// List<OrdersItem> ordersItemList=new ArrayList<>();
for (ShoppingCartVO sc :shoppingCartVOList) {
// 生成訂單的編號
int cnum=Integer.valueOf(sc.getCartNum());
String itemid=System.currentTimeMillis()+(new Random().nextInt(9999)+100)+"";
String itemid1 = itemid.substring(1, 10);
// 注意一下double需要轉換為Bigdecimal型別
// public OrdersItem(Integer orderId, Integer productId,
// String productName,
// String productImg, Integer skuId, String skuName,
// BigDecimal productPrice, Integer buyCounts,
// BigDecimal totalAmount, Date basketDate, Date buyTime,
// Integer isComment)
int itemid2=Integer.parseInt(itemid1);
OrdersItem ordersItem= new OrdersItem();
ordersItem.setOrderId(itemid2);
ordersItem.setProductId(Integer.valueOf(sc.getProductId()));
ordersItem.setProductName(sc.getProductName());
ordersItem.setProductImg(sc.getProductImg());
ordersItem.setSkuId(Integer.valueOf(sc.getSkuId()));
System.out.println(sc.getSkuName());
ordersItem.setSkuName(sc.getSkuName());
System.out.println(sc.getSellPrice());
ordersItem.setProductPrice(new BigDecimal(String.valueOf(sc.getProductPrice())));
ordersItem.setBuyCounts(cnum);
ordersItem.setTotalAmount(sc.getProductPrice());
ordersItem.setBasketDate(new Date());
ordersItem.setBuyTime(new Date());
ordersItem.setIsComment(0);
// ordersItemList.add(ordersItem);
int m=ordersItemMapper.insert(ordersItem);
}
// int j = ordersItemMapper.insertList(ordersItemList);
// 扣減庫存???
// 根據套餐Id修改庫存量
for (ShoppingCartVO sc :shoppingCartVOList
) {
String skuId = sc.getSkuId();
int newStock=sc.getStock()-Integer.valueOf(sc.getCartNum());
// Example example = new Example(ProductSku.class);
// Example.Criteria criteria = example.createCriteria();
// criteria.andEqualTo("skuId",skuId);
// ProductSku productSku = productSkuMapper.selectByPrimaryKey(skuId);
ProductSku productSku=new ProductSku();
productSku.setSkuId(skuId);
productSku.setStock(String.valueOf(newStock));
// productSku.setSkuImg(null);
productSkuMapper.updateByPrimaryKeySelective(productSku);
}
// 保存訂單成功 洗掉購物車記錄
for (Integer cid:cids
) {
shoppingCartMapper.deleteByPrimaryKey(cid);
}
map.put("orderId",orderId);
map.put("productNames",untitled);
return map;
}
}else{
// 不足
return null;
}
return null;
}
}
swagger報錯解決
For input String :""
在application.yml加上日志的配置:
logging:
level:
io.swagger.models.parameters.AbstractSerializableParameter: error
十六 商品分類資訊的查詢
16.1 流程分析
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-cKOFAXHr-1633446686646)(C:\Users\CourageAndLove\AppData\Roaming\Typora\typora-user-images\image-20210929154617257.png)]
16.2 介面開發
16.2.1根據類別查詢商品介面
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/305764.html
標籤:其他
上一篇:能源系統建模:利用gcam_reader批量匯出GCAM database資料
下一篇:MySQL45講之主備資料一致性
