ProductController.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571
  1. <?php
  2. namespace App\Web\Controllers;
  3. use App\Http\Controllers\BaseController;
  4. use App\Web\Services\ProductService;
  5. use Illuminate\Http\Request;
  6. class ProductController extends BaseController
  7. {
  8. protected $service = null;
  9. /**
  10. * 构造函数
  11. * ProductController constructor.
  12. * @param ProductService $service
  13. */
  14. public function __construct(ProductService $service)
  15. {
  16. $this->service = $service;
  17. }
  18. /**
  19. * 获取产品类型列表
  20. * */
  21. public function getProductTypeList(Request $request){
  22. $params=$request->only(['page_size','page','status','keyword']);
  23. $ret=$this->service->getProductTypeList($params);
  24. return $this->jsonResponse(
  25. 'ok',
  26. $ret
  27. );
  28. }
  29. public function getTreeProductList(Request $request){
  30. $ret=$this->service->getTreeProductList([]);
  31. return $this->jsonResponse(
  32. 'ok',
  33. $ret
  34. );
  35. }
  36. public function sortProductTypes(Request $request){
  37. $types=$request->input('types',[]);
  38. $ret=$this->service->sortTypes($types);
  39. return $this->jsonResponse(
  40. 'ok',
  41. $ret
  42. );
  43. }
  44. /**
  45. * 产品类型保存
  46. * */
  47. public function saveProductType(Request $request){
  48. $this->validate($request, [
  49. 'type_name' => 'required',
  50. ], [
  51. 'type_name.required' => '类型名称不能为空',
  52. ]);
  53. $params=$request->only(['id','type_name','description','status','p_id','sort','seo_data', 'seo_id','expand_content']);
  54. $ret=$this->service->saveProductType($params);
  55. return $this->jsonResponse(
  56. 'ok',
  57. $ret
  58. );
  59. }
  60. /**
  61. * 变更产品类型状态
  62. * */
  63. public function changeProductTypeStatus(Request $request){
  64. $this->validate($request, [
  65. 'id' => 'required',
  66. ], [
  67. 'id.required' => 'id不能为空',
  68. ]);
  69. $params=$request->only(['id','status']);
  70. $ret=$this->service->saveProductType($params);
  71. return $this->jsonResponse(
  72. 'ok',
  73. $ret
  74. );
  75. }
  76. /**
  77. * 保存产品类型关系
  78. * */
  79. public function typeRelationSave(Request $request){
  80. $this->validate($request, [
  81. 'product_id' => 'required',
  82. ], [
  83. 'product_id.required' => '产品id不能为空',
  84. ]);
  85. $params=$request->only(['product_id','type_ids']);
  86. $ret=$this->service->typeRelationSave($params);
  87. return $this->jsonResponse(
  88. 'ok',
  89. $ret
  90. );
  91. }
  92. /**
  93. * 根据产品类型 保存产品关系
  94. * */
  95. public function addRelationByTypeId(Request $request){
  96. $this->validate($request, [
  97. 'product_ids' => 'required',
  98. 'type_id' => 'required',
  99. ], [
  100. 'product_ids.required' => '产品id不能为空',
  101. 'type_id.required' => '产品类型id不能为空',
  102. ]);
  103. $typeId=$request->input('type_id',0);
  104. $productIds=$request->input('product_ids',[]);
  105. $ret=$this->service->addRelationByTypeId($typeId,$productIds);
  106. return $this->jsonResponse(
  107. 'ok',
  108. $ret
  109. );
  110. }
  111. /**
  112. * 根据类型id及产品id 删除关联关系
  113. * */
  114. public function delTypeRelation(Request $request){
  115. $this->validate($request, [
  116. 'product_id' => 'required',
  117. 'type_id' => 'required',
  118. ], [
  119. 'product_id.required' => '产品id不能为空',
  120. 'type_id.required' => '类型id不能未空',
  121. ]);
  122. $productId=$request->input('product_id','');
  123. $typeId=$request->input('type_id','');
  124. $ret=$this->service->delTypeRelation($typeId,$productId);
  125. return $this->jsonResponse(
  126. 'ok',
  127. $ret
  128. );
  129. }
  130. /**
  131. * 获取产品标签列表
  132. * */
  133. public function getProductTagList(Request $request){
  134. $params=$request->only(['page_size','page','status','keyword']);
  135. $ret=$this->service->getProductTagList($params);
  136. return $this->jsonResponse(
  137. 'ok',
  138. $ret
  139. );
  140. }
  141. /**
  142. * 产品标签保存
  143. * */
  144. public function saveProductTag(Request $request){
  145. $this->validate($request, [
  146. 'tag_name' => 'required',
  147. ], [
  148. 'tag_name.required' => '类型名称不能为空',
  149. ]);
  150. $params=$request->only(['id','tag_name','is_hot','status','sort','type','seo_id','seo_data']);
  151. $ret=$this->service->saveProductTag($params);
  152. return $this->jsonResponse(
  153. 'ok',
  154. $ret
  155. );
  156. }
  157. /**
  158. * 变更产品类型状态
  159. * */
  160. public function changeProductTagStatus(Request $request){
  161. $this->validate($request, [
  162. 'id' => 'required',
  163. ], [
  164. 'id.required' => 'id不能为空',
  165. ]);
  166. $params=$request->only(['id','status']);
  167. $ret=$this->service->saveProductTag($params);
  168. return $this->jsonResponse(
  169. 'ok',
  170. $ret
  171. );
  172. }
  173. /**
  174. * 保存产品标签关系
  175. * */
  176. public function tagRelationSave(Request $request){
  177. $this->validate($request, [
  178. 'product_id' => 'required',
  179. ], [
  180. 'product_id.required' => '产品id不能为空',
  181. ]);
  182. $params=$request->only(['product_id','tag_ids']);
  183. $ret=$this->service->tagRelationSave($params);
  184. return $this->jsonResponse(
  185. 'ok',
  186. $ret
  187. );
  188. }
  189. /**
  190. * 根据产品标签 保存产品关系
  191. * */
  192. public function addRelationByTagId(Request $request){
  193. $this->validate($request, [
  194. 'product_ids' => 'required',
  195. 'tag_id' => 'required',
  196. ], [
  197. 'product_ids.required' => '产品id不能为空',
  198. 'tag_id.required' => '产品标签id不能为空',
  199. ]);
  200. $tagId=$request->input('tag_id',0);
  201. $productIds=$request->input('product_ids',[]);
  202. $ret=$this->service->addRelationByTagId($tagId,$productIds);
  203. return $this->jsonResponse(
  204. 'ok',
  205. $ret
  206. );
  207. }
  208. /**
  209. * 根据标签id及产品id 删除关联关系
  210. * */
  211. public function delTagRelation(Request $request){
  212. $this->validate($request, [
  213. 'product_id' => 'required',
  214. 'tag_id' => 'required',
  215. ], [
  216. 'product_id.required' => '产品id不能为空',
  217. 'tag_id.required' => '标签id不能未空',
  218. ]);
  219. $productId=$request->input('product_id','');
  220. $tagId=$request->input('tag_id','');
  221. $ret=$this->service->delTagRelation($tagId,$productId);
  222. return $this->jsonResponse(
  223. 'ok',
  224. $ret
  225. );
  226. }
  227. /**
  228. * 获取产品板块列表
  229. * */
  230. public function getProductPlateList(Request $request){
  231. $params=$request->only(['page_size','page','status','keyword']);
  232. $ret=$this->service->getProductPlateList($params);
  233. return $this->jsonResponse(
  234. 'ok',
  235. $ret
  236. );
  237. }
  238. /**
  239. * 产品板块保存
  240. * */
  241. public function saveProductPlate(Request $request){
  242. $this->validate($request, [
  243. 'plate_name' => 'required',
  244. ], [
  245. 'plate_name.required' => '类型名称不能为空',
  246. ]);
  247. $params=$request->only(['id','plate_name','status','sort','seo_id','seo_data']);
  248. $ret=$this->service->saveProductPlate($params);
  249. return $this->jsonResponse(
  250. 'ok',
  251. $ret
  252. );
  253. }
  254. /**
  255. * 变更产品板块状态
  256. * */
  257. public function changeProductPlateStatus(Request $request){
  258. $this->validate($request, [
  259. 'id' => 'required',
  260. ], [
  261. 'id.required' => 'id不能为空',
  262. ]);
  263. $params=$request->only(['id','status']);
  264. $ret=$this->service->saveProductPlate($params);
  265. return $this->jsonResponse(
  266. 'ok',
  267. $ret
  268. );
  269. }
  270. /**
  271. * 获取产品列表
  272. * */
  273. public function getProductList(Request $request){
  274. $params=$request->only(['page_size','page','status','keyword','sort']);
  275. $ret=$this->service->getProductList($params);
  276. return $this->jsonResponse(
  277. 'ok',
  278. $ret
  279. );
  280. }
  281. /**
  282. * 获取产品详情
  283. * */
  284. public function getProductInfo(Request $request){
  285. $this->validate($request, [
  286. 'id' => 'required',
  287. ], [
  288. 'id.required' => '产品id不能为空',
  289. ]);
  290. $id=$request->input('id',0);
  291. $ret=$this->service->getProductInfo(['id'=>$id]);
  292. return $this->jsonResponse(
  293. 'ok',
  294. $ret
  295. );
  296. }
  297. /**
  298. * 获取产品分类未关联的产品
  299. * */
  300. public function getUnrelatedProductByTypeIds(Request $request){
  301. $this->validate($request, [
  302. 'type_id' => 'required',
  303. ], [
  304. 'type_id.required' => 'id不能为空',
  305. ]);
  306. $params=$request->only(['page_size','page','status','keyword','type_id']);
  307. $ret=$this->service->getUnrelatedProductByTypeIds($params);
  308. return $this->jsonResponse(
  309. 'ok',
  310. $ret
  311. );
  312. }
  313. /**
  314. * 获取产品标签未关联的产品
  315. * */
  316. public function getUnrelatedProductByTagIds(Request $request){
  317. $params=$request->only(['page_size','page','status','keyword','tag_id','exclude_tag_id']);
  318. $ret=$this->service->getUnrelatedProductByTagIds($params);
  319. return $this->jsonResponse(
  320. 'ok',
  321. $ret
  322. );
  323. }
  324. /**
  325. * 根据类型id 获取产品列表
  326. * */
  327. public function getProductListByType(Request $request){
  328. $params=$request->only(['page_size','page','status','keyword','type_id','is_admin']);
  329. $ret=$this->service->getProductByTypeIds($request);
  330. return $this->jsonResponse(
  331. 'ok',
  332. $ret
  333. );
  334. }
  335. /**
  336. * 根据类型id 获取产品列表
  337. * */
  338. public function getAdminProductListByType(Request $request){
  339. $params=$request->only(['page_size','page','status','keyword','type_id','is_admin']);
  340. $ret=$this->service->getAdminProductByTypeIds($request);
  341. return $this->jsonResponse(
  342. 'ok',
  343. $ret
  344. );
  345. }
  346. /**
  347. * 根据标签id 获取产品列表
  348. * */
  349. public function getProductListByTag(Request $request){
  350. $params=$request->only(['page_size','page','status','keyword','tag_id']);
  351. $ret=$this->service->getProductByTagIds($params);
  352. return $this->jsonResponse(
  353. 'ok',
  354. $ret
  355. );
  356. }
  357. public function changeProductStatus(Request $request){
  358. $this->validate($request, [
  359. 'id' => 'required',
  360. ], [
  361. 'id.required' => 'id不能为空',
  362. ]);
  363. $params=$request->only(['id','status']);
  364. $ret=$this->service->saveProduct($params);
  365. return $this->jsonResponse(
  366. 'ok',
  367. $ret
  368. );
  369. }
  370. /**
  371. * 保存产品数据
  372. * */
  373. public function saveProduct(Request $request){
  374. $this->validate($request, [
  375. 'title' => 'required',
  376. 'content' => 'string',
  377. 'type_ids' => 'array',
  378. 'tag_ids' => 'array',
  379. ]);
  380. $params = $request->only(['id','pub_date','title','content','brand','model_nb','package','spec','description',
  381. 'image_url', 'image_alt', 'main_image', 'main_image_alt','sub_image_urls','gallery_imgs','size_imgs','re_price','market_price',
  382. 'sku','virtual_view','download_url','seo_id','sort','seo_data','score','status','tag_ids','type_ids', 'is_top','expand_content']);
  383. $ret=$this->service->saveProduct($params);
  384. return $this->jsonResponse(
  385. 'ok',
  386. $ret
  387. );
  388. }
  389. /**
  390. * 产品推荐设置
  391. * */
  392. public function recommendSet(Request $request){
  393. $this->validate($request, [
  394. 'id' => 'required',
  395. ]);
  396. $params = $request->only(['id','is_recommend']);
  397. $ret=$this->service->recommendSet($params);
  398. return $this->jsonResponse(
  399. 'ok',
  400. $ret
  401. );
  402. }
  403. /**
  404. * 更新产品的浏览量
  405. * */
  406. public function upProductPv(Request $request){
  407. $this->validate($request, [
  408. 'id' => 'required',
  409. ], [
  410. 'id.required' => 'id不能为空',
  411. ]);
  412. $productId=$request->input('id',0);
  413. $incValue=$request->input('inc_val',1);
  414. $ret=$this->service->upProductPv($productId,$incValue);
  415. return $this->jsonResponse(
  416. 'ok',
  417. $ret
  418. );
  419. }
  420. /**
  421. * 产品预览
  422. * */
  423. public function previewProduct(Request $request){
  424. $this->validate($request, [
  425. 'id' => 'required',
  426. ], [
  427. 'id.required' => 'id不能为空',
  428. ]);
  429. $productId=$request->input('id',0);
  430. $ret=$this->service->getProductRenderData(['id'=>$productId]);
  431. return $this->jsonResponse(
  432. 'ok',
  433. $ret
  434. );
  435. }
  436. /**
  437. * 根据类型id获取产品
  438. * */
  439. public function getPublishProductListByTypeId(Request $request){
  440. $params=$request->only(['page_size','page','type_id']);
  441. $ret=$this->service->getPublishProductListByTypeId($params);
  442. return $this->jsonResponse(
  443. 'ok',
  444. $ret
  445. );
  446. }
  447. /**
  448. * 根据标签id获取产品
  449. * */
  450. public function getPublishProductListByTagId(Request $request){
  451. $params=$request->only(['page_size','page','tag_id']);
  452. $ret=$this->service->getPublishProductListByTagId($params);
  453. return $this->jsonResponse(
  454. 'ok',
  455. $ret
  456. );
  457. }
  458. /**
  459. * 搜索获取已发布的产品
  460. * */
  461. public function getSearchProductList(Request $request){
  462. $params=$request->only(['page_size','keyword']);
  463. $ret=$this->service->getPublishProductList($params);
  464. return $this->jsonResponse(
  465. 'ok',
  466. $ret
  467. );
  468. }
  469. /**
  470. * 新闻排序上下移
  471. * @url /api/product/change-sort
  472. */
  473. public function changeProductSort(Request $request)
  474. {
  475. $this->validate($request, [
  476. 'id' => 'required',
  477. 'sort' => 'required',
  478. ]);
  479. $ret = $this->service->changeProductSort($request->input('id'), $request->input('sort'));
  480. return $this->jsonResponse('ok', $ret);
  481. }
  482. public function productSync(Request $request)
  483. {
  484. $this->validate($request, [
  485. 'list' => 'required',
  486. 'user_id' => 'required'
  487. ]);
  488. $params = $request->only(['list','user_id','product_model_data','product_type_data','product_tag_data', 'is_replace_oss']);
  489. $rst = $this->service->productCenterSync($params);
  490. return $this->jsonResponse('ok', $rst);
  491. }
  492. // 批量修改分类
  493. public function typePluralEdit(Request $request)
  494. {
  495. $this->validate($request, [
  496. 'ids' => 'required',
  497. ]);
  498. $ret= $this->service->typePluralEdit($request->all());
  499. return $this->jsonResponse('ok', $ret);
  500. }
  501. // 批量修改标签
  502. public function tagPluralEdit(Request $request)
  503. {
  504. $this->validate($request, [
  505. 'ids' => 'required',
  506. ]);
  507. $ret= $this->service->tagPluralEdit($request->all());
  508. return $this->jsonResponse('ok', $ret);
  509. }
  510. // 批量删除
  511. public function batchDeleteProduct(Request $request)
  512. {
  513. $this->validate($request, [
  514. 'ids' => 'required',
  515. ]);
  516. $ret= $this->service->batchDelete($request->all(),2);
  517. return $this->jsonResponse('ok', $ret);
  518. }
  519. // 批量修改状态
  520. public function batchStatusProduct(Request $request)
  521. {
  522. $this->validate($request, [
  523. 'ids' => 'required',
  524. ]);
  525. $ret= $this->service->batchStatus($request->all());
  526. return $this->jsonResponse('ok', $ret);
  527. }
  528. }