From c24434b1210a59447220a543ae3dff71223665ac Mon Sep 17 00:00:00 2001
From: GYJ <1157756119@qq.com>
Date: Mon, 24 Jun 2024 15:12:39 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E8=B4=AD=E7=89=A9=E8=BD=A6?=
=?UTF-8?q?=E6=89=A3=E9=99=A4=E5=BA=93=E5=AD=98=E9=80=BB=E8=BE=91=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cashierservice/dao/TbProductMapper.java | 4 +-
.../cashierservice/service/CartService.java | 208 +++++++++++-------
src/main/resources/mapper/TbProductMapper.xml | 6 +
3 files changed, 140 insertions(+), 78 deletions(-)
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductMapper.java b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductMapper.java
index 9208a08..01810c6 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductMapper.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductMapper.java
@@ -34,4 +34,6 @@ public interface TbProductMapper {
void upGroupRealSalesNumber(@Param("id") String id,@Param("number") Integer number);
-}
\ No newline at end of file
+
+ void updateStockById(@Param("productId") String productId, @Param("num") Integer num);
+}
diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java
index a0d1540..f7dd587 100644
--- a/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java
+++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java
@@ -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 + ":" + jsonObject.getString("skuId"), Math.round(stock) + "");
+ TbProductSkuWithBLOBs tbProductSkuWithBLOBs = productSkuMapper.selectByPrimaryKey(Integer.valueOf(skuId));
+
+
+ if (Integer.valueOf(tbProduct.getIsPauseSale()).equals(1)) {
+ 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 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, jsonObject.getString("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) {
+ productSkuMapper.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);
diff --git a/src/main/resources/mapper/TbProductMapper.xml b/src/main/resources/mapper/TbProductMapper.xml
index 1b05eac..4ce44fe 100644
--- a/src/main/resources/mapper/TbProductMapper.xml
+++ b/src/main/resources/mapper/TbProductMapper.xml
@@ -913,6 +913,12 @@
where id = #{id,jdbcType=INTEGER}
+
+ update tb_product
+ set stock_number = stock_number - #{number,jdbcType=INTEGER}
+ where id = #{productId}
+
+