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} + +