@@ -94,58 +94,102 @@ public class CartService {
String tableId = jsonObject . getString ( " tableId " ) ;
String shopId = jsonObject . getString ( " shopId " ) ;
String productId = jsonObject . getString ( " productId " ) ;
String key = tableId + " - " + shopId ;
TbProduct tbProduct = productMapper . selectById ( Integer . valueOf ( productId ) ) ;
if ( tbProduct = = null ) {
JSONObject jsonObject1 = new JSONObject ( ) ;
jsonObject1 . put ( " status " , " fail " ) ;
jsonObject1 . put ( " msg " , " 该商品不存在 " ) ;
jsonObject1 . put ( " data " , new ArrayList < > ( ) ) ;
PushToAppChannelHandlerAdapter . getInstance ( ) . AppSendInfo ( jsonObject1 . toString ( ) , key , jsonObject . getString ( " userId " ) , true ) ;
log . error ( " 该商品不存在 productId:{} " , productId ) ;
throw new MsgException ( " 该商品不存在 " ) ;
}
String skuId = jsonObject . getString ( " skuId " ) ;
JSONArray jsonArray = new JSONArray ( ) ;
BigDecimal amount = BigDecimal . ZERO ;
boolean exist = redisUtil . exists ( RedisCst . PRODUCT + shopId + " : " + jsonObject . getString ( " skuId" ) ) ;
if ( ! exist ) {
TbProductSkuWithBLOBs tbProductSkuWithBLOBs = productSkuMapper . selectByPrimaryKey ( Integer . valueOf ( jsonObject . getString ( " skuId " ) ) ) ;
Double stock = tbProductSkuWithBLOBs . getStockNumber ( ) ;
redisUtil . saveMessage ( RedisCst . PRODUCT + shopId + " : " + json Object. getString ( " skuId " ) , Math . round ( stock ) + " " ) ;
TbProductSkuWithBLOBs tbProductSkuWithBLOBs = productSkuMapper . selectByPrimaryKey ( Integer . valueOf ( skuId) ) ;
if ( Integer . valueOf ( tbProduct . getIsPauseSale ( ) ) . equals ( 1 ) ) {
JSONObject jsonObject1 = new JSON Object( ) ;
jsonObject1 . put ( " status " , " fail " ) ;
jsonObject1 . put ( " msg " , " 该商品已售罄 " ) ;
jsonObject1 . put ( " data " , new ArrayList < > ( ) ) ;
PushToAppChannelHandlerAdapter . getInstance ( ) . AppSendInfo ( jsonObject1 . toString ( ) , key , jsonObject . getString ( " userId " ) , true ) ;
log . error ( " 该商品已售罄 productId:{} " , productId ) ;
throw new MsgException ( " 该商品已售罄 " ) ;
}
String skuNum = redisUtil . getMessage ( RedisCst . PRODUCT + shopId + " : " + jsonObject . getString ( " skuId " ) ) ;
TbProduct tbProduct = productMapper . selectById ( Integer . valueOf ( productId ) ) ;
String skuNum ;
// 1:共享库存 0:独立库存
if ( Integer . valueOf ( tbProduct . getIsDistribute ( ) ) . equals ( 1 ) ) {
boolean exist = redisUtil . exists ( RedisCst . PRODUCT + shopId + " :product " + productId ) ;
if ( ! exist ) {
redisUtil . saveMessage ( RedisCst . PRODUCT + shopId + " :product " + productId , tbProduct . getStockNumber ( ) + " " ) ;
}
skuNum = redisUtil . getMessage ( RedisCst . PRODUCT + shopId + " :product " + productId ) ;
} else {
boolean exist = redisUtil . exists ( RedisCst . PRODUCT + shopId + " : " + skuId ) ;
if ( ! exist ) {
Double stock = tbProductSkuWithBLOBs . getStockNumber ( ) ;
redisUtil . saveMessage ( RedisCst . PRODUCT + shopId + " : " + skuId , Math . round ( stock ) + " " ) ;
}
skuNum = redisUtil . getMessage ( RedisCst . PRODUCT + shopId + " : " + skuId ) ;
}
Integer buyNum = jsonObject . getInteger ( " num " ) ;
if ( tbProduct . getIsStock ( ) = = 1 ) {
if ( Integer . valueOf ( skuNum ) < 1 & & jsonObject . getInteger ( " num " ) > 0 ) {
boolean flag = false ;
String id = skuId ;
if ( Integer . valueOf ( tbProduct . getIsDistribute ( ) ) . equals ( 1 ) ) {
if ( tbProduct . getStockNumber ( ) < 1 & & buyNum > 0 ) {
flag = true ;
id = productId ;
}
} else {
if ( tbProductSkuWithBLOBs . getIsPauseSale ( ) . equals ( 1 ) ) {
flag = true ;
} else if ( Integer . valueOf ( skuNum ) < 1 & & buyNum > 0 ) {
flag = true ;
}
}
if ( flag ) {
JSONObject jsonObject1 = new JSONObject ( ) ;
jsonObject1 . put ( " status " , " fail " ) ;
jsonObject1 . put ( " msg " , " 该商品库存已售罄 " ) ;
jsonObject1 . put ( " data " , new ArrayList < > ( ) ) ;
PushToAppChannelHandlerAdapter . getInstance ( ) . AppSendInfo ( jsonObject1 . toString ( ) , key , jsonObject . getString ( " userId " ) , true ) ;
log . error ( " 该商品库存已售罄 skuId:{} " , jsonObject . getString ( " skuId " ) ) ;
log . error ( " 该商品库存已售罄 skuId:{} " , id ) ;
throw new MsgException ( " 该商品库存已售罄 " ) ;
}
}
if ( redisUtil . exists ( RedisCst . TABLE_CART . concat ( jsonObject . getString ( " tableId " ) . concat ( " - " ) . concat ( shopId ) ) ) ) {
JSONArray array = JSON . parseArray ( redisUtil . getMessage ( RedisCst . TABLE_CART . concat ( jsonObject . getString ( " tableId " ) . concat ( " - " ) . concat ( shopId ) ) ) ) ;
if ( Objects . isNull ( array ) | | array . isEmpty ( ) | | array . size ( ) < 1 ) {
if ( jsonObject . getInteger ( " num " ) > 0 ) {
TbCashierCart cashierCart = addCart ( jsonObject . getString ( " productId " ) , jsonObject . getString ( " skuId " ) ,
jsonObject . getInteger ( " userId " ) , jsonObject . getInteger ( " num " ) , tableId , jsonObject . getString ( " shopId " ) ) ;
if ( Objects . isNull ( array ) | | array . isEmpty ( ) ) {
if ( buyNum > 0 ) {
TbCashierCart cashierCart = addCart ( jsonObject . getString ( " productId " ) , skuId ,
jsonObject . getInteger ( " userId " ) , buyNum , tableId , shopId ) ;
jsonArray . add ( cashierCart ) ;
amount = amount . add ( new BigDecimal ( cashierCart . getNumber ( ) ) . multiply ( cashierCart . getSalePrice ( ) . add ( cashierCart . getPackFee ( ) ) ) ) ;
if ( jsonObject . getInteger ( " num " ) > 0 ) {
redisUtil . getIncrNum ( RedisCst . PRODUCT + shopId + " : " + jsonObject . getString ( " skuId " ) , " 1 " ) ;
} else {
redisUtil . getIncrNum ( RedisCst . PRODUCT + shopId + " : " + jsonObject . getString ( " skuId " ) , " 2 " ) ;
}
productSkuMapper . updateStockById ( jsonObject . getString ( " skuId " ) , jsonObject . getInteger ( " num " ) ) ;
updateProductStock ( tbProduct , tbProductSkuWithBLOBs , buyNum ) ;
}
} else {
boolean flag = true ;
for ( int i = 0 ; i < array . size ( ) ; i + + ) {
JSONObject object = array . getJSONObject ( i ) ;
TbCashierCart cashierCart = JSONUtil . parseJSONStr2T ( object . toJSONString ( ) , TbCashierCart . class ) ;
if ( cashierCart . getSkuId ( ) . equals ( jsonObject . getString ( " skuId " ) ) ) {
cashierCart . setTotalNumber ( cashierCart . getTotalNumber ( ) + jsonObject . getInteger ( " num " ) ) ;
cashierCart . setNumber ( cashierCart . getNumber ( ) + jsonObject . getInteger ( " num " ) ) ;
if ( jsonObject . getInteger ( " num " ) > 0 ) {
redisUtil . getIncrNum ( RedisCst . PRODUCT + shopId + " : " + jsonObject . getString ( " skuId " ) , " 1 " ) ;
} else {
redisUtil . getIncrNum ( RedisCst . PRODUCT + shopId + " : " + jsonObject . getString ( " skuId " ) , " 2 " ) ;
}
productSkuMapper . updateStockById ( jsonObject . getString ( " skuId " ) , jsonObject . getInteger ( " num " ) ) ;
if ( cashierCart . getSkuId ( ) . equals ( skuId ) ) {
cashierCart . setTotalNumber ( cashierCart . getTotalNumber ( ) + buyNum ) ;
cashierCart . setNumber ( cashierCart . getNumber ( ) + buyNum ) ;
updateProductStock ( tbProduct , tbProductSkuWithBLOBs , buyNum ) ;
if ( cashierCart . getNumber ( ) > 0 ) {
cashierCart . setTotalAmount ( new BigDecimal ( cashierCart . getTotalNumber ( ) ) . multiply ( cashierCart . getSalePrice ( ) . add ( cashierCart . getPackFee ( ) ) ) ) ;
cashierCart . setUpdatedAt ( Instant . now ( ) . toEpochMilli ( ) ) ;
@@ -159,27 +203,21 @@ public class CartService {
jsonArray . add ( cashierCart ) ;
amount = amount . add ( new BigDecimal ( cashierCart . getTotalNumber ( ) ) . multiply ( cashierCart . getSalePrice ( ) . add ( cashierCart . getPackFee ( ) ) ) ) ;
}
if ( flag & & jsonObject . getInteger ( " num " ) > 0 ) {
TbCashierCart cashierCart = addCart ( jsonObject . getString ( " productId " ) , jsonObject . getString ( " skuId " ) ,
jsonObject . getInteger ( " userId " ) , jsonObject . getInteger ( " num " ) , tableId , jsonObject . getString ( " shopId " ) ) ;
if ( flag & & buyNum > 0 ) {
TbCashierCart cashierCart = addCart ( jsonObject . getString ( " productId " ) , skuId ,
jsonObject . getInteger ( " userId " ) , buyNum , tableId , jsonObject . getString ( " shopId " ) ) ;
jsonArray . add ( cashierCart ) ;
amount = amount . add ( new BigDecimal ( cashierCart . getTotalNumber ( ) ) . multiply ( cashierCart . getSalePrice ( ) . add ( cashierCart . getPackFee ( ) ) ) ) ;
if ( jsonObject . getInteger ( " num " ) > 0 ) {
redisUtil . getIncrNum ( RedisCst . PRODUCT + shopId + " : " + jsonObject . getString ( " skuId " ) , " 1 " ) ;
} else {
redisUtil . getIncrNum ( RedisCst . PRODUCT + shopId + " : " + jsonObject . getString ( " skuId " ) , " 2 " ) ;
}
productSkuMapper . updateStockById ( jsonObject . getString ( " skuId " ) , jsonObject . getInteger ( " num " ) ) ;
updateProductStock ( tbProduct , tbProductSkuWithBLOBs , buyNum ) ;
}
}
} else {
if ( jsonObject . getInteger ( " num " ) > 0 ) {
TbCashierCart cashierCart = addCart ( jsonObject . getString ( " productId " ) , jsonObject . getString ( " skuId " ) ,
jsonObject . getInteger ( " userId " ) , jsonObject . getInteger ( " num " ) , tableId , jsonObject . getString ( " shopId " ) ) ;
if ( buyNum > 0 ) {
TbCashierCart cashierCart = addCart ( jsonObject . getString ( " productId " ) , skuId ,
jsonObject . getInteger ( " userId " ) , buyNum , tableId , jsonObject . getString ( " shopId " ) ) ;
jsonArray . add ( cashierCart ) ;
amount = amount . add ( new BigDecimal ( cashierCart . getTotalNumber ( ) ) . multiply ( cashierCart . getSalePrice ( ) . add ( cashierCart . getPackFee ( ) ) ) ) ;
redisUtil . getIncrNum ( RedisCst . PRODUCT + shopId + " : " + jsonObject . getString ( " skuId " ) , " 1 " ) ;
productSkuMapper . updateStockById ( jsonObject . getString ( " skuId " ) , jsonObject . getInteger ( " num " ) ) ;
updateProductStock ( tbProduct , tbProductSkuWithBLOBs , buyNum ) ;
}
}
redisUtil . saveMessage ( RedisCst . TABLE_CART . concat ( tableId ) . concat ( " - " ) . concat ( shopId ) , jsonArray . toJSONString ( ) ) ;
@@ -195,6 +233,22 @@ public class CartService {
}
}
private void updateProductStock ( TbProduct product , TbProductSkuWithBLOBs productSku , Integer num ) {
String key = RedisCst . PRODUCT + product . getShopId ( ) + " :product " + product . getId ( ) ;
if ( product . getIsDistribute ( ) = = 1 ) {
productMapper . updateStockById ( product . getId ( ) . toString ( ) , num ) ;
} else {
key = RedisCst . PRODUCT + product . getShopId ( ) + " : " + productSku . getId ( ) ;
productSkuMapper . updateStockById ( productSku . getId ( ) . toString ( ) , num ) ;
}
if ( num > 0 ) {
redisUtil . getIncrNum ( key , " 1 " ) ;
} else {
redisUtil . getIncrNum ( key , " 2 " ) ;
}
}
private TbCashierCart addCart ( String productId , String skuId , Integer userId , Integer num , String tableId , String shopId ) throws Exception {
try {
TbProduct product = productMapper . selectById ( Integer . valueOf ( productId ) ) ;
@@ -205,7 +259,7 @@ public class CartService {
jsonObject1 . put ( " msg " , " 该商品不存在 " ) ;
jsonObject1 . put ( " data " , new ArrayList < > ( ) ) ;
PushToAppChannelHandlerAdapter . getInstance ( ) . AppSendInfo ( jsonObject1 . toString ( ) , key , userId . toString ( ) , true ) ;
log . error ( " 购物车添加商品异常,该商品不存在:{} " , productId ) ;
log . error ( " 购物车添加商品异常,该商品不存在:{} " , productId ) ;
throw new MsgException ( " 该商品不存在 " ) ;
}
TbProductSkuWithBLOBs productSku = productSkuMapper . selectByPrimaryKey ( Integer . valueOf ( skuId ) ) ;
@@ -215,7 +269,7 @@ public class CartService {
jsonObject1 . put ( " msg " , " 该商品规格不存在 " ) ;
jsonObject1 . put ( " data " , new ArrayList < > ( ) ) ;
PushToAppChannelHandlerAdapter . getInstance ( ) . AppSendInfo ( jsonObject1 . toString ( ) , key , userId . toString ( ) , true ) ;
log . error ( " 购物车添加商品异常, 该商品sku不存在: {} " , productId ) ;
log . error ( " 购物车添加商品异常, 该商品sku不存在: {} " , productId ) ;
throw new MsgException ( " 该商品规格不存在 " ) ;
}
TbCashierCart cashierCart = new TbCashierCart ( ) ;
@@ -429,24 +483,24 @@ public class CartService {
orderInfo . setIsUseCoupon ( isuseYhq ) ;
orderInfo . setUserCouponAmount ( couponAmount ) ;
JSONObject object = new JSONObject ( ) ;
String outNumber = redisUtil . getMessage ( RedisCst . OUT_NUMBER . concat ( jsonObject . getString ( " shopId " ) ) ) ;
Integer number = 1 ;
if ( Objects . isNull ( outNumber ) ) {
object . put ( " outNumber " , number ) ;
object . put ( " times " , DateUtils . getDay ( ) ) ;
} else {
object = JSONObject . parseObject ( outNumber ) ;
if ( object . getString ( " times " ) . equals ( DateUtils . getDay ( ) ) ) {
number = object . getInteger ( " outNumber " ) + 1 ;
object . put ( " outNumber " , number ) ;
} else {
object . put ( " outNumber " , number ) ;
object . put ( " times " , DateUtils . getDay ( ) ) ;
JSONObject object = new JSONObject ( ) ;
String outNumber = redisUtil . getMessage ( RedisCst . OUT_NUMBER . concat ( jsonObject . getString ( " shopId " ) ) ) ;
Integer number = 1 ;
if ( Objects . isNull ( outNumber ) ) {
object . put ( " outNumber " , number ) ;
object . put ( " times " , DateUtils . getDay ( ) ) ;
} else {
object = JSONObject . parseObject ( outNumber ) ;
if ( object . getString ( " times " ) . equals ( DateUtils . getDay ( ) ) ) {
number = object . getInteger ( " outNumber " ) + 1 ;
object . put ( " outNumber " , number ) ;
} else {
object . put ( " outNumber " , number ) ;
object . put ( " times " , DateUtils . getDay ( ) ) ;
}
}
orderInfo . setOutNumber ( number + " " ) ;
redisUtil . saveMessage ( RedisCst . OUT_NUMBER . concat ( jsonObject . getString ( " shopId " ) ) , object . toString ( ) ) ;
orderInfo . setOutNumber ( number + " " ) ;
redisUtil . saveMessage ( RedisCst . OUT_NUMBER . concat ( jsonObject . getString ( " shopId " ) ) , object . toString ( ) ) ;
orderInfoMapper . insert ( orderInfo ) ;
orderId = orderInfo . getId ( ) ;
}
@@ -534,7 +588,7 @@ public class CartService {
if ( Objects . isNull ( array ) | | array . isEmpty ( ) | | array . size ( ) < 1 ) {
for ( int i = 0 ; i < array . size ( ) ; i + + ) {
TbCashierCart cashierCart = JSONUtil . parseJSONStr2T ( array . get ( i ) . toString ( ) , TbCashierCart . class ) ;
redisUtil . secAdd ( RedisCst . PRODUCT + shopId + " : " + jsonObject . getString ( " skuId " ) , cashierCart . getNumber ( ) . toString ( ) ) ;
redisUtil . secAdd ( RedisCst . PRODUCT + shopId + " : " + jsonObject . getString ( " skuId " ) , cashierCart . getNumber ( ) . toString ( ) ) ;
productSkuMapper . updateAddStockById ( jsonObject . getString ( " skuId " ) , cashierCart . getNumber ( ) ) ;
}
@@ -737,24 +791,24 @@ public class CartService {
orderInfo . setIsUseCoupon ( isuseYhq ) ;
orderInfo . setUserCouponAmount ( couponAmount ) ;
JSONObject object = new JSONObject ( ) ;
String outNumber = redisUtil . getMessage ( RedisCst . OUT_NUMBER . concat ( jsonObject . getString ( " shopId " ) ) ) ;
Integer number = 1 ;
if ( Objects . isNull ( outNumber ) ) {
object . put ( " outNumber " , number ) ;
object . put ( " times " , DateUtils . getDay ( ) ) ;
} else {
object = JSONObject . parseObject ( outNumber ) ;
if ( object . getString ( " times " ) . equals ( DateUtils . getDay ( ) ) ) {
number = object . getInteger ( " outNumber " ) + 1 ;
object . put ( " outNumber " , number ) ;
} else {
object . put ( " outNumber " , number ) ;
object . put ( " times " , DateUtils . getDay ( ) ) ;
JSONObject object = new JSONObject ( ) ;
String outNumber = redisUtil . getMessage ( RedisCst . OUT_NUMBER . concat ( jsonObject . getString ( " shopId " ) ) ) ;
Integer number = 1 ;
if ( Objects . isNull ( outNumber ) ) {
object . put ( " outNumber " , number ) ;
object . put ( " times " , DateUtils . getDay ( ) ) ;
} else {
object = JSONObject . parseObject ( outNumber ) ;
if ( object . getString ( " times " ) . equals ( DateUtils . getDay ( ) ) ) {
number = object . getInteger ( " outNumber " ) + 1 ;
object . put ( " outNumber " , number ) ;
} else {
object . put ( " outNumber " , number ) ;
object . put ( " times " , DateUtils . getDay ( ) ) ;
}
}
orderInfo . setOutNumber ( number + " " ) ;
redisUtil . saveMessage ( RedisCst . OUT_NUMBER . concat ( jsonObject . getString ( " shopId " ) ) , object . toString ( ) ) ;
orderInfo . setOutNumber ( number + " " ) ;
redisUtil . saveMessage ( RedisCst . OUT_NUMBER . concat ( jsonObject . getString ( " shopId " ) ) , object . toString ( ) ) ;
orderInfoMapper . insert ( orderInfo ) ;