diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductSkuMapper.java b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductSkuMapper.java index 14afc70..443ac20 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductSkuMapper.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductSkuMapper.java @@ -29,4 +29,8 @@ public interface TbProductSkuMapper { TbProductSkuWithBLOBs selectByProduct(@Param("productId") Integer productId); void updateByskuId(@Param("productSkuId") Integer productSkuId,@Param("num") Integer num); + + void updateByskuIdSub(@Param("skuId")Integer skuId, @Param("num")Integer num); + + void updateStockNum(@Param("skuId") Integer skuId, @Param("num") Integer num); } \ No newline at end of file diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/DutyService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/DutyService.java index b9ddc4c..cce0033 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/DutyService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/DutyService.java @@ -13,10 +13,12 @@ import com.chaozhanggui.system.cashierservice.sign.CodeEnum; import com.chaozhanggui.system.cashierservice.sign.Result; import com.chaozhanggui.system.cashierservice.util.*; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import redis.clients.jedis.Jedis; import java.math.BigDecimal; import java.util.*; @@ -44,10 +46,13 @@ public class DutyService { private TbProductSkuMapper productSkuMapper; @Autowired private CloudPrinterService cloudPrinterService; + @Autowired + private RedisUtil redisUtil; + @Transactional(rollbackFor = Exception.class) public void exect(String message) { try { - System.out.println("数据落地开始:"+message); + System.out.println("数据落地开始:" + message); JSONObject jsonObject = JSON.parseObject(message); String token = jsonObject.getString("token"); String type = jsonObject.getString("type"); @@ -69,7 +74,7 @@ public class DutyService { } List list = orderDetailMapper.selectAllByOrderId(orderId); // ShopUserDuty shopUserDuty = shopUserDutyMapper.selectByTokenId(tokenId); - ShopUserDuty shopUserDuty = shopUserDutyMapper.selectByShopIdAndTrade(shopId,day); + ShopUserDuty shopUserDuty = shopUserDutyMapper.selectByShopIdAndTrade(shopId, day); // ShopUserDuty shopUserDuty = shopUserDutyMapper.selectByTokenIdAndTradeDay(tokenId, day, orderInfo.getShopId()); BigDecimal cashAmount = BigDecimal.ZERO; @@ -95,7 +100,8 @@ public class DutyService { shopUserDutyDetail.setProductId(orderDetail.getProductId()); shopUserDutyDetail.setProductName(orderDetail.getProductName()); detaiList.add(shopUserDutyDetail); - productSkuMapper.updateByskuId(orderDetail.getProductSkuId(),orderDetail.getNum()); +// productSkuMapper.updateByskuId(orderDetail.getProductSkuId(), orderDetail.getNum()); + subInventory(shopId,orderDetail.getProductSkuId(),orderDetail.getNum()); } if (detaiList.size() > 0) { shopUserDutyDetailMapper.batchInsert(detaiList); @@ -135,18 +141,19 @@ public class DutyService { detaiList.add(shopUserDutyDetail); } - productSkuMapper.updateByskuId(orderDetail.getProductSkuId(),orderDetail.getNum()); +// productSkuMapper.updateByskuId(orderDetail.getProductSkuId(), orderDetail.getNum()); + subInventory(shopId,orderDetail.getProductSkuId(),orderDetail.getNum()); } if (detaiList.size() > 0) { shopUserDutyDetailMapper.batchInsert(detaiList); } } - ShopUserDutyPay shopUserDutyPay = shopUserDutyPayMapper.selectByDuctIdAndType(shopUserDuty.getId(),orderInfo.getPayType()); - if (Objects.nonNull(shopUserDutyPay)){ + ShopUserDutyPay shopUserDutyPay = shopUserDutyPayMapper.selectByDuctIdAndType(shopUserDuty.getId(), orderInfo.getPayType()); + if (Objects.nonNull(shopUserDutyPay)) { shopUserDutyPay.setAmount(orderInfo.getOrderAmount().add(shopUserDutyPay.getAmount())); shopUserDutyPayMapper.updateByPrimaryKeySelective(shopUserDutyPay); - }else { - shopUserDutyPay=new ShopUserDutyPay(); + } else { + shopUserDutyPay = new ShopUserDutyPay(); shopUserDutyPay.setDutyId(shopUserDuty.getId()); shopUserDutyPay.setType(orderInfo.getPayType()); shopUserDutyPay.setAmount(orderInfo.getOrderAmount()); @@ -204,7 +211,7 @@ public class DutyService { shopUserDutyDetail.setProductId(orderDetail.getProductId()); shopUserDutyDetail.setProductName(orderDetail.getProductName()); detaiList.add(shopUserDutyDetail); - productSkuMapper.updateByskuId(orderDetail.getProductSkuId(),orderDetail.getNum()); + productSkuMapper.updateByskuId(orderDetail.getProductSkuId(), orderDetail.getNum()); } if (detaiList.size() > 0) { shopUserDutyDetailMapper.batchInsert(detaiList); @@ -244,35 +251,45 @@ public class DutyService { detaiList.add(shopUserDutyDetail); } - productSkuMapper.updateByskuId(orderDetail.getProductSkuId(),orderDetail.getNum()); + productSkuMapper.updateByskuId(orderDetail.getProductSkuId(), orderDetail.getNum()); } if (detaiList.size() > 0) { shopUserDutyDetailMapper.batchInsert(detaiList); } } - ShopUserDutyPay shopUserDutyPay = shopUserDutyPayMapper.selectByDuctIdAndType(shopUserDuty.getId(),orderInfo.getPayType()); - if (Objects.nonNull(shopUserDutyPay)){ + ShopUserDutyPay shopUserDutyPay = shopUserDutyPayMapper.selectByDuctIdAndType(shopUserDuty.getId(), orderInfo.getPayType()); + if (Objects.nonNull(shopUserDutyPay)) { shopUserDutyPay.setAmount(orderInfo.getOrderAmount().add(shopUserDutyPay.getAmount())); shopUserDutyPayMapper.updateByPrimaryKeySelective(shopUserDutyPay); - }else { - shopUserDutyPay=new ShopUserDutyPay(); + } else { + shopUserDutyPay = new ShopUserDutyPay(); shopUserDutyPay.setDutyId(shopUserDuty.getId()); shopUserDutyPay.setType(orderInfo.getPayType()); shopUserDutyPay.setAmount(orderInfo.getOrderAmount()); shopUserDutyPayMapper.insert(shopUserDutyPay); } - }else{ - if (type.equals("close")){ + } else { + if (type.equals("close")) { JSONObject tokenJson = TokenUtil.parseParamFromToken(tbToken.getToken()); Integer shopId = tokenJson.getInteger("shopId"); Integer staffId = tokenJson.getInteger("staffId"); - cloudPrinterService.handoverprintData(token,day,""); - shopUserDutyMapper.updateStatusByTokenId(day,shopId,staffId); + cloudPrinterService.handoverprintData(token, day, ""); + shopUserDutyMapper.updateStatusByTokenId(day, shopId, staffId); } } } catch (Exception e) { e.getMessage(); } } + + private void subInventory(Integer shopId, Integer skuId, Integer num) { + String result = redisUtil.seckill(RedisCst.PRODUCT + shopId.toString() + ":" + skuId.toString(), num.toString()); + TbProductSku tbProductSku = productSkuMapper.selectByPrimaryKey(skuId); + if (num > tbProductSku.getStockNumber()) { + productSkuMapper.updateStockNum(skuId,num); + } else { + productSkuMapper.updateByskuIdSub(skuId, num); + } + } } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/util/RedisCst.java b/src/main/java/com/chaozhanggui/system/cashierservice/util/RedisCst.java index 5f56db4..e432f12 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/util/RedisCst.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/util/RedisCst.java @@ -13,4 +13,5 @@ public class RedisCst { public static final String ONLINE_USER = "ONLINE:USER"; public static final String CART = "CZG:CART:"; + public static final Object PRODUCT = "PRODUCT:"; } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/util/RedisUtil.java b/src/main/java/com/chaozhanggui/system/cashierservice/util/RedisUtil.java index b88103b..c3158e3 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/util/RedisUtil.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/util/RedisUtil.java @@ -577,4 +577,43 @@ public class RedisUtil { } return 0L ; } + + String secKillScript = "local prodid=KEYS[1];\r\n" + + "local usernum=KEYS[2];\r\n" + + "local num= redis.call(\"get\" ,prodid);\r\n" + + "if tonumber(num)()); + String reString = String.valueOf(result); + return reString; + + } catch (Exception e) { + e.printStackTrace(); + } finally { + // 释放对象池,即获取jedis实例使用后要将对象还回去 + // 释放对象池,即获取jedis实例使用后要将对象还回去 + if (jedis != null) { + jedis.close(); + } + } + return REDIS_FAILED+""; + } } diff --git a/src/main/resources/mapper/TbProductSkuMapper.xml b/src/main/resources/mapper/TbProductSkuMapper.xml index f477163..2f03731 100644 --- a/src/main/resources/mapper/TbProductSkuMapper.xml +++ b/src/main/resources/mapper/TbProductSkuMapper.xml @@ -336,8 +336,14 @@ update tb_product_sku set real_sales_number = real_sales_number + #{num} where id = #{productSkuId} + + update tb_product_sku set stock_number = stock_number - #{num},real_sales_number = real_sales_number + #{num} where id = #{skuId} + + + update tb_product_sku set stock_number = 0 ,real_sales_number = real_sales_number + #{num} where id = #{skuId} + - select * from tb_product_sku where shop_id=#{shopId} and product_id=#{productId}