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.

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