GoodsController.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Address;
  4. use App\Models\DwbsUser;
  5. use App\Models\Inventory;
  6. use App\Models\User;
  7. use App\Models\See;
  8. use App\Models\Goods;
  9. use App\Models\GoodSku;
  10. use App\Models\ShopCar;
  11. use Carbon\Carbon;
  12. use Illuminate\Http\Request;
  13. use Illuminate\Support\Facades\Auth;
  14. use Illuminate\Support\Facades\DB;
  15. use Illuminate\Support\Facades\Validator;
  16. class GoodsController extends Controller
  17. {
  18. //获取商品详情
  19. public function getGoodsInfos(Request $request){
  20. $goods_id=$request->input('goods_id');
  21. $store_id=$request->input('store_id');
  22. $goods=Goods::where('id',$goods_id)->first();
  23. $inventory=Inventory::where('store_id',$store_id)->pluck('num',DB::raw("CONCAT(store_id,'_',goods_id,'_',sku_id)"))->toArray();
  24. if(empty($goods)){
  25. return $this->error('450001','没有获取到商品信息');
  26. }
  27. $time=Carbon::now()->subMinute(10);
  28. if($request->has('sku_id')){
  29. $sku_id=$request->input('sku_id');
  30. $goods->goods_sku=GoodSku::where('id',$sku_id)->first();
  31. $goods->type=1;//商品详情(单一规格)
  32. $is_see=See::where('store_id',$store_id)->where('goods_id',$goods_id)
  33. ->where('user_id',Auth::user()->id)->where('created_at','>',$time)->doesntExist();
  34. if($is_see){
  35. See::create([
  36. 'user_id'=>Auth::user()->id,
  37. 'store_id'=>$store_id,
  38. 'goods_id'=>$goods_id,
  39. 'size'=>1,
  40. 'type'=>2
  41. ]);
  42. }
  43. }else{
  44. $sku=GoodSku::where('goods_id',$goods_id)->groupBy('type')->pluck('type');
  45. $size=[];
  46. foreach($sku as $key=>$val){
  47. $sizes=GoodSku::where('goods_id',$goods_id)->where('type',$val)->orderBy('sort')->get();
  48. foreach($sizes as $k=>$v){
  49. $size[$val][$v->size]=$v->id;
  50. }
  51. }
  52. $goods->sku=$sku;
  53. $goods->size=$size;
  54. $goods->type=2;//商品详情(全规格)
  55. $is_see=See::where('store_id',$store_id)->where('goods_id',$goods_id)
  56. ->where('user_id',Auth::user()->id)->where('created_at','>',$time)->doesntExist();
  57. if($is_see){
  58. See::create([
  59. 'user_id'=>Auth::user()->id,
  60. 'store_id'=>$store_id,
  61. 'goods_id'=>$goods_id
  62. ]);
  63. }
  64. }
  65. return $this->success($goods);
  66. }
  67. //获取商品详情
  68. public function getGoodsInfo(Request $request){
  69. $goods_id=$request->input('goods_id');
  70. $store_id=$request->input('store_id');
  71. $goods=Goods::where('id',$goods_id)->first();
  72. $inventory=Inventory::where('store_id',$store_id)->pluck('num',DB::raw("CONCAT(store_id,'_',goods_id,'_',sku_id)"))->toArray();
  73. if(empty($goods)){
  74. return $this->error('450001','没有获取到商品信息');
  75. }
  76. $sku=GoodSku::where('goods_id',$goods_id)->groupBy('type')->pluck('type');
  77. $size=[];
  78. foreach($sku as $key=>$val){
  79. $sizes=GoodSku::where('goods_id',$goods_id)->where('type',$val)->orderBy('sort')->get();
  80. foreach($sizes as $k=>$v){
  81. $size[$val][$v->size]['size']=$v->size;
  82. $size[$val][$v->size]['id']=$v->id;
  83. if(empty($inventory[$store_id.'_'.$goods_id.'_'.$v->id])){
  84. $size[$val][$v->size]['num']=0;
  85. }else{
  86. $size[$val][$v->size]['num']=$inventory[$store_id.'_'.$goods_id.'_'.$v->id];
  87. }
  88. }
  89. }
  90. $goods->sku=$sku;
  91. $goods->size=$size;
  92. $time=Carbon::now()->subMinute(10);
  93. $is_see=See::where('store_id',$store_id)->where('goods_id',$goods_id)
  94. ->where('user_id',Auth::user()->id)->where('created_at','>',$time)->doesntExist();
  95. if($is_see){
  96. See::create([
  97. 'user_id'=>Auth::user()->id,
  98. 'store_id'=>$store_id,
  99. 'goods_id'=>$goods_id
  100. ]);
  101. }
  102. return $this->success($goods);
  103. }
  104. //获取商品详情
  105. // public function getGoodsSkuInfo(Request $request){
  106. // $user=Auth::user();
  107. // $store_id=$request->input('store_id');
  108. // $sku_id=$request->input('sku_id');
  109. // $goods_sku=GoodSku::with('goods')->where('id',$sku_id)->first();
  110. // if(empty($user->store_id)){
  111. // if(Store::find($store_id)){
  112. // User::where('id',$user->id)->update(['store_id'=>$store_id]);
  113. // Scan::create([
  114. // 'user_id'=>$user->id,
  115. // 'store_id'=>$store_id,
  116. // 'goods_id'=>$goods_sku->goods->id,
  117. // 'size'=>$goods_sku->size,
  118. // 'type'=>$goods_sku->type,
  119. // 'is_store'=>1
  120. // ]);
  121. // $user=User::find($user->id);
  122. // }else{
  123. // return $this->error('450001','用户没有绑定店铺信息');
  124. // }
  125. // }
  126. //
  127. // if(empty($goods_sku)){
  128. // return $this->error('450001','没有获取到商品信息');
  129. // }
  130. // See::create([
  131. // 'user_id'=>$user->id,
  132. // 'store_id'=>$user->store_id,
  133. // 'goods_id'=>$goods_sku->goods->id,
  134. // 'size'=>$goods_sku->size,
  135. // 'type'=>$goods_sku->type
  136. // ]);
  137. // return $this->success($goods_sku);
  138. // }
  139. //添加购物车
  140. public function addShopCar(Request $request){
  141. $user_id=Auth::user()->id;
  142. $user=User::where('id',$user_id)->first();
  143. if(empty($user->phone)){
  144. return $this->error('450001','客户没有绑定手机号');
  145. }
  146. $dwbsUser = DwbsUser::where('mobile',$user->phone)->first();
  147. if($dwbsUser){
  148. return $this->error('450001','代理不能添加购物车');
  149. }
  150. $arr=$request->input('arr');
  151. DB::beginTransaction();
  152. try {
  153. foreach ($arr as $key => $val) {
  154. $sku = GoodSku::with(['goods'])->where('id', $val[0])->first();
  155. $where['user_id'] = $user_id;
  156. $where['goods_id'] = $sku->goods_id;
  157. $where['sku_id'] = $val[0];
  158. $where['type'] = $sku->type;
  159. $where['size'] = $sku->size;
  160. $skuInfo = ShopCar::where($where)->first();
  161. if($val[1]>0){
  162. if ($skuInfo) {
  163. $skuInfo->price = $sku->goods->price;
  164. $skuInfo->num += $val[1];
  165. $skuInfo->amount = $skuInfo->price * $skuInfo->num;
  166. $skuInfo->is_true = 1;
  167. $skuInfo->save();
  168. } else {
  169. $amount = $sku->goods->price * $val[1];
  170. $flight = new ShopCar();
  171. $flight->user_id = $user_id;
  172. $flight->goods_id = $sku->goods_id;
  173. $flight->price = $sku->goods->price;
  174. $flight->num = $val[1];
  175. $flight->sku_id = $val[0];
  176. $flight->amount = $amount;
  177. $flight->size = $sku->size;
  178. $flight->type = $sku->type;
  179. $flight->is_true = 1;
  180. $flight->save();
  181. }
  182. }
  183. }
  184. DB::commit();
  185. return $this->success([]);
  186. }catch (\Exception $e){
  187. DB::rollBack();
  188. return $this->error();
  189. }
  190. }
  191. //获取用户购物车
  192. public function getShopCar()
  193. {
  194. $user=Auth::user();
  195. $goodsIds=ShopCar::where('user_id',$user->id)->groupBy('goods_id')->pluck('goods_id');
  196. $goods=[];
  197. foreach($goodsIds as $key=>$val){
  198. $goods[$key]=Goods::where('id',$val)->first();
  199. $goods[$key]->sku=ShopCar::where('user_id',$user->id)->where('goods_id',$val)->get();
  200. }
  201. return $this->success($goods);
  202. }
  203. //选中| 不选 购物车
  204. public function checkedShopCar(Request $request)
  205. {
  206. $ids=$request->input('ids');
  207. $is_true=$request->input('type') ? 1:0;
  208. $res=ShopCar::whereIn('id',$ids)->update(['is_true'=>$is_true]);
  209. if($res){
  210. return $this->success([]);
  211. }else{
  212. return $this->error();
  213. }
  214. }
  215. //删除购物车商品
  216. public function destroyShopCar(Request $request)
  217. {
  218. $res=ShopCar::where('goods_id',$request->input('goods_id'))->delete();
  219. if($res){
  220. return $this->success([]);
  221. }else{
  222. return $this->error();
  223. }
  224. }
  225. //删除购物车商品规格
  226. public function destroyShopCarSku(Request $request)
  227. {
  228. $res=ShopCar::where('id',$request->input('shopCar_id'))->delete();
  229. if($res){
  230. return $this->success([]);
  231. }else{
  232. return $this->error();
  233. }
  234. }
  235. //购物车商品数量变更
  236. public function updateShopCarNum(Request $request)
  237. {
  238. $shopCar_id=$request->input('shopCar_id');
  239. $num=$request->input('num');
  240. $shopCar=ShopCar::with(['goods'])->where('id',$shopCar_id)->first();
  241. if(empty($shopCar)){
  242. return $this->error('450001','购物车数据有误');
  243. }
  244. $shopCar->num = $num;
  245. $shopCar->price= $shopCar->goods->price;
  246. $shopCar->amount=$shopCar->num * $shopCar->price;
  247. $res=$shopCar->save();
  248. if($res){
  249. return $this->success([]);
  250. }else{
  251. return $this->error();
  252. }
  253. }
  254. //获取所有收货地址
  255. public function getAllAddress()
  256. {
  257. $user=Auth::user();
  258. $address=Address::where('user_id',$user->id)->orderByDesc('is_default')->orderByDesc('created_at')->get();
  259. return $this->success($address);
  260. }
  261. //添加收货地址
  262. public function addAddress(Request $request)
  263. {
  264. $user=Auth::user();
  265. $input=$request->all();
  266. $rules=[
  267. 'name'=>'required|max:32',
  268. 'phone'=>'required|regex:/^1[3456789][0-9]{9}$/',
  269. 'province'=>'required',
  270. 'city'=>'required',
  271. 'area'=>'required',
  272. 'address'=>'required|max:255',
  273. ];
  274. $message=[
  275. 'name.required'=>'收货人姓名不能为空.',
  276. 'name.max'=>'收货人姓名不能大于32个字符.',
  277. 'phone.required'=>'手机号不能为空.',
  278. 'phone.regex'=>'手机号格式有误.',
  279. 'province.required'=>'省不能为空.',
  280. 'city.required'=>'市不能为空.',
  281. 'area.required'=>'区/县不能为空.',
  282. 'address.required'=>'详细地址不能为空.',
  283. 'address.max'=>'详细地址不能大于255个字符.'
  284. ];
  285. $validator = Validator::make($input,$rules,$message);
  286. if($validator->fails()){
  287. return $this->error('400013',$validator->errors()->first());
  288. }
  289. $count=Address::where('user_id',$user->id)->count();
  290. if($count>=10){
  291. return $this->error('450001','用户地址数量已达上限');
  292. }
  293. try{
  294. DB::transaction(function()use($input,$user){
  295. if($input['is_default']==1){
  296. Address::where('user_id',$user->id)->update(['is_default'=>0]);
  297. }
  298. Address::create([
  299. 'name'=>$input['name'],
  300. 'phone'=>$input['phone'],
  301. 'user_id'=>$user->id,
  302. 'province'=>$input['province'],
  303. 'city'=>$input['city'],
  304. 'area'=>$input['area'],
  305. 'address'=>$input['address'],
  306. 'is_default'=>$input['is_default']??0,
  307. 'remark'=>$input['remark'],
  308. ]);
  309. },5);
  310. return $this->success([]);
  311. }catch(\Exception $e){
  312. return $this->error($e->getMessage());
  313. }
  314. }
  315. //修改收货地址
  316. public function updateAddress(Request $request)
  317. {
  318. $input=$request->all();
  319. $rules=[
  320. 'name'=>'required|max:32',
  321. 'phone'=>'required|regex:/^1[3456789][0-9]{9}$/',
  322. 'province'=>'required',
  323. 'city'=>'required',
  324. 'area'=>'required',
  325. 'address'=>'required|max:255',
  326. ];
  327. $message=[
  328. 'name.required'=>'收货人姓名不能为空.',
  329. 'name.max'=>'收货人姓名不能大于32个字符.',
  330. 'phone.required'=>'手机号不能为空.',
  331. 'phone.regex'=>'手机号格式有误.',
  332. 'province.required'=>'省不能为空.',
  333. 'city.required'=>'市不能为空.',
  334. 'area.required'=>'区/县不能为空.',
  335. 'address.required'=>'详细地址不能为空.',
  336. 'address.max'=>'详细地址不能大于255个字符.'
  337. ];
  338. $validator = Validator::make($input,$rules,$message);
  339. if($validator->fails()){
  340. return $this->error('400013',$validator->errors()->first());
  341. }
  342. try{
  343. DB::transaction(function()use($input){
  344. $address_id=$input['address_id'];
  345. $address=Address::where('id',$address_id)->first();
  346. if($input['is_default']==1){
  347. Address::where('user_id',$address->user_id)->update(['is_default'=>0]);
  348. }
  349. Address::where('id',$address_id)->update([
  350. 'name'=>$input['name'],
  351. 'phone'=>$input['phone'],
  352. 'province'=>$input['province'],
  353. 'city'=>$input['city'],
  354. 'area'=>$input['area'],
  355. 'address'=>$input['address'],
  356. 'is_default'=>$input['is_default'],
  357. 'remark'=>$input['remark'],
  358. ]);
  359. },5);
  360. return $this->success([]);
  361. }catch(\Exception $e){
  362. return $this->error($e->getMessage());
  363. }
  364. }
  365. //删除收货地址
  366. public function destroyAddress(Request $request)
  367. {
  368. $res=Address::where('id',$request->input('id'))->delete();
  369. if($res){
  370. return $this->success([]);
  371. }else{
  372. return $this->error();
  373. }
  374. }
  375. //设为 | 取消 默认地址
  376. public function setDefaultAddress(Request $request)
  377. {
  378. $id=$request->input('id');
  379. $address=Address::where('id',$id)->first();
  380. try{
  381. DB::transaction(function()use($address){
  382. if($address->is_default == 1) {
  383. $address->is_default = 0;
  384. $address->save();
  385. }else{
  386. $address->is_default = 1;
  387. $address->save();
  388. Address::where('user_id',$address->user_id)->whereNotIn('id',[$address->id])->update(['is_default'=>0]);
  389. }
  390. },5);
  391. return $this->success([]);
  392. }catch(\Exception $e){
  393. return $this->error($e->getMessage());
  394. }
  395. }
  396. }