You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

206 lines
7.0 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. <?php
  2. namespace App\Service\v3\Implementations;
  3. use App\Commons\Log;
  4. use App\Constants\v3\ErrorCode;
  5. use App\Constants\v3\LogLabel;
  6. use App\Exception\ErrorCodeException;
  7. use App\Service\v3\Interfaces\GoodsServiceInterface;
  8. use Hyperf\DbConnection\Db;
  9. use App\Model\v3\Goods;
  10. use App\Model\v3\GoodsBanner;
  11. use App\Constants\v3\Store;
  12. use App\Constants\v3\goods as goodsConstants;
  13. use Hyperf\Redis\Redis;
  14. use Hyperf\Utils\ApplicationContext;
  15. use Hyperf\Di\Annotation\Inject;
  16. class GoodsService implements GoodsServiceInterface
  17. {
  18. /**
  19. * @Inject
  20. * @var Log
  21. */
  22. protected $log;
  23. public function do($goodsId)
  24. {
  25. }
  26. public function check(Goods $goods,$num = 1)
  27. {
  28. $redis = ApplicationContext::getContainer()->get(Redis::class);
  29. $inventoryKey = 'goods_inventory_sold_1_'.$goods->id; // 拼接activity_type和goods_id
  30. if (empty($goods)) {
  31. return ErrorCode::GOODS_NOT_EXISTS;
  32. }
  33. // 商户歇业
  34. if($goods->store->is_rest == 1){
  35. return ErrorCode::STORE_REST;
  36. }
  37. // 商品下架或已删除
  38. if($goods->on_sale == 0 || !is_null($goods->deleted_at)){
  39. return ErrorCode::GOODS_ON_SALE_NO;
  40. }
  41. // 商品库存不足
  42. // 获取冻结的库存
  43. //$inventoryFrozen = (int)$redis->get($inventoryKey);
  44. $inventoryFrozen = 0;
  45. if($goods->is_infinite != 1 && $goods->inventory < ($num+$inventoryFrozen)){
  46. return ErrorCode::GOODS_INVENTORY_ERROR;
  47. }
  48. // 是否超过限购数量
  49. if ($goods->restrict_num != 0 && $goods->restrict_num < $num) {
  50. return ErrorCode::GOODS_RESTRICT_LIMIT;
  51. }
  52. return true;
  53. }
  54. public function undo()
  55. {
  56. // TODO: Implement undo() method.
  57. }
  58. public function getBanner($goodsId)
  59. {
  60. $banner = GoodsBanner::query()->where('goods_id',$goodsId)->orderByDesc('type')->get();
  61. return $banner;
  62. }
  63. public function detail($goodsId)
  64. {
  65. $res = Goods::query()->with('store')->where('id',$goodsId)->first();
  66. return $res;
  67. }
  68. public function getByType($storeId,$typeId)
  69. {
  70. return Goods::query()->withoutGlobalScope('normal')->where(['store_id' => $storeId,'category_id' => $typeId])->orderByDesc('on_sale')->orderByDesc('created_at')->get()->toArray();
  71. }
  72. public function create($params)
  73. {
  74. $data =
  75. [
  76. 'market_id' => $params['market_id'],
  77. 'store_id' => $params['store_id'],
  78. 'name' => $params['name'],
  79. 'category_id' => $params['category_id'],
  80. 'goods_category_id' => $params['goods_category_id'],
  81. 'goods_unit' => $params['goods_unit'],
  82. 'price' => $params['price'],
  83. 'original_price' => $params['original_price'],
  84. 'inventory' => $params['inventory'],
  85. 'restrict_num' => $params['restrict_num'],
  86. 'start_num' => $params['start_num'],
  87. 'spec' => $params['spec'],
  88. 'tags' => $params['tags'],
  89. 'remark' => $params['remark'],
  90. 'on_sale' => $params['on_sale'],
  91. 'is_infinite' => $params['is_infinite']
  92. ];
  93. $this->log->event(LogLabel::CREATE_GOODS_LOG, ['logData' => json_encode(
  94. [
  95. 'id' => $params['id'],
  96. 'market_id' => $params['market_id'],
  97. 'store_id' => $params['store_id'],
  98. 'name' => $params['name'],
  99. 'category_id' => $params['category_id'],
  100. 'goods_category_id' => $params['goods_category_id'],
  101. 'goods_unit' => $params['goods_unit'],
  102. 'price' => $params['price'],
  103. 'original_price' => $params['original_price'],
  104. 'inventory' => $params['inventory'],
  105. 'restrict_num' => $params['restrict_num'],
  106. 'start_num' => $params['start_num'],
  107. 'spec' => $params['spec'],
  108. 'tags' => $params['tags'],
  109. 'remark' => $params['remark'],
  110. 'on_sale' => $params['on_sale'],
  111. 'is_infinite' => $params['is_infinite'],
  112. 'user_id' => $params['user_id']
  113. ]
  114. )]);
  115. return Goods::create($data);
  116. }
  117. public function update($params)
  118. {
  119. $goods = Goods::query()->withoutGlobalScope('normal')
  120. ->where(
  121. [
  122. 'id' => $params['id'],
  123. 'market_id' => $params['market_id'],
  124. 'store_id' => $params['store_id']
  125. ]
  126. )
  127. ->update(
  128. [
  129. 'name' => $params['name'],
  130. 'category_id' => $params['category_id'],
  131. 'goods_category_id' => $params['goods_category_id'],
  132. 'goods_unit' => $params['goods_unit'],
  133. 'price' => $params['price'],
  134. 'original_price' => $params['original_price'],
  135. 'inventory' => $params['inventory'],
  136. 'restrict_num' => $params['restrict_num'],
  137. 'start_num' => $params['start_num'],
  138. 'spec' => $params['spec'],
  139. 'tags' => $params['tags'],
  140. 'remark' => $params['remark'],
  141. 'on_sale' => $params['on_sale'],
  142. 'is_infinite' => $params['is_infinite']
  143. ]);
  144. $this->log->event(LogLabel::UPDATE_GOODS_LOG, ['logData' => json_encode(
  145. [
  146. 'id' => $params['id'],
  147. 'market_id' => $params['market_id'],
  148. 'store_id' => $params['store_id'],
  149. 'name' => $params['name'],
  150. 'category_id' => $params['category_id'],
  151. 'goods_category_id' => $params['goods_category_id'],
  152. 'goods_unit' => $params['goods_unit'],
  153. 'price' => $params['price'],
  154. 'original_price' => $params['original_price'],
  155. 'inventory' => $params['inventory'],
  156. 'restrict_num' => $params['restrict_num'],
  157. 'start_num' => $params['start_num'],
  158. 'spec' => $params['spec'],
  159. 'tags' => $params['tags'],
  160. 'remark' => $params['remark'],
  161. 'on_sale' => $params['on_sale'],
  162. 'is_infinite' => $params['is_infinite'],
  163. 'user_id' => $params['user_id']
  164. ]
  165. )]);
  166. return $goods;
  167. }
  168. public function info($goodsId)
  169. {
  170. $res = Goods::query()->withoutGlobalScope('normal')->where('id',$goodsId)->first();
  171. return $res;
  172. }
  173. public function getTags()
  174. {
  175. return [
  176. '新品',
  177. '热销',
  178. '新鲜'
  179. ];
  180. }
  181. public function updateOnSale($goodsId)
  182. {
  183. $goods = Goods::query()->withoutGlobalScope('normal')->find($goodsId);
  184. $onSale = $goods->on_sale + 1;
  185. $goods->on_sale = $onSale % 2;
  186. return $goods->save();
  187. }
  188. }