GoodsController.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Models\User;
  5. use App\Models\Goods;
  6. use App\Models\GoodsSku;
  7. use App\Models\GoodsSpec;
  8. use App\Models\GoodsSkuPrice;
  9. use App\Custom\GoodsInfo;
  10. use Illuminate\Support\Facades\Log;
  11. use Illuminate\Support\Facades\Auth;
  12. use Illuminate\Support\Facades\DB;
  13. use Illuminate\Support\Facades\Validator;
  14. use Illuminate\Support\Facades\Storage;
  15. use Illuminate\Database\Eloquent\Builder;
  16. use Illuminate\Support\Facades\Redis;
  17. use \Exception;
  18. class GoodsController extends Controller
  19. {
  20. public function __construct()
  21. {
  22. $this->goodsinfo=new GoodsInfo;
  23. }
  24. public function getGoodsList(Request $request){
  25. $input=$request->all();
  26. $page_size=$input['page_size'];
  27. $page_index=$input['page_index'];
  28. $num = ($page_index - 1) * $page_size;
  29. $search_name=$input['search_name'];
  30. $where=[];
  31. if($input['status']=='0' || $input['status']=='1'){
  32. $where['status']=$input['status'];
  33. }
  34. $count=Goods::where('name', 'like', '%' . $search_name . '%')
  35. ->where($where)
  36. ->count();
  37. if($count==0){
  38. $this->error('400001','没有数据');
  39. }
  40. $list = Goods::where('name', 'like', '%' . $search_name . '%')
  41. ->where($where)
  42. ->orderBy('id', 'desc')
  43. ->skip($num)->take($page_size)
  44. ->get();
  45. if(empty($list)){
  46. return $this->error('400002','没有获取到数据');
  47. }
  48. return $this->success_list($list,'success',$count);
  49. }
  50. //获取商品详情
  51. public function getGoodsDetails(Request $request){
  52. $goodsId=$request->id;
  53. $goods = Goods::find($goodsId);
  54. /*获取商品规格组合*/
  55. $goods['spec']=$this->goodsinfo->getGoodsSpec($goodsId);
  56. /*获取商品规格组合价格*/
  57. $goods['sku']=$this->goodsinfo->getGoodsSkuPrice($goodsId);
  58. if($goods) {
  59. return $this->success($goods);
  60. }
  61. return $this->error();
  62. }
  63. //上传图片
  64. public function uploadGoodsImage(Request $request){
  65. $path = $request->file('file')->store('/public/goods');
  66. $url = Storage::url($path);
  67. if($url){
  68. return $this->success($url);
  69. }
  70. return $this->error();
  71. }
  72. //添加商品
  73. public function uploadGoods(Request $request){
  74. $input=$request->all();
  75. $rules=[
  76. 'name'=>'required|max:32','img_url'=>'required',
  77. 'banner_url'=>'required','content'=>'required',
  78. 'goodsSku'=>'required','tagList'=>'required'
  79. ];
  80. $messages=[
  81. 'name.required'=>'商品名称不能为空.','name.max'=>'商品名称长度应小于32个字符.',
  82. 'img_url.required'=>'请上传商品图片.','banner_url.required'=>'请上传轮播图片.',
  83. 'content.required'=>'商品详情不能为空.','goodsSku.required'=>'请添加商品规格.',
  84. 'tagList.required'=>'请设置商品规格.'
  85. ];
  86. $validator = Validator::make($input, $rules, $messages);
  87. if($validator->fails()){
  88. return $this->error('400013',$validator->errors()->first());
  89. }
  90. DB::beginTransaction();
  91. try{
  92. $goodsId=$this->goodsinfo->createGoodsInfo($input);
  93. $this->goodsinfo->createGoodsSpecInfo($input['tagList'],$goodsId);
  94. $this->goodsinfo->createGoodsSkuInfo($input['goodsSku'],$goodsId);
  95. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')添加商品'.$input['name'].'(id='.$goodsId.')成功');
  96. DB::commit();
  97. return $this->success([]);
  98. }catch(Exception $e) {
  99. DB::rollBack();
  100. return $this->error();
  101. }
  102. }
  103. //修改商品
  104. public function updateGoods(Request $request){
  105. $input=$request->all();
  106. $goodsId=$input['id'];
  107. $rules=[
  108. 'name'=>'required|max:32','img_url'=>'required',
  109. 'banner_url'=>'required','content'=>'required',
  110. 'goodsSku'=>'required','tagList'=>'required'
  111. ];
  112. $messages=[
  113. 'name.required'=>'商品名称不能为空.','name.max'=>'商品名称长度应小于32个字符.',
  114. 'img_url.required'=>'请上传商品图片.','banner_url.required'=>'请上传轮播图片.',
  115. 'content.required'=>'商品详情不能为空.','goodsSku.required'=>'请添加商品规格.',
  116. 'tagList.required'=>'请设置商品规格.'
  117. ];
  118. $validator = Validator::make($input, $rules, $messages);
  119. if($validator->fails()){
  120. return $this->error('400013',$validator->errors()->first());
  121. }
  122. try{
  123. DB::transaction(function () use ($input,$goodsId){
  124. GoodsSpec::where('goods_id',$goodsId)->delete();
  125. GoodsSku::where('goods_id',$goodsId)->delete();
  126. GoodsSkuPrice::where('goods_id',$goodsId)->delete();
  127. $this->goodsinfo->updateGoodsInfo($input);
  128. $this->goodsinfo->createGoodsSpecInfo($input['tagList'],$input['id']);
  129. $this->goodsinfo->createGoodsSkuInfo($input['goodsSku'],$input['id']);
  130. }, 5);
  131. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')修改商品'.$input['name'].'(id='.$goodsId.')成功');
  132. DB::commit();
  133. return $this->success([]);
  134. }catch(Exception $e) {
  135. DB::rollBack();
  136. return $this->error();
  137. }
  138. }
  139. /* 商品上架/下架 */
  140. public function shelvedGoods(Request $request){
  141. $goods=Goods::find($request->post('id'));
  142. $goods->status=($goods->status==0)?'1':'0';
  143. $row=$goods->save();
  144. if($row){
  145. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')下架商品'.$goods->name.'(id='.$goods->id.')成功');
  146. return $this->success([]);
  147. }
  148. return $this->error();
  149. }
  150. //删除商品
  151. public function destoryGoods(Request $request){
  152. $goods=Goods::find($request->post('id'));
  153. $row=$goods->delete();
  154. if($row){
  155. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')删除商品'.$goods->name.'(id='.$goods->id.')成功');
  156. return $this->success([]);
  157. }
  158. return $this->error();
  159. }
  160. /*商品信息(根据用户等级获取对应商品规格的价格)*/
  161. public function getGoodsInfo(Request $request){
  162. $input=$request->all();
  163. $rules=[
  164. 'mobile'=>[
  165. 'required',
  166. 'regex:/^1[345789][0-9]{9}$/'
  167. ],
  168. ];
  169. $uuu=new User();
  170. $validator = $uuu->validator($input,$rules);
  171. if($validator->fails()){
  172. return $this->error('400013',$validator->errors()->first());
  173. }
  174. $user=User::where('mobile',$input['mobile'])->first();
  175. if(empty($user)){
  176. return $this->error('400135','代理信息不存在');
  177. }
  178. $goods=Goods::with([
  179. 'goodsskuprice:id,goods_id,sku_id,user_level,price',
  180. 'goodsskuprice' => function ($query) use ($user){
  181. $query->where('user_level', '=', $user->level);
  182. }])
  183. ->where('status',1)
  184. ->get()->toArray();
  185. foreach($goods as $key=>$val){
  186. foreach($val['goodsskuprice'] as $k=>$v){
  187. $goods[$key]['goodsskuprice'][$k]['sku']=$this->goodsinfo->getGoodsSku($v['sku_id']);
  188. }
  189. }
  190. $data['goods']=$goods;
  191. $data['user']=$user->toArray();
  192. return $this->success($data);
  193. }
  194. }