電商秒殺專案 交易模組

2021-09-21 17:42:26 字數 3484 閱讀 3286

首先建立交易模型,然後根據模型建立表,生成實體。然後建立service,寫建立訂單的方法。

建立訂單

1校驗下單狀態 商品存在?使用者合法?購買數量正確?

@override

public itemmodel getitembyid(integer id)

itemmodel itemmodel = convertitemmodelfromitemdo(itemdo,itemstockdo);

return itemmodel;

}

@override

public usermodel getuserbyid(integer id)

return converfrondataobject(userdo,userpassworddo);

}

update item_stock

set stock = stock - #

where item_id = # and stock >= #

int decreasestock(@param("itemid") integer itemid,@param("amount") integer amount);
@override

public boolean decreasestock(integer itemid,integer amount) throws busines***ception else

}

3.生成交易流水號

自增序列:在資料庫中建一張表,包含name,currentvalue,step。step是步長。在使用時每次都根據name來取對應的currentvalue,並且取出來之後要更新currentvalue,使它加上它的乙個步長,這樣就可以保證每次的自增序列不會重複

根據name獲取tsequence:

select

from sequence_info

where name = # for update

生成流水號:

@transactional(propagation = propagation.requires_new)

public string generateoderno()

//最後2位為分庫分表位 暫時寫死

return stringbuilder.tostring();

}

private orderinfodo convertdofrommodel(ordermodel ordermodel)

orderinfodo orderinfodo = new orderinfodo();

orderinfodo.setid(ordermodel.getid());

orderinfodo.setamount(ordermodel.getamount());

orderinfodo.setitemid(ordermodel.getitemid());

orderinfodo.setitemprice(ordermodel.getitemprice().doublevalue());

orderinfodo.setorderprice(ordermodel.getorderprice().doublevalue());

orderinfodo.setuserid(ordermodel.getuserid());

return orderinfodo;

}

4訂單入庫

5加上商品銷量

在xml中增加乙個方法然後在itemservice中呼叫

update item

set sales = sales + #,

where id = #

@override

@transactional

public void increasesales(integer itemid, integer amount)

6返回前端

@override

@transactional

public ordermodel createorder(integer userid, integer itemid, integer amount) throws busines***ception

if (itemmodel.getstock()99)

//落單減庫存(下單就鎖庫存),支付減庫存(支付才去減庫存)這裡使用落單減庫存

boolean result = itemservice.decreasestock(itemid,amount);

if (!result)

//訂單入庫

ordermodel ordermodel = new ordermodel();

ordermodel.setuserid(userid);

ordermodel.setitemid(itemid);

ordermodel.setamount(amount);

ordermodel.setitemprice(itemmodel.getprice());

ordermodel.setorderprice(ordermodel.getitemprice().multiply(

new bigdecimal(amount)

));//生成交易流水號

ordermodel.setid(generateoderno());

orderinfodo orderinfodo = convertdofrommodel(ordermodel);

//加上商品銷量

itemservice.increasesales(itemid,amount);

//返回前端

return null;

}

封裝下單請求

在控制器接收請求,在封裝請求呼叫service

電商秒殺專案 秒殺模組

itemmodel中新增乙個 private promomodel promomodel 並建立get set方法。修改getitembyid方法 override public itemmodel getitembyid integer id itemmodel itemmodel convert...

電商秒殺優化

增加並行數量,就是增大對資料庫的訪問。而這三種優化快取效果排序 頁面快取 url快取 物件快取 jss,js這些內容的優化 首先在goodscontroller中找到商品列表goodlist,資料通過model來傳到good list.html頁面中去 那麼如何取出我們的頁面快取呢?通過下面這句 s...

電商專案模組記錄

spring整合redis集群 購物車dubbocartserviceimpl redis配置 單點登陸 public class jsonutils catch jsonprocessingexception e 將json轉化為物件 public static t toobject string...