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.

216 lines
7.7 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
5 years ago
5 years ago
5 years ago
5 years ago
  1. <?php
  2. namespace App\Service;
  3. use Hyperf\Di\Annotation\Inject;
  4. use Hyperf\DbConnection\Db;
  5. use App\Model\Goods;
  6. use App\Model\Combination;
  7. use App\Model\ShopCar;
  8. use App\Constants\LogLabel;
  9. use App\Commons\Log;
  10. use Hyperf\Utils\ApplicationContext;
  11. use App\TaskWorker\SSDBTask;
  12. use App\Constants\SsdbKeysPrefix;
  13. class PurchaseLimitService implements PurchaseLimitServiceInterface
  14. {
  15. public function addShopCar($params)
  16. {
  17. //获取ssdb购买记录
  18. $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
  19. $record_exists = $ssdb->exec('hexists',SsdbKeysPrefix::PURCHASE_RECORD. date('Ymd') .'_'.$params['user_id'], $params['good_id']);
  20. if($record_exists)
  21. {
  22. $error = [
  23. 'error' => '特价商品每日只能购买一次'
  24. ];
  25. return $error;
  26. }
  27. //获取主表商品表信息
  28. $goods = Goods::where([
  29. ['id','=',$params['good_id']],
  30. ])
  31. ->select('is_max','restrict_num','box_money','inventory','money')
  32. ->first();
  33. //获取购物车该商品购买数量
  34. $num = ShopCar::where([
  35. ['user_id', $params['user_id']],
  36. ['good_id', $params['good_id']],
  37. ])
  38. ->sum('num');
  39. //限购检验
  40. if($goods->restrict_num > 0 && $goods->restrict_num <= $num)
  41. {
  42. $error = [
  43. 'error' => '超过商品限购数量'
  44. ];
  45. return $error;
  46. }
  47. //获取规格表商品信息
  48. if($params['combination_id'] > 0)
  49. {
  50. $combination = Combination::where([
  51. ['id', '=', $params['combination_id']],
  52. ])
  53. ->select('wm_money', 'number')
  54. ->first();
  55. $inventory = $combination->number;
  56. $money = $combination->wm_money;
  57. }else{
  58. $inventory = $goods->inventory;
  59. $money = $goods->money;
  60. }
  61. //库存校验 is_max 无限库存
  62. if($goods->is_max != Goods::INVENTORY_NOLIMIT && ($num + $params['num']) > $inventory)
  63. {
  64. $error = [
  65. 'error' => '库存不足'
  66. ];
  67. return $error;
  68. }
  69. //更新购物车
  70. $exists_sql = ShopCar::where([
  71. ['user_id', '=', $params['user_id']],
  72. ['good_id', '=', $params['good_id']],
  73. ['market_id','=',$params['market_id']],
  74. ['combination_id','=', $params['combination_id']],
  75. ]);
  76. if($params['combination_id'] > 0) {
  77. $exists_sql->where('combination_id',$params['combination_id']);
  78. }
  79. $exists = $exists_sql->exists();
  80. if($exists)
  81. {
  82. $update = ShopCar::where([
  83. ['user_id', '=', $params['user_id']],
  84. ['good_id', '=', $params['good_id']],
  85. ['market_id','=',$params['market_id']],
  86. ]);
  87. if($params['combination_id'] > 0) {
  88. $update->where('combination_id',$params['combination_id']);
  89. }
  90. $update->increment('num', $params['num']);
  91. }else{
  92. $son_id = empty($params['son_id']) ? 0 : $params['son_id'];
  93. $dr_id = empty($params['dr_id']) ? 0 : $params['dr_id'];
  94. $combination_id = empty($params['combination_id']) ? 0 : $params['combination_id'];
  95. $qg_name = empty($params['qg_name']) ? ' ' : $params['qg_name'];
  96. $qg_logo = empty($params['qg_logo']) ? ' ' :$params['qg_logo'];
  97. ShopCar::insert(
  98. [
  99. 'market_id' => $params['market_id'],
  100. 'good_id' => $params['good_id'],
  101. 'store_id' => $params['store_id'],
  102. 'user_id' => $params['user_id'],
  103. 'combination_id' => $combination_id,
  104. 'num' => $params['num'],
  105. 'spec' => $params['spec'],
  106. 'son_id' => $son_id,
  107. 'dr_id' => $dr_id,
  108. 'qg_name' => $qg_name,
  109. 'qg_logo' => $qg_logo,
  110. 'money' => $money,
  111. 'box_money' => $goods->box_money,
  112. ]
  113. );
  114. }
  115. return true;
  116. // if($params['goods_id'] == 1561){
  117. // return false;
  118. // }else{
  119. // return '加入购物车成功';
  120. // }
  121. }
  122. public function updateShopCar($params)
  123. {
  124. if($params['num'] <= 0)
  125. {
  126. ShopCar::where('id',$params['id'])->delete();
  127. }else {
  128. $shop_car = ShopCar::where('id',$params['id'])
  129. ->select('good_id','user_id')
  130. ->first();
  131. //获取主表商品表信息
  132. $goods = Goods::where([
  133. ['id','=',$shop_car['good_id']],
  134. ])
  135. ->select('is_max','restrict_num','box_money','inventory','money')
  136. ->first();
  137. //获取购物车该商品购买数量
  138. $num = ShopCar::where([
  139. ['user_id', $shop_car['user_id']],
  140. ['good_id', $shop_car['good_id']],
  141. ])
  142. ->sum('num');
  143. //限购检验
  144. if($goods->restrict_num > 0 && $goods->restrict_num <= $num)
  145. {
  146. $error = [
  147. 'error' => '超过商品限购数量'
  148. ];
  149. return $error;
  150. }
  151. if ($shop_car['combination_id'] > 0)
  152. {
  153. $combination = Combination::where([
  154. ['id', '=', $shop_car['combination_id']],
  155. ])
  156. ->select('wm_money', 'number')
  157. ->first();
  158. $inventory = $combination->number;
  159. }else{
  160. $inventory = $goods->inventory;
  161. }
  162. //库存校验 is_max 无限库存
  163. if($goods->is_max != Goods::INVENTORY_NOLIMIT && $params['num'] > $inventory)
  164. {
  165. $error = [
  166. 'error' => '库存不足'
  167. ];
  168. return $error;
  169. }
  170. ShopCar::where('id',$params['id'])
  171. ->update(['num' => $params['num']]);
  172. return true;
  173. }
  174. // if($params['good_id'] == 1561){
  175. // return false;
  176. // }else{
  177. // return '更新购物车成功';
  178. // }
  179. }
  180. public function getStoreIdByMarketId($params)
  181. {
  182. $res = [
  183. 'id' => 7,
  184. 'item' => 1,
  185. 'item_text' => 'page',
  186. 'logo' => 'http://lanzutest.lanzulive.com/attachment/images/2/2020/08/PY55Y3Mz17yJo17rv1Z7vImX1V5159.jpg',
  187. 'redirect_url' => '/zh_cjdianc/pages/takeout/takeoutindex?storeid=123',
  188. 'src' => '/zh_cjdianc/pages/takeout/takeoutindex?storeid=123',
  189. 'src2' => '/zh_cjdianc/pages/takeout/takeoutindex?storeid=123',
  190. ];
  191. return $res;
  192. }
  193. public function ssdbPurchaseRecord($params)
  194. {
  195. $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
  196. $ssdb->exec('set', SsdbKeysPrefix::PURCHASE_RECORD. date('Ymd') .'_'.$params['user_id'].'_'.$params['good_id'], $params['order_id']);
  197. $ssdb->exec('expire', SsdbKeysPrefix::PURCHASE_RECORD. date('Ymd') .'_'.$params['user_id'].'_'.$params['good_id'],60);
  198. }
  199. public function test($params)
  200. {
  201. $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
  202. //添加领取记录到ssdb
  203. $data = [
  204. '620',1561,
  205. ];
  206. $test = $ssdb->exec('multi_hset', SsdbKeysPrefix::PURCHASE_RECORD. date('Ymd') .'_620', $data);
  207. return $test;
  208. }
  209. }