StoreApi.php 15 KB

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