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.

226 lines
7.6 KiB

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