GoodtestController.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Goodattr;
  4. use App\Models\GoodsLog;
  5. use App\Models\Goodtest;
  6. use App\User;
  7. use Carbon\Carbon;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\Auth;
  10. use Illuminate\Support\Facades\DB;
  11. use Illuminate\Support\Facades\Log;
  12. use Illuminate\Support\Facades\Validator;
  13. class GoodtestController extends Controller
  14. {
  15. public function index()
  16. {
  17. $ad = '{"name":"\u6d4b\u8bd5\u6d4b\u8bd5\u6d4b\u8bd5\u6d4b\u8bd5","desc":"\u6d4b\u8bd5\u6d4b\u8bd5\u6d4b\u8bd5\u6d4b\u8bd5","img_url":"http:\/\/app-admin.hopa.cc\/storage\/goods\/rWui3gKdHgbTpJFlZYK9QRi6zb3RAeoKnV7W0vk2.jpeg","banner_url":["http:\/\/app-admin.hopa.cc\/storage\/goods\/xlJqsN7ViqJb2OPLFpQf2AJ0RfqpyCHmgKXKnygE.jpeg"],"content":"<p>\u6d4b\u8bd5\u6d4b\u8bd5\u6d4b\u8bd5\u6d4b\u8bd5<\/p>","tagList":{"size":["S","M","L","XL","XXL","XXXL"]},"goodsSku":[{"size":"S","tjPrice":"123","djPrice":"123","hgPrice":"23"},{"size":"M","tjPrice":"123","djPrice":"123","hgPrice":"23"},{"size":"L","tjPrice":"123","djPrice":"123","hgPrice":"23"},{"size":"XL","tjPrice":"123","djPrice":"123","hgPrice":"23"},{"size":"XXL","tjPrice":"123","djPrice":"123","hgPrice":"23"},{"size":"XXXL","tjPrice":"123","djPrice":"123","hgPrice":"23"}],"hgPrice":"23","djPrice":"123","tjPrice":"123","unit":"\u5957","type":2,"total":null}';
  18. dump(json_decode($ad));
  19. $data = json_decode($ad);
  20. dump($data->tagList->size);
  21. }
  22. /*
  23. * 获取用户信息
  24. * */
  25. public function getgoodsinfo(Request $request){
  26. $user=User::where('mobile',$request->mobile)->first();
  27. if (!$user){
  28. return $this->error(40013,'查无此人');
  29. }
  30. if ($user->level!=3){
  31. return $this->error(40013,'当前用户不是代理公司');
  32. }
  33. $good=Goodtest::where('is_deleted',0)->whereIn('is_show',[2,3])->get();
  34. $data['good']=$good;
  35. $data['user']=$user;
  36. return $this->success($data);
  37. }
  38. /*
  39. * 获取商品类型
  40. */
  41. public function getGoodsAttr(){
  42. $list=Goodtest::groupBy('main_attr')->pluck('main_attr');
  43. return $this->success($list);
  44. }
  45. /*
  46. * 商品列表
  47. * */
  48. public function good_list(Request $request){
  49. $page_index=$request->page_index;
  50. $page_size=$request->page_size;
  51. $num = ($page_index - 1) * $page_size;
  52. // $search_name=$input['search_name'];
  53. $where=[];
  54. $where1=[];
  55. if ($request->status==1){
  56. $where=function ($query){
  57. $query->whereIn('is_show',[2,3]);
  58. };
  59. }elseif($request->status==-1){
  60. $where=[];
  61. }elseif($request->status==0){
  62. $where['is_show']=1;
  63. }elseif($request->status==2){
  64. $where['is_show']=4;
  65. }
  66. if(!empty($request->search_name)){
  67. $where1['main_attr']=$request->search_name;
  68. }
  69. $count=Goodtest::where($where)->where($where1)->where('is_deleted',0)->count();
  70. $good=Goodtest::where($where)->where($where1)->where('is_deleted',0)
  71. ->orderBy('is_deleted')->orderBy('sort')->orderBy('id')
  72. ->skip($num)->take($page_size)->get();
  73. $re=[];
  74. foreach ($good as $k=>$v){
  75. $re[$k]['name']=$v->name;
  76. $re[$k]['img_url']=$v->main_img;
  77. $re[$k]['type']=$v->main_attr;
  78. $re[$k]['hgprice']=$v->money;
  79. $re[$k]['is_show']=$v->is_show;
  80. $re[$k]['is_deleted']=$v->is_deleted==1?true:false;
  81. $re[$k]['created_at']=$v->created_at->toDateTimeString();
  82. $re[$k]['updated_at']=$v->updated_at->toDateTimeString();
  83. $re[$k]['start']=$v->show_time==null?'':$v->show_time;
  84. $re[$k]['end']=$v->off_time==null?'':$v->off_time;
  85. $re[$k]['num']=$v->storage;
  86. $re[$k]['id']=$v->id;
  87. $re[$k]['tag']=$v->size;
  88. $re[$k]['unit']=$v->unit;
  89. $re[$k]['content']=$v->content;
  90. $re[$k]['sold_num']=$v->sold_num;
  91. }
  92. return $this->success_list($re,'',$count);
  93. }
  94. /*
  95. * 商品属性
  96. * */
  97. public function good_attr(){
  98. $amin_attr=Goodattr::where('pid',0)->get();
  99. $re=[];
  100. foreach ($amin_attr as $k=>$v){
  101. $re[$k]['label']=$v->name;
  102. $re[$k]['value']=$v->id;
  103. $res=[];
  104. $ad=Goodattr::where('pid',$v->id)->get();
  105. foreach ($ad as $ke=>$va){
  106. $res[$ke]['label']=$va->name;
  107. $res[$ke]['value']=$va->id;
  108. }
  109. $re[$k]['children']=$res;
  110. }
  111. return $this->success_list($re,'success');
  112. }
  113. /*
  114. * 新增商品属性
  115. * */
  116. public function add_good_attr(Request $request){
  117. $rule=[
  118. 'pid'=>'required',
  119. 'name'=>'required'
  120. ];
  121. $message=[
  122. 'pid.required'=>'父节点ID是必填项',
  123. 'name.required'=>'商品属性名称是必填项'
  124. ];
  125. $vali=Validator::make($request->all(),$rule,$message);
  126. if ($vali->fails()){
  127. return $this->error(40013,$vali->errors()->first());
  128. }
  129. Log::error(json_encode($request->all()));
  130. DB::beginTransaction();
  131. try{
  132. $good_attr=new Goodattr();
  133. $good_attr->pid=$request->pid;
  134. $good_attr->name=$request->name;
  135. if (!$good_attr->save()){
  136. throw new \Exception('1');
  137. }
  138. DB::commit();
  139. return $this->success([]);
  140. }catch (\Exception $exception){
  141. DB::rollBack();
  142. return $this->error(40014,'添加商品属性出错');
  143. }
  144. }
  145. /*
  146. *商品详情
  147. */
  148. public function good_detail(Request $request){
  149. $rules=[
  150. 'id'=>'required'
  151. ];
  152. $message=[
  153. 'id.required'=>'商品ID是必填项'
  154. ];
  155. $vali=Validator::make($request->all(),$rules,$message);
  156. if ($vali->fails()){
  157. return $this->error('400013',$vali->errors()->first());
  158. }
  159. $good=Goodtest::find($request->id);
  160. $size=Goodtest::where('name',$good->name)->where('is_deleted',0)->select('size','storage','id')->get()->toArray();
  161. $sizes=array_column($size,'size');
  162. $storage=array_column($size,'storage');
  163. $id=array_column($size,'id');
  164. $data['name']=$good->name;
  165. $data['main_img']=$good->main_img;
  166. $data['banner_url']=json_decode($good->banner_img);
  167. $data['hgPrice']=$good->money;
  168. $data['unit']=$good->unit;
  169. $data['size']=$good->size;
  170. $data['storage']=$good->storage;
  171. $data['desc']=$good->summary==null?'':$good->summary;
  172. $data['is_show']=$good->is_show;
  173. $goodattr=Goodattr::find($good->attr_id);
  174. $data['type']=[$goodattr->pid,$good->attr_id];
  175. $data['content']=$good->content;
  176. // $data=$good;
  177. $data['tagList']['size']=$sizes;
  178. $data['tagList']['num']=$storage;
  179. // $data['storage_all']=$storage;
  180. $data['id']=$id;
  181. return $this->success($data);
  182. }
  183. /*
  184. * 添加商品
  185. * **/
  186. public function add_good(Request $request){
  187. Log::error(json_encode($request->all()));
  188. $rule=[
  189. 'name'=>'required',
  190. 'desc'=>'required',
  191. // 'goods_num'=>'required|array',
  192. 'hgPrice'=>'required',
  193. 'img_url'=>'required',
  194. 'unit'=>'required',
  195. 'tagList'=>'required|array',
  196. 'is_show'=>'required',
  197. 'type'=>'required',
  198. 'banner_url'=>'array',
  199. ];
  200. $input=$request->all();
  201. DB::beginTransaction();
  202. try{
  203. $good_sec_attr=Goodattr::find($input['type']);
  204. $good_main_attr=Goodattr::find($good_sec_attr->pid);
  205. if ($request->is_show){
  206. $is_show=1;
  207. }else{
  208. $is_show=0;
  209. }
  210. foreach ($input['tagList']['size'] as $k=>$v){
  211. $good=new Goodtest();
  212. $good->name=$input['name'];
  213. $good->summary=$input['desc'];
  214. $good->size=$v;
  215. $good->storage=$input['tagList']['num'][$k];
  216. // $good->goods_num=$input['goods_num'][$k];
  217. $good->money=$input['hgPrice'];
  218. $good->main_img=$input['img_url'];
  219. $good->unit=$input['unit'];
  220. $good->is_show=$is_show;
  221. $good->attr_id=$input['type'];
  222. $good->content=$input['content'];
  223. $good->main_attr=$good_main_attr->name;
  224. $good->sec_attr=$good_sec_attr->name;
  225. $good->banner_img=json_encode($input['banner_url']);
  226. // $good->save();
  227. if (!$good->save()){
  228. throw new \Exception('1');
  229. }
  230. }
  231. DB::commit();
  232. return $this->success([]);
  233. }catch (\Exception $exception){
  234. DB::rollBack();
  235. return $this->error(40013,'商品添加失败');
  236. }
  237. }
  238. /*
  239. * 商品上下架
  240. * */
  241. public function shelvedGoods(Request $request){
  242. $rules=[
  243. 'id'=>'requreid',
  244. ];
  245. $message=[
  246. 'id.reuqired'=>'商品id是必填项',
  247. ];
  248. $vali=Validator::make($rules,$message);
  249. if ($vali->fails()){
  250. return $this->error('400013',$vali->errors()->first());
  251. }
  252. DB::beginTransaction();
  253. try{
  254. $good=Goodtest::find($request->id);
  255. if ($request->has('start')){
  256. $now=Carbon::now()->timestamp;
  257. if ($now<$request->start){
  258. $good->is_show=1;
  259. $good->show_time=date('Y-m-d H:i:s',$request->start);
  260. $good->off_time=date('Y-m-d H:i:s',$request->end);
  261. }elseif ($now>$request->end){
  262. $good->is_show=4;
  263. }elseif ($now>$request->start&&$request->end>$now){
  264. $good->is_show=3;
  265. $good->show_time=date('Y-m-d H:i:s',$request->start);
  266. $good->off_time=date('Y-m-d H:i:s',$request->end);
  267. }
  268. }else{
  269. if ($good->is_show==0||$good->is_show==1||$good->is_show==4){
  270. $good->is_show=2;
  271. $good->show_time=null;
  272. $good->off_time=null;
  273. }elseif($good->is_show==2||$good->is_show==3){
  274. $good->is_show=4;
  275. $good->show_time=null;
  276. $good->off_time=null;
  277. }
  278. }
  279. if(!$good->save()){
  280. throw new \Exception('1');
  281. }
  282. DB::commit();
  283. return $this->success([]);
  284. }catch (\Exception $exception){
  285. DB::rollBack();
  286. return $this->error(40013,'操作失败');
  287. }
  288. // return $this->success([]);
  289. }
  290. /*
  291. * 批量上下架
  292. * */
  293. public function goods_up(Request $request){
  294. $status=$request->action;
  295. if ($status==0){
  296. $is_show=4;
  297. }else{
  298. $is_show=2;
  299. }
  300. foreach ($request->list as $k=>$v){
  301. $good=Goodtest::find($v);
  302. $good->is_show=$is_show;
  303. $good->show_time=null;
  304. $good->off_time=null;
  305. $good->save();
  306. }
  307. return $this->success([]);
  308. }
  309. /*
  310. * 商品
  311. * */
  312. public function destoryGoods(Request $request){
  313. $rules=[
  314. 'id'=>'requreid',
  315. ];
  316. $message=[
  317. 'id.reuqired'=>'商品id是必填项',
  318. ];
  319. $vali=Validator::make($rules,$message);
  320. if ($vali->fails()){
  321. return $this->error('400013',$vali->errors()->first());
  322. }
  323. DB::beginTransaction();
  324. try{
  325. $good=Goodtest::find($request->id);
  326. if ($good->is_show!=4){
  327. return $this->error(40013,'该商品不是下架商品,不能删除!!');
  328. }
  329. $good->is_deleted=1;
  330. if(!$good->save()){
  331. throw new \Exception('1');
  332. }
  333. DB::commit();
  334. return $this->success([]);
  335. }catch (\Exception $exception){
  336. DB::rollBack();
  337. return $this->error(40013,'操作失败');
  338. }
  339. // return $this->success([]);
  340. }
  341. /*
  342. * 修改商品
  343. * */
  344. public function update_good(Request $request){
  345. $input=$request->all();
  346. DB::beginTransaction();
  347. try{
  348. Log::error('{----数据-------}'.json_encode($request->all()));
  349. foreach ($input['tagList']['size'] as $k=>$v){
  350. $good=Goodtest::where('size',$v)->whereIn('id',$input['id'])->where('is_deleted',0)->first();
  351. if ($good->storage!=$input['tagList']['num'][$k]){
  352. $goodlog=new GoodsLog();
  353. $goodlog->name=Auth::user()->name;
  354. $goodlog->text=Auth::user()->name.'修改了商品'.$good->naame.'尺码'.$good->size.'的库存数量,数量为'.$input['tagList']['num'][$k].',原库存数量为'.$good->storage;
  355. if (!$goodlog->save()){
  356. throw new \Exception('1');
  357. }
  358. }
  359. $good->storage=$input['tagList']['num'][$k];
  360. $good->main_img=$request->img_url;
  361. $good->money=$request->hgPrice;
  362. $good->summary=$request->desc;
  363. $good->unit=$request->unit;
  364. $good->content=$input['content'];
  365. $good->banner_img=json_encode($input['banner_url']);
  366. $good->name=$request->name;
  367. if (!$good->save()){
  368. throw new \Exception('1');
  369. }
  370. }
  371. DB::commit();
  372. return $this->success([]);
  373. }catch (\Exception $exception){
  374. DB::rollBack();
  375. Log::error('商品修改失败'.$exception);
  376. return $this->error(40013,'商品修改失败');
  377. }
  378. }
  379. /*
  380. * 增加尺寸
  381. * */
  382. public function add_size(Request $request){
  383. DB::beginTransaction();
  384. try{
  385. $re=Goodtest::where('attr_id',$request->attr_id)->where('size',$request->size)->where('is_deleted',0)->count();
  386. if ($re){
  387. return $this->error(40013,'当前尺寸已存在');
  388. }
  389. $goods=Goodtest::where('attr_id',$request->attr_id)->where('is_deleted',0)->first();
  390. $good=new Goodtest();
  391. $good->name=$goods->name;
  392. $good->summary=$goods->summary;
  393. $good->main_attr=$goods->main_attr;
  394. $good->sec_attr=$goods->sec_attr;
  395. $good->money=$goods->money;
  396. $good->storage=100;
  397. $good->main_img=$goods->main_img;
  398. $good->banner_img=$goods->banner_img;
  399. $good->unit=$goods->unit;
  400. $good->size=$request->size;
  401. $good->attr_id=$request->attr_id;
  402. if (!$good->save()){
  403. throw new \Exception('1');
  404. }
  405. $goodlog=new GoodsLog();
  406. $goodlog->name=Auth::user()->name;
  407. $goodlog->text=Auth::user()->name.'添加了商品'.$good->name.'的'.$request->size.'尺码,数量为100';
  408. if (!$goodlog->save()){
  409. throw new \Exception('1');
  410. }
  411. DB::commit();
  412. return $this->success(['id'=>$good->id]);
  413. }catch (\Exception $exception){
  414. DB::rollBack();
  415. return $this->error(40013,'添加尺寸失败');
  416. }
  417. }
  418. /*
  419. * 删除尺寸
  420. * */
  421. public function destory_size(Request $request){
  422. DB::beginTransaction();
  423. try{
  424. $re=Goodtest::where('attr_id',$request->attr_id)->where('size',$request->size)->where('is_deleted',0)->count();
  425. if (!$re){
  426. return $this->error(40013,'当前尺寸不存在');
  427. }
  428. $good=Goodtest::where('attr_id',$request->attr_id)->where('size',$request->size)->where('is_deleted',0)->first();
  429. $good->is_deleted=1;
  430. if (!$good->save()){
  431. throw new \Exception('1');
  432. }
  433. $goodlog=new GoodsLog();
  434. $goodlog->name=Auth::user()->name;
  435. $goodlog->text=Auth::user()->name.'删除了商品'.$good->name.'的'.$request->size.'尺码';
  436. if (!$goodlog->save()){
  437. throw new \Exception('1');
  438. }
  439. DB::commit();
  440. return $this->success([]);
  441. }catch (\Exception $exception){
  442. DB::rollBack();
  443. return $this->error(40013,'删除商品失败');
  444. }
  445. }
  446. /*
  447. * 清除定时
  448. * */
  449. public function destory_time(Request $request){
  450. DB::beginTransaction();
  451. try{
  452. $good=Goodtest::find($request->id);
  453. if ($good->is_show==1||$good->is_show==0){
  454. $good->show_time=null;
  455. $good->off_time=null;
  456. $good->is_show=0;
  457. }elseif ($good->is_show==3){
  458. $good->show_time=null;
  459. $good->off_time=null;
  460. $good->is_show=2;
  461. }
  462. if (!$good->save()){
  463. throw new \Exception('1');
  464. }
  465. DB::commit();
  466. return $this->success([]);
  467. }catch (\Exception $exception){
  468. DB::rollBack();
  469. return $this->error(40013,'清除定时时间失败');
  470. }
  471. }
  472. /*
  473. * 批量定时上下架
  474. * */
  475. public function good_timing(Request $request){
  476. DB::beginTransaction();
  477. try{
  478. foreach ($request->id as $k=>$v){
  479. $good=Goodtest::find($v);
  480. if ($request->has('start')){
  481. $now=Carbon::now()->timestamp;
  482. if ($now<$request->start){
  483. $good->is_show=1;
  484. $good->show_time=date('Y-m-d H:i:s',$request->start);
  485. $good->off_time=date('Y-m-d H:i:s',$request->end);
  486. }elseif ($now>$request->end){
  487. $good->is_show=4;
  488. }elseif ($now>$request->start&&$request->end>$now){
  489. $good->is_show=3;
  490. $good->show_time=date('Y-m-d H:i:s',$request->start);
  491. $good->off_time=date('Y-m-d H:i:s',$request->end);
  492. }
  493. }else{
  494. if ($good->is_show==1||$good->is_show==0){
  495. $good->show_time=null;
  496. $good->off_time=null;
  497. $good->is_show=0;
  498. }elseif ($good->is_show==3){
  499. $good->show_time=null;
  500. $good->off_time=null;
  501. $good->is_show=2;
  502. }
  503. }
  504. if(!$good->save()){
  505. throw new \Exception('1');
  506. }
  507. }
  508. DB::commit();
  509. return $this->success([]);
  510. }catch (\Exception $exception){
  511. DB::rollBack();
  512. Log::error('批量定时上架失败-------------------错误信息为:'.$exception);
  513. return $this->error(40013,'操作失败');
  514. }
  515. }
  516. public function get_good_attr(){
  517. $data=Goodtest::where('is_deleted',0)->orderBy('sort')->orderBy('id')->groupBy('attr_id')->get();
  518. // foreach ($data as $k=>$v){
  519. // $re[$k]['attr_id']=$v->attr_id;
  520. // $re[$k]['goods_name']=$v->goods_name;
  521. // $re[$k]['main_img']=$v->main_img;
  522. // }
  523. return $this->success_list($data);
  524. }
  525. /*
  526. * 排序
  527. * */
  528. public function good_sort(Request $request){
  529. Log::error(json_encode($request->all()));
  530. foreach ($request->attr_id as $k=>$v){
  531. Log::error('1='.$k);
  532. $re=Goodtest::where('attr_id',$v)->where('is_deleted',0)->update(['sort'=>$k]);
  533. Log::error($re);
  534. Log::error('2='.$k);
  535. }
  536. Log::error('jiesu');
  537. return $this->success([]);
  538. }
  539. }