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.

213 lines
8.0 KiB

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