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.

157 lines
5.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
  1. <?php
  2. namespace App\Service;
  3. use App\Model\Order;
  4. use App\Model\OrderGoods;
  5. use App\Model\OrderMain;
  6. use Hyperf\Di\Annotation\Inject;
  7. use Hyperf\DbConnection\Db;
  8. use App\Model\Goods;
  9. use App\Model\Combination;
  10. use App\Model\ShopCar;
  11. use App\Constants\LogLabel;
  12. use App\Commons\Log;
  13. use Hyperf\Utils\ApplicationContext;
  14. use App\TaskWorker\SSDBTask;
  15. use App\Constants\SsdbKeysPrefix;
  16. use App\Model\Ad;
  17. class PurchaseLimitService implements PurchaseLimitServiceInterface
  18. {
  19. /**
  20. * @Inject
  21. * @var ParamsTokenServiceInterface
  22. */
  23. protected $paramsTokenService;
  24. /**
  25. * @Inject
  26. * @var AdServiceInterface
  27. */
  28. protected $adService;
  29. public function getStoreIdByMarketId($params)
  30. {
  31. $market_id = $params['market_id'] ?? 0;
  32. //获取ssdb上的首页banner logo 列表
  33. $logo_list = $this->paramsTokenService->analyze('banner_logo_list');
  34. //获取ssdb上的首页banner 市场 列表
  35. $market_list = $this->paramsTokenService->analyze('banner_market_list');
  36. //根据前端指定的指获取店铺id 字符串 并拆分成数组
  37. if(isset($market_list['market_id_'.$market_id]) && !empty($market_list['market_id_'.$market_id])) {
  38. $store_list = $market_list['market_id_' . $market_id];
  39. $store_list = explode(',', $store_list);
  40. //遍历店铺
  41. foreach ($store_list as $store_id) {
  42. $banners[] = [
  43. 'id' => $store_id,
  44. 'item' => 1,
  45. 'item_text' => 'page',
  46. 'logo' => $logo_list['store_id_' . $store_id],
  47. 'redirect_url' => '/zh_cjdianc/pages/takeout/takeoutindex?storeid=' . $store_id,
  48. 'src' => '/zh_cjdianc/pages/takeout/takeoutindex?storeid=' . $store_id,
  49. 'src2' => '/zh_cjdianc/pages/takeout/takeoutindex?storeid=' . $store_id,
  50. ];
  51. }
  52. }else{
  53. $banners = Ad::query()->select(['id','title','logo','item','src','src2'])
  54. ->where([
  55. 'type' => Ad::TYPE_BANNER,
  56. 'status' => Ad::STATUS_YES
  57. ])
  58. ->orderBy('orderby', 'desc')
  59. ->get();
  60. }
  61. return $banners;
  62. }
  63. public function getBannerByMarketId($params)
  64. {
  65. $market_id = $params['market_id'] ?? 0;
  66. //获取ssdb上的首页banner logo 列表
  67. $logo_list = $this->paramsTokenService->analyze('banner_logo_list');
  68. //获取ssdb上的首页banner 市场 列表
  69. $market_list = $this->paramsTokenService->analyze('banner_market_list');
  70. //根据前端指定的指获取店铺id 字符串 并拆分成数组
  71. if(isset($market_list['market_id_'.$market_id]) && !empty($market_list['market_id_'.$market_id])) {
  72. $store_list = $market_list['market_id_' . $market_id];
  73. $store_list = explode(',', $store_list);
  74. //遍历店铺
  75. foreach ($store_list as $store_id) {
  76. $banners[] = [
  77. 'id' => $store_id,
  78. 'item' => 1,
  79. 'item_text' => 'page',
  80. 'logo' => $logo_list['store_id_' . $store_id],
  81. 'redirect_url' => '/zh_cjdianc/pages/takeout/takeoutindex?storeid=' . $store_id,
  82. 'src' => '/zh_cjdianc/pages/takeout/takeoutindex?storeid=' . $store_id,
  83. 'src2' => '/zh_cjdianc/pages/takeout/takeoutindex?storeid=' . $store_id,
  84. ];
  85. }
  86. }else{
  87. $banners = $this->adService->banners();
  88. }
  89. return $banners;
  90. }
  91. public function ssdbPurchaseRecord($data,$user_id,$global_order_id)
  92. {
  93. foreach ($data as $k => $v){
  94. if($v['money'] == 0.01){
  95. //添加特价商品购买记录到ssdb
  96. $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
  97. $ssdb->exec('set', SsdbKeysPrefix::PURCHASE_RECORD. date('Ymd') .'_'.$user_id.'_'.$v['good_id'], $global_order_id);
  98. $end_timestamp = strtotime(date('Y-m-d').'23:59:59');
  99. $end_time = $end_timestamp - time();
  100. $ssdb->exec('expire', SsdbKeysPrefix::PURCHASE_RECORD. date('Ymd') .'_'.$user_id.'_'.$v['good_id'],$end_time);
  101. }
  102. }
  103. return true;
  104. }
  105. public function delSsdbPurchaseRecord($global_order_id)
  106. {
  107. $order_main = OrderMain::where('global_order_id',$global_order_id)
  108. ->select('id','user_id')
  109. ->first();
  110. $order_id = $order_main->id;
  111. $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
  112. $order = Order::query()
  113. ->where('order_main_id',$order_id)
  114. ->select('id','user_id')
  115. ->get()
  116. ->toArray();
  117. foreach ($order as $k1 => $v1){
  118. $goods = OrderGoods::query()
  119. ->where([
  120. ['order_id','=',$v1['id']],
  121. ['money','=',0.01],
  122. ])
  123. ->select('good_id')
  124. ->get()
  125. ->toArray();
  126. foreach ($goods as $k2 => $v2) {
  127. $ssdb->exec('del', SsdbKeysPrefix::PURCHASE_RECORD. date('Ymd') .'_'.$v1['user_id'].'_'.$v2['good_id']);
  128. }
  129. }
  130. return true;
  131. }
  132. public function PurchaseLimit($orderGoods)
  133. {
  134. $sum = 0;
  135. foreach ($orderGoods as $goods){
  136. if($goods['money'] == 0.01){
  137. if($sum > 0){
  138. return false;
  139. }
  140. $sum++;
  141. }
  142. }
  143. return true;
  144. }
  145. }