GoodtestController.php 21 KB

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