StudioGoodController.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. <?php
  2. namespace Modules\Manager\Http\Controllers;
  3. use App\Handlers\UploadFilesHandler;
  4. use App\Models\Goodattr;
  5. use App\Models\Goodtest;
  6. use App\Models\StudioGood;
  7. use App\Models\StudioGoodLog;
  8. use App\Models\User;
  9. use Carbon\Carbon;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\Auth;
  12. use Illuminate\Support\Facades\DB;
  13. use Illuminate\Support\Facades\Log;
  14. use Illuminate\Support\Facades\Validator;
  15. class StudioGoodController extends Controller
  16. {
  17. /*
  18. * 获取用户信息
  19. * */
  20. public function getgoodsinfo(Request $request){
  21. $user=User::where('mobile',$request->mobile)->first();
  22. if (!$user){
  23. return $this->error(40013,'查无此人');
  24. }
  25. if ($user->level!=3){
  26. return $this->error(40013,'当前用户不是代理公司');
  27. }
  28. $good=StudioGood::where('is_deleted',0)->get();
  29. $data['good']=$good;
  30. $data['user']=$user;
  31. return $this->success($data);
  32. }
  33. /*
  34. * 获取商品类型
  35. */
  36. public function getGoodsAttr(){
  37. $list=StudioGood::groupBy('main_attr')->pluck('main_attr');
  38. return $this->success($list);
  39. }
  40. /*
  41. * 商品列表
  42. * */
  43. public function good_list(Request $request){
  44. $page_index=$request->page_index;
  45. $page_size=$request->page_size;
  46. $num = ($page_index - 1) * $page_size;
  47. if ($request->search_name){
  48. $count=StudioGood::where('main_attr',$request->search_name)->where('is_deleted',0)->count();
  49. $good=StudioGood::where('main_attr',$request->search_name)->where('is_deleted',0)
  50. ->orderBy('is_deleted')->orderBy('sort')->orderBy('id')
  51. ->skip($num)->take($page_size)->get();
  52. }else{
  53. $good=StudioGood::where('is_deleted',0)
  54. ->orderBy('is_deleted')->orderBy('sort')->orderBy('id')
  55. ->skip($num)->take($page_size)->get();
  56. $count=StudioGood::where('is_deleted',0)->count();
  57. }
  58. $re=[];
  59. foreach ($good as $k=>$v){
  60. $re[$k]['name']=$v->name;
  61. $re[$k]['img_url']=$v->main_img;
  62. $re[$k]['type']=$v->main_attr;
  63. $re[$k]['hgprice']=$v->money;
  64. $re[$k]['is_show']=$v->is_show;
  65. $re[$k]['is_deleted']=$v->is_deleted==1?true:false;
  66. $re[$k]['created_at']=$v->created_at->toDateTimeString();
  67. $re[$k]['updated_at']=$v->updated_at->toDateTimeString();
  68. $re[$k]['start']=$v->show_time==null?'':$v->show_time;
  69. $re[$k]['end']=$v->off_time==null?'':$v->off_time;
  70. $re[$k]['num']=$v->storage;
  71. $re[$k]['id']=$v->id;
  72. $re[$k]['tag']=$v->size;
  73. $re[$k]['unit']=$v->unit;
  74. $re[$k]['content']=$v->content;
  75. $re[$k]['sold_num']=$v->sold_num;
  76. }
  77. return $this->success_list($re,'',$count);
  78. }
  79. /*
  80. *商品详情
  81. */
  82. public function good_detail(Request $request){
  83. $rules=[
  84. 'id'=>'required'
  85. ];
  86. $message=[
  87. 'id.required'=>'商品ID是必填项'
  88. ];
  89. $vali=Validator::make($request->all(),$rules,$message);
  90. if ($vali->fails()){
  91. return $this->error('400013',$vali->errors()->first());
  92. }
  93. $good=StudioGood::find($request->id);
  94. $size=StudioGood::where('name',$good->name)->where('is_deleted',0)->select('size','storage','id')->get()->toArray();
  95. $sizes=array_column($size,'size');
  96. $storage=array_column($size,'storage');
  97. $id=array_column($size,'id');
  98. $data['name']=$good->name;
  99. $data['main_img']=$good->main_img;
  100. $data['banner_url']=json_decode($good->banner_img);
  101. $data['hgPrice']=$good->money;
  102. $data['unit']=$good->unit;
  103. $data['size']=$good->size;
  104. $data['storage']=$good->storage;
  105. $data['desc']=$good->summary==null?'':$good->summary;
  106. $data['is_show']=$good->is_show;
  107. $goodattr=Goodattr::find($good->attr_id);
  108. $data['type']=[$goodattr->pid,$good->attr_id];
  109. $data['content']=$good->content;
  110. // $data=$good;
  111. $data['tagList']['size']=$sizes;
  112. $data['tagList']['num']=$storage;
  113. // $data['storage_all']=$storage;
  114. $data['id']=$id;
  115. return $this->success($data);
  116. }
  117. /*
  118. * 添加商品
  119. * **/
  120. public function add_good(Request $request){
  121. $rule=[
  122. 'name'=>'required',
  123. 'desc'=>'required',
  124. // 'goods_num'=>'required|array',
  125. 'hgPrice'=>'required',
  126. 'img_url'=>'required',
  127. 'unit'=>'required',
  128. 'tagList'=>'required|array',
  129. 'is_show'=>'required',
  130. 'type'=>'required',
  131. 'banner_url'=>'array',
  132. ];
  133. $input=$request->all();
  134. DB::beginTransaction();
  135. try{
  136. $good_sec_attr=Goodattr::find($input['type']);
  137. $good_main_attr=Goodattr::find($good_sec_attr->pid);
  138. if ($request->is_show){
  139. $is_show=1;
  140. }else{
  141. $is_show=0;
  142. }
  143. foreach ($input['tagList']['size'] as $k=>$v){
  144. $good=new StudioGood();
  145. $good->name=$input['name'];
  146. $good->summary=$input['desc'];
  147. $good->size=$v;
  148. $good->storage=$input['tagList']['num'][$k];
  149. // $good->goods_num=$input['goods_num'][$k];
  150. $good->money=$input['hgPrice'];
  151. $good->main_img=$input['img_url'];
  152. $good->unit=$input['unit'];
  153. $good->is_show=$is_show;
  154. $good->attr_id=$input['type'];
  155. $good->content=$input['content'];
  156. $good->main_attr=$good_main_attr->name;
  157. $good->sec_attr=$good_sec_attr->name;
  158. $good->banner_img=json_encode($input['banner_url']);
  159. // $good->save();
  160. if (!$good->save()){
  161. throw new \Exception('1');
  162. }
  163. }
  164. DB::commit();
  165. return $this->success([]);
  166. }catch (\Exception $exception){
  167. DB::rollBack();
  168. return $this->error(40013,'商品添加失败');
  169. }
  170. }
  171. /*
  172. * 商品上下架
  173. * */
  174. public function shelvedGoods(Request $request){
  175. $rules=[
  176. 'id'=>'requreid',
  177. ];
  178. $message=[
  179. 'id.reuqired'=>'商品id是必填项',
  180. ];
  181. $vali=Validator::make($rules,$message);
  182. if ($vali->fails()){
  183. return $this->error('400013',$vali->errors()->first());
  184. }
  185. DB::beginTransaction();
  186. try{
  187. $good=StudioGood::find($request->id);
  188. if ($request->has('start')){
  189. $now=Carbon::now()->timestamp;
  190. if ($now<$request->start){
  191. $good->is_show=1;
  192. $good->show_time=date('Y-m-d H:i:s',$request->start);
  193. $good->off_time=date('Y-m-d H:i:s',$request->end);
  194. }elseif ($now>$request->end){
  195. $good->is_show=4;
  196. }elseif ($now>$request->start&&$request->end>$now){
  197. $good->is_show=3;
  198. $good->show_time=date('Y-m-d H:i:s',$request->start);
  199. $good->off_time=date('Y-m-d H:i:s',$request->end);
  200. }
  201. }else{
  202. if ($good->is_show==0||$good->is_show==1||$good->is_show==4){
  203. $good->is_show=2;
  204. $good->show_time=null;
  205. $good->off_time=null;
  206. }elseif($good->is_show==2||$good->is_show==3){
  207. $good->is_show=4;
  208. $good->show_time=null;
  209. $good->off_time=null;
  210. }
  211. }
  212. if(!$good->save()){
  213. throw new \Exception('1');
  214. }
  215. DB::commit();
  216. return $this->success([]);
  217. }catch (\Exception $exception){
  218. DB::rollBack();
  219. return $this->error(40013,'操作失败');
  220. }
  221. }
  222. /*
  223. * 商品
  224. * */
  225. public function destoryGoods(Request $request){
  226. $rules=[
  227. 'id'=>'requreid',
  228. ];
  229. $message=[
  230. 'id.reuqired'=>'商品id是必填项',
  231. ];
  232. $vali=Validator::make($rules,$message);
  233. if ($vali->fails()){
  234. return $this->error('400013',$vali->errors()->first());
  235. }
  236. DB::beginTransaction();
  237. try{
  238. $good=StudioGood::find($request->id);
  239. $good->is_deleted=1;
  240. if(!$good->save()){
  241. throw new \Exception('1');
  242. }
  243. DB::commit();
  244. return $this->success([]);
  245. }catch (\Exception $exception){
  246. DB::rollBack();
  247. return $this->error(40013,'操作失败');
  248. }
  249. }
  250. /*
  251. * 修改商品
  252. * */
  253. public function update_good(Request $request){
  254. $input=$request->all();
  255. DB::beginTransaction();
  256. try{
  257. Log::error('{----数据-------}'.json_encode($request->all()));
  258. foreach ($input['tagList']['size'] as $k=>$v){
  259. $good=StudioGood::where('size',$v)->whereIn('id',$input['id'])->where('is_deleted',0)->first();
  260. if ($good->storage!=$input['tagList']['num'][$k]){
  261. $goodlog=new StudioGoodLog();
  262. $goodlog->name=Auth::user()->name;
  263. $goodlog->text=Auth::user()->name.'修改了商品'.$good->naame.'尺码'.$good->size.'的库存数量,数量为'.$input['tagList']['num'][$k].',原库存数量为'.$good->storage;
  264. if (!$goodlog->save()){
  265. throw new \Exception('1');
  266. }
  267. }
  268. $good->storage=$input['tagList']['num'][$k];
  269. $good->main_img=$request->img_url;
  270. $good->money=$request->hgPrice;
  271. $good->summary=$request->desc;
  272. $good->unit=$request->unit;
  273. $good->content=$input['content'];
  274. $good->banner_img=json_encode($input['banner_url']);
  275. $good->name=$request->name;
  276. if (!$good->save()){
  277. throw new \Exception('1');
  278. }
  279. }
  280. DB::commit();
  281. return $this->success([]);
  282. }catch (\Exception $exception){
  283. DB::rollBack();
  284. Log::error('商品修改失败'.$exception);
  285. return $this->error(40013,'商品修改失败');
  286. }
  287. }
  288. /*
  289. * 增加尺寸
  290. * */
  291. public function add_size(Request $request){
  292. DB::beginTransaction();
  293. try{
  294. $re=StudioGood::where('attr_id',$request->attr_id)->where('size',$request->size)->where('is_deleted',0)->count();
  295. if ($re){
  296. return $this->error(40013,'当前尺寸已存在');
  297. }
  298. $goods=StudioGood::where('attr_id',$request->attr_id)->where('is_deleted',0)->first();
  299. $good=new StudioGood();
  300. $good->name=$goods->name;
  301. $good->summary=$goods->summary;
  302. $good->main_attr=$goods->main_attr;
  303. $good->sec_attr=$goods->sec_attr;
  304. $good->money=$goods->money;
  305. $good->storage=100;
  306. $good->main_img=$goods->main_img;
  307. $good->banner_img=$goods->banner_img;
  308. $good->unit=$goods->unit;
  309. $good->size=$request->size;
  310. $good->attr_id=$request->attr_id;
  311. if (!$good->save()){
  312. throw new \Exception('1');
  313. }
  314. $goodlog=new StudioGoodLog();
  315. $goodlog->name=Auth::user()->name;
  316. $goodlog->text=Auth::user()->name.'添加了商品'.$good->name.'的'.$request->size.'尺码,数量为100';
  317. if (!$goodlog->save()){
  318. throw new \Exception('1');
  319. }
  320. DB::commit();
  321. return $this->success(['id'=>$good->id]);
  322. }catch (\Exception $exception){
  323. DB::rollBack();
  324. return $this->error(40013,'添加尺寸失败');
  325. }
  326. }
  327. /*
  328. * 删除尺寸
  329. * */
  330. public function destory_size(Request $request){
  331. DB::beginTransaction();
  332. try{
  333. $re=StudioGood::where('attr_id',$request->attr_id)->where('size',$request->size)->where('is_deleted',0)->count();
  334. if (!$re){
  335. return $this->error(40013,'当前尺寸不存在');
  336. }
  337. $good=StudioGood::where('attr_id',$request->attr_id)->where('size',$request->size)->where('is_deleted',0)->first();
  338. $good->is_deleted=1;
  339. if (!$good->save()){
  340. throw new \Exception('1');
  341. }
  342. $goodlog=new StudioGoodLog();
  343. $goodlog->name=Auth::user()->name;
  344. $goodlog->text=Auth::user()->name.'删除了商品'.$good->name.'的'.$request->size.'尺码';
  345. if (!$goodlog->save()){
  346. throw new \Exception('1');
  347. }
  348. DB::commit();
  349. return $this->success([]);
  350. }catch (\Exception $exception){
  351. DB::rollBack();
  352. return $this->error(40013,'删除商品失败');
  353. }
  354. }
  355. public function get_good_attr(){
  356. $data=StudioGood::where('is_deleted',0)->orderBy('sort')->orderBy('id')->groupBy('attr_id')->get();
  357. return $this->success_list($data);
  358. }
  359. /*
  360. * 排序
  361. * */
  362. public function good_sort(Request $request){
  363. foreach ($request->attr_id as $k=>$v){
  364. Log::error('1='.$k);
  365. $re=Goodtest::where('attr_id',$v)->where('is_deleted',0)->update(['sort'=>$k]);
  366. Log::error($re);
  367. Log::error('2='.$k);
  368. }
  369. Log::error('jiesu');
  370. return $this->success([]);
  371. }
  372. /*
  373. * 商品属性
  374. * */
  375. public function good_attr(){
  376. $amin_attr=Goodattr::where('pid',0)->get();
  377. $re=[];
  378. foreach ($amin_attr as $k=>$v){
  379. $re[$k]['label']=$v->name;
  380. $re[$k]['value']=$v->id;
  381. $res=[];
  382. $ad=Goodattr::where('pid',$v->id)->get();
  383. foreach ($ad as $ke=>$va){
  384. $res[$ke]['label']=$va->name;
  385. $res[$ke]['value']=$va->id;
  386. }
  387. $re[$k]['children']=$res;
  388. }
  389. return $this->success_list($re,'success');
  390. }
  391. //上传图片
  392. public function uploadGoodsImage(Request $request)
  393. {
  394. $file = $request->file('file');
  395. $path_url = 'goods/studio_goods';
  396. $upload = new UploadFilesHandler();
  397. $result = $upload->save($file, $path_url, null, 'image');
  398. if ($result) {
  399. return $this->success($result['path']);
  400. }
  401. return $this->error();
  402. }
  403. }