StoreApi.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. <?php
  2. namespace app\ebapi\controller;
  3. use app\core\model\routine\RoutineCode;//待完善
  4. use app\ebapi\model\store\StoreCategory;
  5. use app\ebapi\model\store\StoreOrderCartInfo;
  6. use app\ebapi\model\store\StoreProduct;
  7. use app\ebapi\model\store\StoreProductAttr;
  8. use app\ebapi\model\store\StoreProductRelation;
  9. use app\ebapi\model\store\StoreProductReply;
  10. use app\core\util\GroupDataService;
  11. use service\JsonService;
  12. use app\core\util\SystemConfigService;
  13. use service\UtilService;
  14. use app\core\util\MiniProgramService;
  15. use think\Cache;
  16. /**
  17. * 小程序产品和产品分类api接口
  18. * Class StoreApi
  19. * @package app\ebapi\controller
  20. *
  21. */
  22. class StoreApi extends AuthController
  23. {
  24. public static function whiteList()
  25. {
  26. return [
  27. 'goods_search',
  28. 'get_routine_hot_search',
  29. 'get_pid_cate',
  30. 'get_product_category',
  31. 'get_product_list',
  32. 'details',
  33. ];
  34. }
  35. /**
  36. * 分类搜索页面
  37. * @param Request $request
  38. * @return \think\response\Json
  39. */
  40. public function goods_search()
  41. {
  42. list($keyword) = UtilService::getMore([['keyword',0]],null,true);
  43. return JsonService::successful(StoreProduct::getSearchStorePage($keyword,$this->uid));
  44. }
  45. /**
  46. * 分类页面
  47. * @param Request $request
  48. * @return \think\response\Json
  49. */
  50. public function store1(Request $request)
  51. {
  52. $data = UtilService::postMore([['keyword',''],['cid',''],['sid','']],$request);
  53. $keyword = addslashes($data['keyword']);
  54. $cid = intval($data['cid']);
  55. $sid = intval($data['sid']);
  56. $category = null;
  57. if($sid) $category = StoreCategory::get($sid);
  58. if($cid && !$category) $category = StoreCategory::get($cid);
  59. $data['keyword'] = $keyword;
  60. $data['cid'] = $cid;
  61. $data['sid'] = $sid;
  62. return JsonService::successful($data);
  63. }
  64. /**
  65. * 一级分类
  66. * @return \think\response\Json
  67. */
  68. public function get_pid_cate(){
  69. $data = StoreCategory::pidByCategory(0,'id,cate_name');//一级分类
  70. if(Cache::has('one_pid_cate_list'))
  71. return JsonService::successful(Cache::get('one_pid_cate_list'));
  72. else{
  73. Cache::set('one_pid_cate_list',$data);
  74. return JsonService::successful($data);
  75. }
  76. }
  77. /**
  78. * 二级分类
  79. * @param Request $request
  80. * @return \think\response\Json
  81. */
  82. public function get_id_cate(Request $request){
  83. $data = UtilService::postMore([['id',0]],$request);
  84. $dataCateA = [];
  85. $dataCateA[0]['id'] = $data['id'];
  86. $dataCateA[0]['cate_name'] = '全部商品';
  87. $dataCateA[0]['pid'] = 0;
  88. $dataCateE = StoreCategory::pidBySidList($data['id']);//根据一级分类获取二级分类
  89. if($dataCateE) $dataCateE = $dataCateE->toArray();
  90. $dataCate = [];
  91. $dataCate = array_merge_recursive($dataCateA,$dataCateE);
  92. return JsonService::successful($dataCate);
  93. }
  94. /**
  95. * 分类页面产品
  96. * @param string $keyword
  97. * @param int $cId
  98. * @param int $sId
  99. * @param string $priceOrder
  100. * @param string $salesOrder
  101. * @param int $news
  102. * @param int $first
  103. * @param int $limit
  104. * @return \think\response\Json
  105. */
  106. public function get_product_list()
  107. {
  108. $data = UtilService::getMore([
  109. ['sid',0],
  110. ['cid',0],
  111. ['keyword',''],
  112. ['priceOrder',''],
  113. ['salesOrder',''],
  114. ['news',0],
  115. ['page',0],
  116. ['limit',0]
  117. ],$this->request);
  118. return JsonService::successful(StoreProduct::getProductList($data,$this->uid));
  119. }
  120. /**
  121. * 商品详情页
  122. * @param Request $request
  123. */
  124. public function details($id=0){
  125. if(!$id || !($storeInfo = StoreProduct::getValidProduct($id))) return JsonService::fail('商品不存在或已下架');
  126. $storeInfo['userCollect'] = StoreProductRelation::isProductRelation($id,$this->userInfo['uid'],'collect');
  127. list($productAttr,$productValue) = StoreProductAttr::getProductAttrDetail($id);
  128. setView($this->userInfo['uid'],$id,$storeInfo['cate_id'],'viwe');
  129. $data['storeInfo'] = StoreProduct::setLevelPrice($storeInfo,$this->uid,true);
  130. $data['similarity'] = StoreProduct::cateIdBySimilarityProduct($storeInfo['cate_id'],'id,store_name,image,price,sales,ficti',4);
  131. $data['productAttr'] = $productAttr;
  132. $data['productValue'] = $productValue;
  133. $data['priceName']=StoreProduct::getPacketPrice($storeInfo,$productValue);
  134. $data['reply'] = StoreProductReply::getRecProductReply($storeInfo['id']);
  135. $data['replyCount'] = StoreProductReply::productValidWhere()->where('product_id',$storeInfo['id'])->count();
  136. if($data['replyCount']){
  137. $goodReply=StoreProductReply::productValidWhere()->where('product_id',$storeInfo['id'])->where('product_score',5)->count();
  138. $data['replyChance']=bcdiv($goodReply,$data['replyCount'],2);
  139. $data['replyChance']=bcmul($data['replyChance'],100,3);
  140. }else $data['replyChance']=0;
  141. $data['mer_id'] = StoreProduct::where('id',$storeInfo['id'])->value('mer_id');
  142. return JsonService::successful($data);
  143. }
  144. /*
  145. * 获取产品是否收藏
  146. *
  147. * */
  148. public function get_product_collect($product_id=0)
  149. {
  150. return JsonService::successful(['userCollect'=>StoreProductRelation::isProductRelation($product_id,$this->userInfo['uid'],'collect')]);
  151. }
  152. /**
  153. * 获取产品评论
  154. * @param int $productId
  155. * @return \think\response\Json
  156. */
  157. public function get_product_reply($productId = 0){
  158. if(!$productId) return JsonService::fail('参数错误');
  159. $replyCount = StoreProductReply::productValidWhere()->where('product_id',$productId)->count();
  160. $reply = StoreProductReply::getRecProductReply($productId);
  161. return JsonService::successful(['replyCount'=>$replyCount,'reply'=>$reply]);
  162. }
  163. /**
  164. * 添加点赞
  165. * @param string $productId
  166. * @param string $category
  167. * @return \think\response\Json
  168. */
  169. public function like_product($productId = '',$category = 'product'){
  170. if(!$productId || !is_numeric($productId)) return JsonService::fail('参数错误');
  171. $res = StoreProductRelation::productRelation($productId,$this->userInfo['uid'],'like',$category);
  172. if(!$res) return JsonService::fail(StoreProductRelation::getErrorInfo());
  173. else return JsonService::successful();
  174. }
  175. /**
  176. * 取消点赞
  177. * @param string $productId
  178. * @param string $category
  179. * @return \think\response\Json
  180. */
  181. public function unlike_product($productId = '',$category = 'product'){
  182. if(!$productId || !is_numeric($productId)) return JsonService::fail('参数错误');
  183. $res = StoreProductRelation::unProductRelation($productId,$this->userInfo['uid'],'like',$category);
  184. if(!$res) return JsonService::fail(StoreProductRelation::getErrorInfo());
  185. else return JsonService::successful();
  186. }
  187. /**
  188. * 添加收藏
  189. * @param $productId
  190. * @param string $category
  191. * @return \think\response\Json
  192. */
  193. public function collect_product($productId,$category = 'product'){
  194. if(!$productId || !is_numeric($productId)) return JsonService::fail('参数错误');
  195. $res = StoreProductRelation::productRelation($productId,$this->userInfo['uid'],'collect',$category);
  196. if(!$res) return JsonService::fail(StoreProductRelation::getErrorInfo());
  197. else return JsonService::successful();
  198. }
  199. /**
  200. * 批量收藏
  201. * @param string $productId
  202. * @param string $category
  203. * @return \think\response\Json
  204. */
  205. public function collect_product_all($productId = '',$category = 'product'){
  206. if($productId == '') return JsonService::fail('参数错误');
  207. $productIdS = explode(',',$productId);
  208. $res = StoreProductRelation::productRelationAll($productIdS,$this->userInfo['uid'],'collect',$category);
  209. if(!$res) return JsonService::fail(StoreProductRelation::getErrorInfo());
  210. else return JsonService::successful('收藏成功');
  211. }
  212. /**
  213. * 取消收藏
  214. * @param $productId
  215. * @param string $category
  216. * @return \think\response\Json
  217. */
  218. public function uncollect_product($productId,$category = 'product'){
  219. if(!$productId || !is_numeric($productId)) return JsonService::fail('参数错误');
  220. $res = StoreProductRelation::unProductRelation($productId,$this->userInfo['uid'],'collect',$category);
  221. if(!$res) return JsonService::fail(StoreProductRelation::getErrorInfo());
  222. else return JsonService::successful();
  223. }
  224. /**
  225. * 获取收藏产品
  226. * @param int $first
  227. * @param int $limit
  228. * @return \think\response\Json
  229. */
  230. public function get_user_collect_product($page = 0,$limit = 8)
  231. {
  232. return JsonService::successful(StoreProductRelation::getUserCollectProduct($this->uid,$page,$limit));
  233. }
  234. /**
  235. * 获取收藏产品删除
  236. * @param int $first
  237. * @param int $limit
  238. * @return \think\response\Json
  239. */
  240. public function get_user_collect_product_del($pid=0)
  241. {
  242. if($pid){
  243. $list = StoreProductRelation::where('uid',$this->userInfo['uid'])->where('product_id',$pid)->delete();
  244. return JsonService::successful($list);
  245. }else
  246. return JsonService::fail('缺少参数');
  247. }
  248. /**
  249. * 获取订单内的某个产品信息
  250. * @param string $uni
  251. * @param string $productId
  252. * @return \think\response\Json
  253. */
  254. public function get_order_product($unique = ''){
  255. if(!$unique || !StoreOrderCartInfo::be(['unique'=>$unique]) || !($cartInfo = StoreOrderCartInfo::where('unique',$unique)->find())) return JsonService::fail('评价产品不存在!');
  256. return JsonService::successful($cartInfo);
  257. }
  258. /**
  259. * 获取一级和二级分类
  260. * @return \think\response\Json
  261. */
  262. public function get_product_category()
  263. {
  264. return JsonService::successful(StoreCategory::getProductCategory());
  265. }
  266. /**
  267. * 获取产品评论
  268. * @param string $productId
  269. * @param int $first
  270. * @param int $limit
  271. * @param int $type
  272. * @return \think\response\Json
  273. */
  274. public function product_reply_list($productId = '',$page = 0,$limit = 8, $type = 0)
  275. {
  276. if(!$productId || !is_numeric($productId)) return JsonService::fail('参数错误!');
  277. $list = StoreProductReply::getProductReplyList($productId,(int)$type,$page,$limit);
  278. return JsonService::successful($list);
  279. }
  280. /*
  281. * 获取评论数量和评论好评度
  282. * @param int $productId
  283. * @return \think\response\Json
  284. * */
  285. public function product_reply_count($productId = '')
  286. {
  287. if(!$productId) return JsonService::fail('缺少参数');
  288. return JsonService::successful(StoreProductReply::productReplyCount($productId));
  289. }
  290. /**
  291. * 获取商品属性数据
  292. * @param string $productId
  293. * @return \think\response\Json
  294. */
  295. public function product_attr_detail($productId = '')
  296. {
  297. if(!$productId || !is_numeric($productId)) return JsonService::fail('参数错误!');
  298. list($productAttr,$productValue) = StoreProductAttr::getProductAttrDetail($productId);
  299. return JsonService::successful(compact('productAttr','productValue'));
  300. }
  301. /*
  302. * 获取产品海报
  303. * @param int $id 产品id
  304. * */
  305. public function poster($id = 0){
  306. // if(!$id) return JsonService::fail('参数错误');
  307. // $productInfo = StoreProduct::getValidProduct($id,'store_name,id,price,image,code_path');
  308. // if(empty($productInfo)) return JsonService::fail('参数错误');
  309. // if(strlen($productInfo['code_path'])< 10) {
  310. // $path = 'public'.DS.'uploads'.DS.'codepath'.DS.'product';
  311. // $codePath = $path.DS.$productInfo['id'].'.jpg';
  312. // if(!file_exists($codePath)){
  313. // if(!is_dir($path)) mkdir($path,0777,true);
  314. // $res = file_put_contents($codePath,RoutineCode::getPages('pages/goods_details/index?id='.$productInfo['id']));
  315. // }
  316. // $res = StoreProduct::edit(['code_path'=>$codePath],$id);
  317. // if($res) $productInfo['code_path'] = $codePath;
  318. // else return JsonService::fail('没有查看权限');
  319. // }
  320. // $posterPath = createPoster($productInfo);
  321. // return JsonService::successful($posterPath);
  322. }
  323. /**
  324. * 产品海报二维码
  325. * @param int $id
  326. */
  327. public function product_promotion_code($id = 0){
  328. if(!$id) return JsonService::fail('参数错误ID不存在');
  329. $count = StoreProduct::validWhere()->count();
  330. if(!$count) return JsonService::fail('参数错误');
  331. $path = makePathToUrl('routine/product/',4);
  332. if($path == '') return JsonService::fail('生成上传目录失败,请检查权限!');
  333. $codePath = $path.$id.'_'.$this->userInfo['uid'].'_product.jpg';
  334. $domain = SystemConfigService::get('site_url').'/';
  335. if(!file_exists($codePath)){
  336. if(!is_dir($path)) mkdir($path,0777,true);
  337. $data='id='.$id;
  338. if($this->userInfo['is_promoter'] || SystemConfigService::get('store_brokerage_statu')==2) $data.='&pid='.$this->uid;
  339. $res = RoutineCode::getPageCode('pages/goods_details/index',$data,280);
  340. if($res) file_put_contents($codePath,$res);
  341. else return JsonService::fail('二维码生成失败');
  342. }
  343. return JsonService::successful($domain.$codePath);
  344. }
  345. /**
  346. * 热门搜索
  347. */
  348. public function get_routine_hot_search(){
  349. $routineHotSearch = GroupDataService::getData('routine_hot_search') ? :[];
  350. return JsonService::successful($routineHotSearch);
  351. }
  352. }