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.

200 lines
6.9 KiB

  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 ShopCarService implements ShopCarServiceInterface
  14. {
  15. public function addShopCar($params)
  16. {
  17. //获取ssdb购买记录
  18. $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
  19. $record_exists = $ssdb->exec('get',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. if($params['money'] == 0.01){
  29. $goods_exists = ShopCar::where([
  30. ['user_id','=',$params['user_id']],
  31. ['good_id','!=',$params['good_id']],
  32. ['market_id','=',$params['market_id']],
  33. ['money','=',0.01]
  34. ])
  35. ->exists();
  36. if($goods_exists){
  37. $error = [
  38. 'error' => '一个订单只能添加一个特价商品'
  39. ];
  40. return $error;
  41. }
  42. }
  43. //获取主表商品表信息
  44. $goods = Goods::where([
  45. ['id','=',$params['good_id']],
  46. ])
  47. ->select('is_max','restrict_num','box_money','inventory','money')
  48. ->first();
  49. //获取购物车该商品购买数量
  50. $num = ShopCar::where([
  51. ['user_id', $params['user_id']],
  52. ['good_id', $params['good_id']],
  53. ])
  54. ->sum('num');
  55. //限购检验
  56. if($goods->restrict_num > 0 && $goods->restrict_num <= $num)
  57. {
  58. $error = [
  59. 'error' => '超过商品限购数量'
  60. ];
  61. return $error;
  62. }
  63. //获取规格表商品信息
  64. if($params['combination_id'] > 0)
  65. {
  66. $combination = Combination::where([
  67. ['id', '=', $params['combination_id']],
  68. ])
  69. ->select('wm_money', 'number')
  70. ->first();
  71. $inventory = $combination->number;
  72. $money = $combination->wm_money;
  73. }else{
  74. $inventory = $goods->inventory;
  75. $money = $goods->money;
  76. }
  77. //库存校验 is_max 无限库存
  78. if($goods->is_max != Goods::INVENTORY_NOLIMIT && ($num + $params['num']) > $inventory)
  79. {
  80. $error = [
  81. 'error' => '库存不足'
  82. ];
  83. return $error;
  84. }
  85. //更新购物车
  86. $exists_sql = ShopCar::where([
  87. ['user_id', '=', $params['user_id']],
  88. ['good_id', '=', $params['good_id']],
  89. ['market_id','=',$params['market_id']],
  90. ['combination_id','=', $params['combination_id']],
  91. ]);
  92. if($params['combination_id'] > 0) {
  93. $exists_sql->where('combination_id',$params['combination_id']);
  94. }
  95. $exists = $exists_sql->exists();
  96. if($exists)
  97. {
  98. $update = ShopCar::where([
  99. ['user_id', '=', $params['user_id']],
  100. ['good_id', '=', $params['good_id']],
  101. ['market_id','=',$params['market_id']],
  102. ]);
  103. if($params['combination_id'] > 0) {
  104. $update->where('combination_id',$params['combination_id']);
  105. }
  106. $update->increment('num', $params['num']);
  107. }else{
  108. $son_id = empty($params['son_id']) ? 0 : $params['son_id'];
  109. $dr_id = empty($params['dr_id']) ? 0 : $params['dr_id'];
  110. $combination_id = empty($params['combination_id']) ? 0 : $params['combination_id'];
  111. $qg_name = empty($params['qg_name']) ? ' ' : $params['qg_name'];
  112. $qg_logo = empty($params['qg_logo']) ? ' ' :$params['qg_logo'];
  113. ShopCar::insert(
  114. [
  115. 'market_id' => $params['market_id'],
  116. 'good_id' => $params['good_id'],
  117. 'store_id' => $params['store_id'],
  118. 'user_id' => $params['user_id'],
  119. 'combination_id' => $combination_id,
  120. 'num' => $params['num'],
  121. 'spec' => $params['spec'],
  122. 'son_id' => $son_id,
  123. 'dr_id' => $dr_id,
  124. 'qg_name' => $qg_name,
  125. 'qg_logo' => $qg_logo,
  126. 'money' => $money,
  127. 'box_money' => $goods->box_money,
  128. ]
  129. );
  130. }
  131. return true;
  132. // if($params['goods_id'] == 1561){
  133. // return false;
  134. // }else{
  135. // return '加入购物车成功';
  136. // }
  137. }
  138. public function updateShopCar($params)
  139. {
  140. if($params['num'] <= 0)
  141. {
  142. ShopCar::where('id',$params['id'])->delete();
  143. }else {
  144. $shop_car = ShopCar::where('id',$params['id'])
  145. ->select('good_id','user_id')
  146. ->first();
  147. //获取主表商品表信息
  148. $goods = Goods::where([
  149. ['id','=',$shop_car['good_id']],
  150. ])
  151. ->select('is_max','restrict_num','box_money','inventory','money')
  152. ->first();
  153. //获取购物车该商品购买数量
  154. $num = ShopCar::where([
  155. ['user_id', $shop_car['user_id']],
  156. ['good_id', $shop_car['good_id']],
  157. ])
  158. ->sum('num');
  159. //限购检验
  160. if($goods->restrict_num > 0 && $goods->restrict_num <= $num)
  161. {
  162. $error = [
  163. 'error' => '超过商品限购数量'
  164. ];
  165. return $error;
  166. }
  167. if ($shop_car['combination_id'] > 0)
  168. {
  169. $combination = Combination::where([
  170. ['id', '=', $shop_car['combination_id']],
  171. ])
  172. ->select('wm_money', 'number')
  173. ->first();
  174. $inventory = $combination->number;
  175. }else{
  176. $inventory = $goods->inventory;
  177. }
  178. //库存校验 is_max 无限库存
  179. if($goods->is_max != Goods::INVENTORY_NOLIMIT && $params['num'] > $inventory)
  180. {
  181. $error = [
  182. 'error' => '库存不足'
  183. ];
  184. return $error;
  185. }
  186. ShopCar::where('id',$params['id'])
  187. ->update(['num' => $params['num']]);
  188. return true;
  189. }
  190. // if($params['good_id'] == 1561){
  191. // return false;
  192. // }else{
  193. // return '更新购物车成功';
  194. // }
  195. }
  196. }