diff --git a/crmeb/app/api/controller/v1/order/StoreIntegralOrderController.php b/crmeb/app/api/controller/v1/order/StoreIntegralOrderController.php index f19902700..6953e0838 100644 --- a/crmeb/app/api/controller/v1/order/StoreIntegralOrderController.php +++ b/crmeb/app/api/controller/v1/order/StoreIntegralOrderController.php @@ -65,18 +65,8 @@ class StoreIntegralOrderController $num = (int)$num; //判断积分商品限量 - $unique = $storeIntegralServices->checkoutProductStock($uid, $productInfo['product_id'], $num, $unique); - try { - //弹出队列 - if (!CacheService::popStock($unique, $num, 4)) { - return app('json')->fail(410296); - } - $order = $this->services->createOrder($uid, $addressId, $mark, $request->user()->toArray(), $num, $productInfo); - } catch (\Throwable $e) { - //生成失败归还库存 - CacheService::setStock($unique, $num, 4, false); - return app('json')->fail($e->getMessage()); - } + $storeIntegralServices->checkoutProductStock($uid, $productInfo['product_id'], $num, $unique); + $order = $this->services->createOrder($uid, $addressId, $mark, $request->user()->toArray(), $num, $productInfo); return app('json')->status('success', 410203, ['orderId' => $order['order_id']]); } diff --git a/crmeb/app/jobs/UnpaidOrderCancelJob.php b/crmeb/app/jobs/UnpaidOrderCancelJob.php index f23e5ab76..81fb32355 100644 --- a/crmeb/app/jobs/UnpaidOrderCancelJob.php +++ b/crmeb/app/jobs/UnpaidOrderCancelJob.php @@ -65,13 +65,6 @@ class UnpaidOrderCancelJob extends BaseJobs $orderInfo->is_del = 1; $orderInfo->mark = '订单未支付已超过系统预设时间'; $orderInfo->save(); - try { - /** @var StoreSeckillServices $seckiiServices */ - $seckiiServices = app()->make(StoreSeckillServices::class); - $seckiiServices->cancelOccupySeckillStock($cartInfo, $orderInfo['unique']); - $seckiiServices->rollBackStock($cartInfo); - } catch (\Throwable $e) { - } } return $res; } catch (\Throwable $e) { diff --git a/crmeb/app/listener/order/OrderPaySuccessListener.php b/crmeb/app/listener/order/OrderPaySuccessListener.php index 2a02181cd..ef93256a8 100644 --- a/crmeb/app/listener/order/OrderPaySuccessListener.php +++ b/crmeb/app/listener/order/OrderPaySuccessListener.php @@ -46,14 +46,6 @@ class OrderPaySuccessListener implements ListenerInterface 'change_time' => time() ]); - //回退秒杀库存占用 - /** @var StoreOrderCartInfoServices $cartServices */ - $cartServices = app()->make(StoreOrderCartInfoServices::class); - $cartInfo = $cartServices->getOrderCartInfo($orderInfo['id']); - /** @var StoreSeckillServices $seckiiServices */ - $seckiiServices = app()->make(StoreSeckillServices::class); - $seckiiServices->cancelOccupySeckillStock($cartInfo, $orderInfo['unique']); - //赠送购买商品优惠券 /** @var StoreProductCouponServices $storeProductCouponServices */ $storeProductCouponServices = app()->make(StoreProductCouponServices::class); diff --git a/crmeb/app/services/activity/advance/StoreAdvanceServices.php b/crmeb/app/services/activity/advance/StoreAdvanceServices.php index 45c4e3b87..a41d37ec7 100644 --- a/crmeb/app/services/activity/advance/StoreAdvanceServices.php +++ b/crmeb/app/services/activity/advance/StoreAdvanceServices.php @@ -115,13 +115,6 @@ class StoreAdvanceServices extends BaseServices $valueGroup = $storeProductAttrServices->saveProductAttr($skuList, (int)$res->id, 6); if (!$res) throw new AdminException(100022); } - $res = true; - foreach ($valueGroup->toArray() as $item) { - $res = $res && CacheService::setStock($item['unique'], (int)$item['quota_show'], 6); - } - if (!$res) { - throw new AdminException(400092); - } }); } diff --git a/crmeb/app/services/activity/bargain/StoreBargainServices.php b/crmeb/app/services/activity/bargain/StoreBargainServices.php index 261114b81..38858a92a 100644 --- a/crmeb/app/services/activity/bargain/StoreBargainServices.php +++ b/crmeb/app/services/activity/bargain/StoreBargainServices.php @@ -171,13 +171,6 @@ class StoreBargainServices extends BaseServices $valueGroup = $storeProductAttrServices->saveProductAttr($skuList, (int)$res->id, 2); if (!$res) throw new AdminException(100022); } - $res = true; - foreach ($valueGroup->toArray() as $item) { - $res = $res && CacheService::setStock($item['unique'], (int)$item['quota_show'], 2); - } - if (!$res) { - throw new AdminException(400092); - } }); } diff --git a/crmeb/app/services/activity/combination/StoreCombinationServices.php b/crmeb/app/services/activity/combination/StoreCombinationServices.php index 501d370d5..07b7f34ec 100644 --- a/crmeb/app/services/activity/combination/StoreCombinationServices.php +++ b/crmeb/app/services/activity/combination/StoreCombinationServices.php @@ -118,13 +118,6 @@ class StoreCombinationServices extends BaseServices $valueGroup = $storeProductAttrServices->saveProductAttr($skuList, (int)$res->id, 3); if (!$res) throw new AdminException(100022); } - $res = true; - foreach ($valueGroup->toArray() as $item) { - $res = $res && CacheService::setStock($item['unique'], (int)$item['quota_show'], 3); - } - if (!$res) { - throw new AdminException(400092); - } }); } diff --git a/crmeb/app/services/activity/combination/StorePinkServices.php b/crmeb/app/services/activity/combination/StorePinkServices.php index 11c12f810..3033ddbeb 100644 --- a/crmeb/app/services/activity/combination/StorePinkServices.php +++ b/crmeb/app/services/activity/combination/StorePinkServices.php @@ -131,9 +131,6 @@ class StorePinkServices extends BaseServices } else if ($countY) {//团员 $res = $this->dao->update($countY['id'], ['stop_time' => time() - 1, 'k_id' => 0, 'is_refund' => $id, 'status' => 3]); } - if ($res) { - CacheService::setStock(md5((string)$id), 1, 3, false); - } return $res; } @@ -478,9 +475,6 @@ class StorePinkServices extends BaseServices $pink['id'] = $res1['id']; } - $number = (int)bcsub((string)$pink['people'], '1', 0); - if ($number) CacheService::setStock(md5($pink['id']), $number, 3); - PinkJob::dispatchSecs((int)(($product->effective_time * 3600) + 60), [$pink['id']]); // 开团成功发送模板消息 event('NoticeListener', [['orderInfo' => $orderInfo, 'title' => $product['title'], 'pink' => $pink], 'open_pink_success']); diff --git a/crmeb/app/services/activity/integral/StoreIntegralServices.php b/crmeb/app/services/activity/integral/StoreIntegralServices.php index 94d62c244..9e7a5b58a 100644 --- a/crmeb/app/services/activity/integral/StoreIntegralServices.php +++ b/crmeb/app/services/activity/integral/StoreIntegralServices.php @@ -87,7 +87,7 @@ class StoreIntegralServices extends BaseServices $res = $this->dao->update($id, $data); $storeDescriptionServices->saveDescription((int)$id, $description, 4); $skuList = $storeProductServices->validateProductAttr($items, $detail, (int)$id, 4); - $valueGroup = $storeProductAttrServices->saveProductAttr($skuList, (int)$id, 4); + $storeProductAttrServices->saveProductAttr($skuList, (int)$id, 4); if (!$res) throw new AdminException(100007); } else { if (!$storeProductServices->getOne(['is_show' => 1, 'is_del' => 0, 'id' => $data['product_id']])) { @@ -97,16 +97,9 @@ class StoreIntegralServices extends BaseServices $res = $this->dao->save($data); $storeDescriptionServices->saveDescription((int)$res->id, $description, 4); $skuList = $storeProductServices->validateProductAttr($items, $detail, (int)$res->id, 4); - $valueGroup = $storeProductAttrServices->saveProductAttr($skuList, (int)$res->id, 4); + $storeProductAttrServices->saveProductAttr($skuList, (int)$res->id, 4); if (!$res) throw new AdminException(100022); } - $res = true; - foreach ($valueGroup->toArray() as $item) { - $res = $res && CacheService::setStock($item['unique'], (int)$item['quota_show'], 4); - } - if (!$res) { - throw new AdminException(400092); - } }); } @@ -393,9 +386,6 @@ class StoreIntegralServices extends BaseServices if ($product_stock < $num) { throw new ApiException(410297, ['num' => $num]); } - if (!CacheService::checkStock($unique, $num, 4)) { - throw new ApiException(410297, ['num' => $num]); - } return $unique; } diff --git a/crmeb/app/services/activity/seckill/StoreSeckillServices.php b/crmeb/app/services/activity/seckill/StoreSeckillServices.php index 0e0e54014..9bb2687b0 100644 --- a/crmeb/app/services/activity/seckill/StoreSeckillServices.php +++ b/crmeb/app/services/activity/seckill/StoreSeckillServices.php @@ -190,13 +190,6 @@ class StoreSeckillServices extends BaseServices $valueGroup = $storeProductAttrServices->saveProductAttr($skuList, (int)$res->id, 1); if (!$res) throw new AdminException(100022); } - $res = true; - foreach ($valueGroup->toArray() as $item) { - $res = $res && CacheService::setStock($item['unique'], (int)$item['quota_show'], 1); - } - if (!$res) { - throw new AdminException(400092); - } }); } @@ -602,33 +595,18 @@ class StoreSeckillServices extends BaseServices } /** - * 秒杀库存添加入redis的队列中 - * @param string $unique sku唯一值 - * @param int $type 类型 - * @param int $number 库存个数 - * @param bool $isPush 是否放入之前删除当前队列 - * @return bool|int - */ - public function pushSeckillStock(string $unique, int $type, int $number, bool $isPush = false) - { - $name = 'seckill_' . $unique . '_' . $type; - /** @var CacheService $cache */ - $cache = app()->make(CacheService::class); - $res = true; - if (!$isPush) { - $cache->delete($name); - } - for ($i = 1; $i <= $number; $i++) { - $res = $res && $cache->lPush($name, $i); - } - return $res; - } - - /** - * @param int $productId - * @param string $unique + * 检查秒杀库存 + * @param int $uid + * @param int $seckillId * @param int $cartNum - * @param string $value + * @param string $unique + * @return array + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @author 吴汐 + * @email 442384644@qq.com + * @date 2023/03/01 */ public function checkSeckillStock(int $uid, int $seckillId, int $cartNum = 1, string $unique = '') { @@ -661,139 +639,18 @@ class StoreSeckillServices extends BaseServices return [$attrInfo, $unique, $StoreSeckillinfo]; } - /** - * 弹出redis队列中的库存条数 - * @param string $unique - * @param int $type - * @return mixed - */ - public function popSeckillStock(string $unique, int $type, int $number = 1) - { - $name = 'seckill_' . $unique . '_' . $type; - /** @var CacheService $cache */ - $cache = app()->make(CacheService::class); - if ($number > $cache->lLen($name)) { - return false; - } - $res = true; - for ($i = 1; $i <= $number; $i++) { - $res = $res && $cache->lPop($name); - } - return $res; - } - - /** - * 是否有库存 - * @param string $unique - * @param int $type - * @return mixed - * @throws \Psr\SimpleCache\InvalidArgumentException - */ - public function isSeckillStock(string $unique, int $type, int $number) - { - /** @var CacheService $cache */ - $cache = app()->make(CacheService::class); - return $cache->lLen('seckill_' . $unique . '_' . $type) >= $number; - } - - /** - * 回滚库存 - * @param array $cartInfo - * @param int $number - * @return bool - */ - public function rollBackStock(array $cartInfo) - { - $res = true; - foreach ($cartInfo as $item) { - $value = $item['cart_info']; - if ($value['seckill_id']) { - $res = $res && $this->pushSeckillStock($value['product_attr_unique'], 1, (int)$value['cart_num'], true); - } - } - return $res; - } - - /** - * 占用库存 - * @param $cartInfo - */ - public function occupySeckillStock($cartInfo, $key, $time = 0) - { - //占用库存 - if ($cartInfo) { - if (!$time) { - $time = time() + 600; - } - foreach ($cartInfo as $val) { - if ($val['seckill_id']) { - $this->setSeckillStock($val['product_id'], $val['product_attr_unique'], $time, $key, (int)$val['cart_num']); - } - } - } - return true; - } - - /** - * 取消秒杀占用的库存 - * @param array $cartInfo - * @param string $key - * @return bool - */ - public function cancelOccupySeckillStock(array $cartInfo, string $key) - { - if ($cartInfo) { - foreach ($cartInfo as $val) { - if (isset($val['seckill_id']) && $val['seckill_id']) { - $this->backSeckillStock((int)$val['product_id'], $val['product_attr_unique'], $key, (int)$val['cart_num']); - } - } - } - return true; - } - - /** - * 存入当前秒杀商品属性有序集合 - * @param $product_id - * @param $unique - * @param $score - * @param $value - * @param int $cart_num - * @return bool - */ - public function setSeckillStock($product_id, $unique, $score, $value, $cart_num = 1) - { - $set_key = md5('seckill_set_attr_stock_' . $product_id . '_' . $unique); - $i = 0; - for ($i; $i < $cart_num; $i++) { - CacheService::zAdd($set_key, $score, $value . $i); - } - return true; - } - - /** - * 取消集合中的秒杀商品 - * @param int $product_id - * @param string $unique - * @param $value - * @param int $cart_num - * @return bool - */ - public function backSeckillStock(int $product_id, string $unique, $value, int $cart_num = 1) - { - $set_key = md5('seckill_set_attr_stock_' . $product_id . '_' . $unique); - $i = 0; - for ($i; $i < $cart_num; $i++) { - CacheService::zRem($set_key, $value . $i); - } - return true; - } - /** * 修改秒杀库存 * @param int $num * @param int $seckillId + * @param string $unique * @return bool + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @author 吴汐 + * @email 442384644@qq.com + * @date 2023/03/01 */ public function decSeckillStock(int $num, int $seckillId, string $unique = '') { diff --git a/crmeb/app/services/order/StoreCartServices.php b/crmeb/app/services/order/StoreCartServices.php index a4595e648..7c851d3c1 100644 --- a/crmeb/app/services/order/StoreCartServices.php +++ b/crmeb/app/services/order/StoreCartServices.php @@ -208,9 +208,6 @@ class StoreCartServices extends BaseServices if ($product_stock < $cartNum) { throw new ApiException(410297, ['num' => $cartNum]); } - if ($type != 5 && !CacheService::checkStock($unique, (int)$cartNum, $type)) { - throw new ApiException(410297, ['num' => $cartNum]); - } } return [$attrInfo, $unique, $bargainUserInfo['bargain_price_min'] ?? 0, $cartNum, $productInfo]; } diff --git a/crmeb/app/services/order/StoreOrderCreateServices.php b/crmeb/app/services/order/StoreOrderCreateServices.php index 4b8006fab..31d55dcf5 100644 --- a/crmeb/app/services/order/StoreOrderCreateServices.php +++ b/crmeb/app/services/order/StoreOrderCreateServices.php @@ -167,9 +167,6 @@ class StoreOrderCreateServices extends BaseServices throw new ApiStatusException('ORDER_EXIST', 410210, ['orderId' => $storeOrderServices->getStoreIdPink($pinkId, $uid)]); if ($storeOrderServices->getIsOrderPink($pinkId, $uid)) throw new ApiStatusException('ORDER_EXIST', 410211, ['orderId' => $storeOrderServices->getStoreIdPink($pinkId, $uid)]); - if (!CacheService::checkStock(md5($pinkId), 1, 3) || !CacheService::popStock(md5($pinkId), 1, 3)) { - throw new ApiException(410212); - } } $virtual_type = $cartGroup['cartInfo'][0]['productInfo']['virtual_type'] ?? 0; @@ -297,8 +294,6 @@ class StoreOrderCreateServices extends BaseServices /** @var UserServices $userService */ $userService = app()->make(UserServices::class); $userService->update(['uid' => $uid], ['real_name' => $orderInfo['real_name'], 'record_phone' => $orderInfo['user_phone']]); - //占用库存 - $seckillServices->occupySeckillStock($cartInfo, $key); //积分抵扣 if ($priceData['usedIntegral'] > 0) { $this->deductIntegral($userInfo, $useIntegral, $priceData, (int)$userInfo['uid'], $order['id']); diff --git a/crmeb/app/services/order/StoreOrderRefundServices.php b/crmeb/app/services/order/StoreOrderRefundServices.php index 99ad4ff5c..d850b6cb8 100644 --- a/crmeb/app/services/order/StoreOrderRefundServices.php +++ b/crmeb/app/services/order/StoreOrderRefundServices.php @@ -526,6 +526,10 @@ class StoreOrderRefundServices extends BaseServices * 回退库存 * @param $order * @return bool + * @throws \Psr\SimpleCache\InvalidArgumentException + * @author 吴汐 + * @email 442384644@qq.com + * @date 2023/03/01 */ public function regressionStock($order) { @@ -533,7 +537,6 @@ class StoreOrderRefundServices extends BaseServices $combination_id = $order['combination_id']; $seckill_id = $order['seckill_id']; $bargain_id = $order['bargain_id']; - $advance_id = $order['advance_id']; $res5 = true; /** @var StoreOrderCartInfoServices $cartServices */ $cartServices = app()->make(StoreOrderCartInfoServices::class); @@ -553,20 +556,15 @@ class StoreOrderRefundServices extends BaseServices //增库存减销量 $unique = isset($cart['cart_info']['productInfo']['attrInfo']) ? $cart['cart_info']['productInfo']['attrInfo']['unique'] : ''; $cart_num = (int)$cart['cart_info']['cart_num']; - $type = 0; if ($combination_id) { - $type = 3; $res5 = $res5 && $pinkServices->incCombinationStock($cart_num, (int)$combination_id, $unique); } else if ($seckill_id) { - $type = 1; $res5 = $res5 && $seckillServices->incSeckillStock($cart_num, (int)$seckill_id, $unique); } else if ($bargain_id) { - $type = 2; $res5 = $res5 && $bargainServices->incBargainStock($cart_num, (int)$bargain_id, $unique); } else { $res5 = $res5 && $services->incProductStock($cart_num, (int)$cart['cart_info']['productInfo']['id'], $unique); } - if ($type) CacheService::setStock($unique, $cart_num, $type, false); } return $res5; } diff --git a/crmeb/app/services/order/StoreOrderServices.php b/crmeb/app/services/order/StoreOrderServices.php index 241f71f28..cfb69597c 100644 --- a/crmeb/app/services/order/StoreOrderServices.php +++ b/crmeb/app/services/order/StoreOrderServices.php @@ -1930,10 +1930,6 @@ HTML; throw new ApiException(100020); } }); - /** @var StoreSeckillServices $seckiiServices */ - $seckiiServices = app()->make(StoreSeckillServices::class); - $seckiiServices->cancelOccupySeckillStock($cartInfo, $order['unique']); - $seckiiServices->rollBackStock($cartInfo); return true; } @@ -2154,10 +2150,6 @@ HTML; /** @var StoreOrderCartInfoServices $cartServices */ $cartServices = app()->make(StoreOrderCartInfoServices::class); $cartInfo = $cartServices->getOrderCartInfo((int)$order['id']); - /** @var StoreSeckillServices $seckiiServices */ - $seckiiServices = app()->make(StoreSeckillServices::class); - $seckiiServices->cancelOccupySeckillStock($cartInfo, $order['unique']); - $seckiiServices->rollBackStock($cartInfo); } catch (\Throwable $e) { Log::error('自动取消订单失败,失败原因:' . $e->getMessage(), $e->getTrace()); diff --git a/crmeb/app/services/product/product/StoreProductRelationServices.php b/crmeb/app/services/product/product/StoreProductRelationServices.php index e33e1c4e3..05bc023c8 100644 --- a/crmeb/app/services/product/product/StoreProductRelationServices.php +++ b/crmeb/app/services/product/product/StoreProductRelationServices.php @@ -61,8 +61,15 @@ class StoreProductRelationServices extends BaseServices } /** + * 收藏 * @param int $uid - * @return mixed + * @return array + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @author 吴汐 + * @email 442384644@qq.com + * @date 2023/03/01 */ public function getUserCollectProduct(int $uid) { diff --git a/crmeb/app/services/user/UserRechargeServices.php b/crmeb/app/services/user/UserRechargeServices.php index ec2916c13..b6e8dead1 100644 --- a/crmeb/app/services/user/UserRechargeServices.php +++ b/crmeb/app/services/user/UserRechargeServices.php @@ -123,7 +123,7 @@ class UserRechargeServices extends BaseServices $item['_pay_time'] = $item['pay_time'] ? date('Y-m-d H:i:s', $item['pay_time']) : '暂无'; $item['_add_time'] = $item['add_time'] ? date('Y-m-d H:i:s', $item['add_time']) : '暂无'; $item['paid_type'] = $item['paid'] ? '已支付' : '未支付'; - $item['avatar'] = strpos($item['avatar'], 'http') === false ? (sys_config('site_url') . $item['avatar']) : $item['avatar']; + $item['avatar'] = strpos($item['avatar'] ?? '', 'http') === false ? (sys_config('site_url') . $item['avatar']) : $item['avatar']; unset($item['user']); } return compact('list', 'count'); diff --git a/crmeb/crmeb/services/CacheService.php b/crmeb/crmeb/services/CacheService.php index 2ececaf34..7af1d1273 100644 --- a/crmeb/crmeb/services/CacheService.php +++ b/crmeb/crmeb/services/CacheService.php @@ -145,104 +145,6 @@ class CacheService } } - /** 以下三个方法仅开启redis之后才使用 */ - /** - * 设置redis入库队列 - * @param string $unique - * @param int $number - * @param int $type - * @param bool $isPush - * @return false - * @throws \Psr\SimpleCache\InvalidArgumentException - */ - public static function setStock(string $unique, int $number, int $type = 1, bool $isPush = true) - { - if (Config::get('cache.default') == 'file') return true; - if (!$unique || !$number) return false; - $name = (self::$redisQueueKey[$type] ?? '') . '_' . $type . '_' . $unique; - if ($isPush) { - Cache::store('redis')->delete($name); - } - $data = []; - for ($i = 1; $i <= $number; $i++) { - $data[] = $i; - } - return Cache::store('redis')->lPush($name, ...$data); - } - - /** - * 是否有库存|返回库存 - * @param string $unique - * @param int $number - * @param int $type - * @return bool - */ - public static function checkStock(string $unique, int $number = 0, int $type = 1) - { - if (Config::get('cache.default') == 'file') return true; - $name = (self::$redisQueueKey[$type] ?? '') . '_' . $type . '_' . $unique; - if ($number) { - return Cache::store('redis')->lLen($name) >= $number; - } else { - return Cache::store('redis')->lLen($name); - } - } - - /** - * 弹出redis队列中的库存条数 - * @param string $unique - * @param int $number - * @param int $type - * @return bool - */ - public static function popStock(string $unique, int $number, int $type = 1) - { - if (Config::get('cache.default') == 'file') return true; - if (!$unique || !$number) return false; - $name = (self::$redisQueueKey[$type] ?? '') . '_' . $type . '_' . $unique; - $res = true; - if ($number > Cache::store('redis')->lLen($name)) { - return false; - } - for ($i = 1; $i <= $number; $i++) { - $res = $res && Cache::store('redis')->lPop($name); - } - return $res; - } - - /** - * 存入当前秒杀商品属性有序集合 - * @param $set_key - * @param $score - * @param $value - * @return false - */ - public static function zAdd($set_key, $score, $value) - { - if (Config::get('cache.default') == 'file') return true; - try { - return Cache::store('redis')->zAdd($set_key, $score, $value); - } catch (\Throwable $e) { - return false; - } - } - - /** - * 取消集合中的秒杀商品 - * @param $set_key - * @param $value - * @return false - */ - public static function zRem($set_key, $value) - { - if (Config::get('cache.default') == 'file') return true; - try { - return Cache::store('redis')->zRem($set_key, $value); - } catch (\Throwable $e) { - return false; - } - } - /** * 检查锁 * @param string $key