GoodsController.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  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. //<<<<<<< HEAD
  66. $path = $request->file('file')->store('/public/goods');
  67. $url = Storage::url($path);
  68. if($url){
  69. return $this->success($url);
  70. //=======
  71. // $path = $request->file('file')->store('goods');
  72. // $url = Storage::url($path);
  73. // if($url){
  74. // return $this->success($url);
  75. //>>>>>>> 9aa477479386789a8615d89285e74706ec72fbab
  76. }
  77. return $this->error();
  78. }
  79. //添加商品
  80. public function uploadGoods(Request $request){
  81. $input=$request->all();
  82. $rules=[
  83. 'name'=>'required|max:32','img_url'=>'required',
  84. 'banner_url'=>'required','content'=>'required',
  85. 'goodsSku'=>'required','tagList'=>'required'
  86. ];
  87. $messages=[
  88. 'name.required'=>'商品名称不能为空.','name.max'=>'商品名称长度应小于32个字符.',
  89. 'img_url.required'=>'请上传商品图片.','banner_url.required'=>'请上传轮播图片.',
  90. 'content.required'=>'商品详情不能为空.','goodsSku.required'=>'请添加商品规格.',
  91. 'tagList.required'=>'请设置商品规格.'
  92. ];
  93. $validator = Validator::make($input, $rules, $messages);
  94. if($validator->fails()){
  95. return $this->error('400013',$validator->errors()->first());
  96. }
  97. DB::beginTransaction();
  98. try{
  99. $goodsId=$this->goodsinfo->createGoodsInfo($input);
  100. $this->goodsinfo->createGoodsSpecInfo($input['tagList'],$goodsId);
  101. $this->goodsinfo->createGoodsSkuInfo($input['goodsSku'],$goodsId);
  102. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')添加商品'.$input['name'].'(id='.$goodsId.')成功');
  103. DB::commit();
  104. return $this->success([]);
  105. }catch(Exception $e) {
  106. DB::rollBack();
  107. return $this->error();
  108. }
  109. }
  110. //修改商品
  111. public function updateGoods(Request $request){
  112. $input=$request->all();
  113. $goodsId=$input['id'];
  114. $rules=[
  115. 'name'=>'required|max:32','img_url'=>'required',
  116. 'banner_url'=>'required','content'=>'required',
  117. 'goodsSku'=>'required','tagList'=>'required'
  118. ];
  119. $messages=[
  120. 'name.required'=>'商品名称不能为空.','name.max'=>'商品名称长度应小于32个字符.',
  121. 'img_url.required'=>'请上传商品图片.','banner_url.required'=>'请上传轮播图片.',
  122. 'content.required'=>'商品详情不能为空.','goodsSku.required'=>'请添加商品规格.',
  123. 'tagList.required'=>'请设置商品规格.'
  124. ];
  125. $validator = Validator::make($input, $rules, $messages);
  126. if($validator->fails()){
  127. return $this->error('400013',$validator->errors()->first());
  128. }
  129. try{
  130. DB::transaction(function () use ($input,$goodsId){
  131. GoodsSpec::where('goods_id',$goodsId)->delete();
  132. GoodsSku::where('goods_id',$goodsId)->delete();
  133. GoodsSkuPrice::where('goods_id',$goodsId)->delete();
  134. $this->goodsinfo->updateGoodsInfo($input);
  135. $this->goodsinfo->createGoodsSpecInfo($input['tagList'],$input['id']);
  136. $this->goodsinfo->createGoodsSkuInfo($input['goodsSku'],$input['id']);
  137. }, 5);
  138. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')修改商品'.$input['name'].'(id='.$goodsId.')成功');
  139. DB::commit();
  140. return $this->success([]);
  141. }catch(Exception $e) {
  142. DB::rollBack();
  143. return $this->error();
  144. }
  145. }
  146. /* 商品上架/下架 */
  147. public function shelvedGoods(Request $request){
  148. $goods=Goods::find($request->post('id'));
  149. $goods->status=($goods->status==0)?'1':'0';
  150. $row=$goods->save();
  151. if($row){
  152. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')下架商品'.$goods->name.'(id='.$goods->id.')成功');
  153. return $this->success([]);
  154. }
  155. return $this->error();
  156. }
  157. //删除商品
  158. public function destoryGoods(Request $request){
  159. $goods=Goods::find($request->post('id'));
  160. $row=$goods->delete();
  161. if($row){
  162. Log::info('管理员:'.Auth::user()->name.'(id='.Auth::user()->id.')删除商品'.$goods->name.'(id='.$goods->id.')成功');
  163. return $this->success([]);
  164. }
  165. return $this->error();
  166. }
  167. /*商品信息(根据用户等级获取对应商品规格的价格)*/
  168. public function getGoodsInfo(Request $request){
  169. $input=$request->all();
  170. $rules=[
  171. 'mobile'=>[
  172. 'required',
  173. 'regex:/^1[345789][0-9]{9}$/'
  174. ],
  175. ];
  176. $uuu=new User();
  177. $validator = $uuu->validator($input,$rules);
  178. if($validator->fails()){
  179. return $this->error('400013',$validator->errors()->first());
  180. }
  181. $user=User::where('mobile',$input['mobile'])->first();
  182. if(empty($user)){
  183. return $this->error('400135','代理信息不存在');
  184. }
  185. $goods=Goods::with([
  186. 'goodsskuprice:id,goods_id,sku_id,user_level,price',
  187. 'goodsskuprice' => function ($query) use ($user){
  188. $query->where('user_level', '=', $user->level);
  189. }])
  190. ->where('status',1)
  191. ->get()->toArray();
  192. foreach($goods as $key=>$val){
  193. foreach($val['goodsskuprice'] as $k=>$v){
  194. $goods[$key]['goodsskuprice'][$k]['sku']=$this->goodsinfo->getGoodsSku($v['sku_id']);
  195. }
  196. }
  197. $data['goods']=$goods;
  198. $data['user']=$user->toArray();
  199. return $this->success($data);
  200. }
  201. }