ShopController.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Models\Goods;
  5. use App\Http\Models\GoodsLabel;
  6. use App\Http\Models\Label;
  7. use DB;
  8. use Exception;
  9. use Illuminate\Http\Request;
  10. use Log;
  11. use Redirect;
  12. use Response;
  13. use Session;
  14. /**
  15. * 商店控制器
  16. *
  17. * Class ShopController
  18. *
  19. * @package App\Http\Controllers\Controller
  20. */
  21. class ShopController extends Controller {
  22. // 商品列表
  23. public function goodsList(Request $request) {
  24. $type = $request->input('type');
  25. $status = $request->input('status');
  26. $query = Goods::query();
  27. if(isset($type)){
  28. $query->whereType($type);
  29. }
  30. if(isset($status)){
  31. $query->whereStatus($status);
  32. }
  33. $view['goodsList'] = $query->orderBy('status', 'desc')->paginate(10)->appends($request->except('page'));
  34. return Response::view('admin.shop.goodsList', $view);
  35. }
  36. // 添加商品
  37. public function addGoods(Request $request) {
  38. if($request->isMethod('POST')){
  39. $this->validate($request, [
  40. 'name' => 'required',
  41. 'traffic' => 'required_unless:type,3|integer|min:1024|max:10240000|nullable',
  42. 'price' => 'required|numeric|min:0',
  43. 'type' => 'required',
  44. 'days' => 'required|integer',
  45. ], [
  46. 'name.required' => '请填入名称',
  47. 'traffic.required_unless' => '请填入流量',
  48. 'traffic.integer' => '内含流量必须是整数值',
  49. 'traffic.min' => '内含流量不能低于1MB',
  50. 'traffic.max' => '内含流量不能超过10TB',
  51. 'price.required' => '请填入价格',
  52. 'price.numeric' => '价格不合法',
  53. 'price.min' => '价格最低0',
  54. 'type.required' => '请选择类型',
  55. 'days.required' => '请填入有效期',
  56. 'days.integer' => '有效期不合法',
  57. ]);
  58. $type = $request->input('type');
  59. $price = $request->input('price');
  60. $renew = $request->input('renew');
  61. $days = $request->input('days');
  62. // 套餐必须有价格
  63. if($type == 2 && $price <= 0){
  64. return Redirect::back()->withInput()->withErrors('套餐价格必须大于0');
  65. }
  66. if($renew < 0){
  67. return Redirect::back()->withInput()->withErrors('流量重置价格必须大于0');
  68. }
  69. // 套餐有效天数必须大于30天
  70. if($type == 2 && $days < 1){
  71. return Redirect::back()->withInput()->withErrors('套餐有效天数必须不能少于1天');
  72. }
  73. // 商品LOGO
  74. if($request->hasFile('logo')){
  75. $file = $request->file('logo');
  76. $fileType = $file->getClientOriginalExtension();
  77. // 验证文件合法性
  78. if(!in_array($fileType, ['jpg', 'png', 'jpeg', 'bmp'])){
  79. return Redirect::back()->withInput()->withErrors('LOGO不合法');
  80. }
  81. $logoName = date('YmdHis').mt_rand(1000, 2000).'.'.$fileType;
  82. $move = $file->move(base_path().'/public/upload/image/', $logoName);
  83. $logo = $move? '/upload/image/'.$logoName : '';
  84. }else{
  85. $logo = '';
  86. }
  87. DB::beginTransaction();
  88. try{
  89. $goods = new Goods();
  90. $goods->name = $request->input('name');
  91. $goods->info = $request->input('info');
  92. $goods->desc = $request->input('desc');
  93. $goods->logo = $logo;
  94. $goods->traffic = $request->input('traffic');
  95. $goods->price = round($price, 2);
  96. $goods->renew = round($renew, 2);
  97. $goods->type = $type;
  98. $goods->days = $days;
  99. $goods->color = $request->input('color');
  100. $goods->sort = $request->input('sort');
  101. $goods->is_hot = $request->input('is_hot');
  102. $goods->limit_num = $request->input('limit_num');
  103. $goods->status = $request->input('status');
  104. $goods->save();
  105. // 生成SKU
  106. $goods->sku = 'S0000'.$goods->id;
  107. $goods->save();
  108. // 生成商品标签
  109. $labels = $request->input('labels');
  110. if(!empty($labels)){
  111. foreach($labels as $label){
  112. $goodsLabel = new GoodsLabel();
  113. $goodsLabel->goods_id = $goods->id;
  114. $goodsLabel->label_id = $label;
  115. $goodsLabel->save();
  116. }
  117. }
  118. DB::commit();
  119. return Redirect::back()->with('successMsg', '添加成功');
  120. }catch(Exception $e){
  121. DB::rollBack();
  122. Log::info($e);
  123. return Redirect::back()->withInput()->withErrors('添加失败');
  124. }
  125. }else{
  126. $view['label_list'] = Label::query()->orderBy('sort', 'desc')->orderBy('id', 'asc')->get();
  127. return Response::view('admin.shop.addGoods', $view);
  128. }
  129. }
  130. // 编辑商品
  131. public function editGoods(Request $request, $id) {
  132. if($request->isMethod('POST')){
  133. $name = $request->input('name');
  134. $info = $request->input('info');
  135. $desc = $request->input('desc');
  136. $price = round($request->input('price'), 2);
  137. $renew = round($request->input('renew'), 2);
  138. $labels = $request->input('labels');
  139. $color = $request->input('color');
  140. $sort = $request->input('sort');
  141. $is_hot = $request->input('is_hot');
  142. $limit_num = $request->input('limit_num');
  143. $status = $request->input('status');
  144. $goods = Goods::query()->whereId($id)->first();
  145. if(!$goods){
  146. Session::flash('errorMsg', '商品不存在');
  147. return Redirect::back();
  148. }
  149. if(empty($name)){
  150. Session::flash('errorMsg', '请填写完整');
  151. return Redirect::back()->withInput();
  152. }
  153. // 套餐必须有价格
  154. if($goods->type == 2 && $price <= 0){
  155. Session::flash('errorMsg', '套餐价格必须大于0');
  156. return Redirect::back()->withInput();
  157. }
  158. if($renew < 0){
  159. Session::flash('errorMsg', '流量重置价格必须大于0');
  160. return Redirect::back()->withInput();
  161. }
  162. // 商品LOGO
  163. $logo = '';
  164. if($request->hasFile('logo')){
  165. $file = $request->file('logo');
  166. $fileType = $file->getClientOriginalExtension();
  167. // 验证文件合法性
  168. if(!in_array($fileType, ['jpg', 'png', 'jpeg', 'bmp'])){
  169. Session::flash('errorMsg', 'LOGO不合法');
  170. return Redirect::back()->withInput();
  171. }
  172. $logoName = date('YmdHis').mt_rand(1000, 2000).'.'.$fileType;
  173. $move = $file->move(base_path().'/public/upload/image/', $logoName);
  174. $logo = $move? '/upload/image/'.$logoName : '';
  175. }
  176. DB::beginTransaction();
  177. try{
  178. $data = [
  179. 'name' => $name,
  180. 'info' => $info,
  181. 'desc' => $desc,
  182. 'price' => $price * 100,
  183. 'renew' => $renew * 100,
  184. 'sort' => $sort,
  185. 'color' => $color,
  186. 'is_hot' => $is_hot,
  187. 'limit_num' => $limit_num,
  188. 'status' => $status
  189. ];
  190. if($logo){
  191. $data['logo'] = $logo;
  192. }
  193. Goods::query()->whereId($id)->update($data);
  194. // 先删除该商品所有的标签
  195. GoodsLabel::query()->whereGoodsId($id)->delete();
  196. // 生成商品标签
  197. if(!empty($labels)){
  198. foreach($labels as $label){
  199. $goodsLabel = new GoodsLabel();
  200. $goodsLabel->goods_id = $id;
  201. $goodsLabel->label_id = $label;
  202. $goodsLabel->save();
  203. }
  204. }
  205. Session::flash('successMsg', '编辑成功');
  206. DB::commit();
  207. }catch(Exception $e){
  208. Session::flash('errorMsg', '编辑失败');
  209. DB::rollBack();
  210. }
  211. return Redirect::to('shop/editGoods/'.$id);
  212. }else{
  213. $goods = Goods::query()->with(['label'])->whereId($id)->first();
  214. if($goods){
  215. $label = [];
  216. foreach($goods->label as $vo){
  217. $label[] = $vo->label_id;
  218. }
  219. $goods->labels = $label;
  220. }
  221. $view['goods'] = $goods;
  222. $view['label_list'] = Label::query()->orderBy('sort', 'desc')->orderBy('id', 'asc')->get();
  223. return Response::view('admin.shop.editGoods', $view);
  224. }
  225. }
  226. // 删除商品
  227. public function delGoods(Request $request) {
  228. Goods::query()->whereId($request->input('id'))->delete();
  229. return Response::json(['status' => 'success', 'data' => '', 'message' => '删除成功']);
  230. }
  231. }