Store.php 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <?php
  2. /**
  3. *
  4. * @author: xaboy<365615158@qq.com>
  5. * @day: 2017/12/12
  6. */
  7. namespace app\wap\controller;
  8. use app\admin\model\system\SystemConfig;
  9. use app\wap\model\store\StoreBargain;
  10. use app\wap\model\store\StoreBargainUser;
  11. use app\wap\model\store\StoreBargainUserHelp;
  12. use app\wap\model\store\StoreCategory;
  13. use app\wap\model\store\StoreCoupon;
  14. use app\wap\model\store\StoreSeckill;
  15. use app\wap\model\store\StoreCouponIssue;
  16. use app\wap\model\store\StoreCouponIssueUser;
  17. use app\wap\model\store\StoreCouponUser;
  18. use app\wap\model\store\StorePink;
  19. use app\wap\model\store\StoreProductReply;
  20. use app\wap\model\store\StoreCart;
  21. use app\wap\model\store\StoreOrder;
  22. use app\wap\model\store\StoreProduct;
  23. use app\wap\model\store\StoreProductAttr;
  24. use app\wap\model\store\StoreProductRelation;
  25. use app\wap\model\user\User;
  26. use app\wap\model\user\WechatUser;
  27. use app\wap\model\store\StoreCombination;
  28. use service\GroupDataService;
  29. use service\SystemConfigService;
  30. use service\UtilService;
  31. use think\Cache;
  32. use think\Request;
  33. use think\Url;
  34. use service\JsonService;
  35. class Store extends AuthController
  36. {
  37. public function index($keyword = '',$cid = '',$sid = '')
  38. {
  39. if($keyword != '') $keyword = base64_decode($keyword);
  40. $keyword = addslashes($keyword);
  41. $cid = intval($cid);
  42. $sid = intval($sid);
  43. $category = null;
  44. if($sid)
  45. $category = StoreCategory::get($sid);
  46. if($cid && !$category)
  47. $category = StoreCategory::get($cid);
  48. $this->assign(compact('keyword','cid','sid','category'));
  49. return $this->fetch();
  50. }
  51. public function category()
  52. {
  53. $_category = StoreCategory::all(function($query){
  54. $query->field('id,pid,cate_name')->where('is_show',1)->order('sort DESC');
  55. })->toArray();
  56. $category = [];
  57. foreach ($_category as $c){
  58. if(!$c['pid']){
  59. $c['child'] = [];
  60. $category[$c['id']] = $c;
  61. }
  62. }
  63. foreach ($_category as $c){
  64. if($c['pid']){
  65. $category[$c['pid']]['child'][] = $c;
  66. }
  67. }
  68. foreach ($category as $key => $value) {
  69. if(!isset($value['id'])){
  70. unset($category[$key]);
  71. }
  72. }
  73. $this->assign(compact('category'));
  74. return $this->fetch();
  75. }
  76. public function issue_coupon()
  77. {
  78. $list = $list = StoreCouponIssue::validWhere('A')->join('__STORE_COUPON__ B','A.cid = B.id')
  79. ->field('A.*,B.coupon_price,B.use_min_price')->order('B.sort DESC,A.id DESC')->select()->toArray();
  80. $sort = [];
  81. $lists= [];
  82. foreach ($list as &$v){
  83. $v['add_time'] = date('Y/m/d',$v['add_time']);
  84. $v['end_time'] = date('Y/m/d',$v['end_time']);
  85. if((int)$v['is_permanent']==0 && $v['remain_count'] >0){
  86. $sort[] = $v['is_get'] = StoreCouponIssueUser::be(['uid'=>$this->userInfo['uid'],'issue_coupon_id'=>$v['id']]) ? 1:0;
  87. array_push($lists,$v);
  88. }
  89. }
  90. array_multisort($sort,SORT_ASC,SORT_NUMERIC,$lists);
  91. $this->assign(compact('lists'));
  92. return $this->fetch();
  93. }
  94. public function detail($id = 0)
  95. {
  96. if(!$id || !($storeInfo = StoreProduct::getValidProduct($id))) return $this->failed('商品不存在或已下架!');
  97. $storeInfo['userLike'] = StoreProductRelation::isProductRelation($id,$this->userInfo['uid'],'like');
  98. $storeInfo['like_num'] = StoreProductRelation::productRelationNum($id,'like');
  99. $storeInfo['userCollect'] = StoreProductRelation::isProductRelation($id,$this->userInfo['uid'],'collect');
  100. list($productAttr,$productValue) = StoreProductAttr::getProductAttrDetail($id);
  101. setView($this->userInfo['uid'],$id,$storeInfo['cate_id'],'viwe');
  102. $this->assign([
  103. 'storeInfo'=>$storeInfo,
  104. 'similarity'=>StoreProduct::cateIdBySimilarityProduct($storeInfo['cate_id'],'id,store_name,image,price,sales',4),
  105. 'productAttr'=>$productAttr,
  106. 'productValue'=>$productValue,
  107. 'reply'=>StoreProductReply::getRecProductReply($storeInfo['id']),
  108. 'replyCount'=>StoreProductReply::productValidWhere()->where('product_id',$storeInfo['id'])->count(),
  109. 'mer_id' => StoreProduct::where('id',$storeInfo['id'])->value('mer_id')
  110. ]);
  111. return $this->fetch();
  112. }
  113. public function reply_list($productId = '')
  114. {
  115. if(!$productId || !is_numeric($productId)) return $this->failed('商品不存在!');
  116. $this->assign([
  117. 'productId'=>$productId,
  118. 'replyCount'=>StoreProductReply::productValidWhere()->where('product_id',$productId)->count(),
  119. 'picReplyCount'=>StoreProductReply::productValidWhere()->where('product_id',$productId)->where('pics',['<>',''],['<>','[]'])->count()
  120. ]);
  121. return $this->fetch();
  122. }
  123. public function cart()
  124. {
  125. return $this->fetch();
  126. }
  127. public function confirm_order($cartId = '')
  128. {
  129. if(!is_string($cartId) || !$cartId ){
  130. return $this->failed('请提交购买的商品!');
  131. }
  132. $cartGroup = StoreCart::getUserProductCartList($this->userInfo['uid'],$cartId,1);
  133. if(count($cartGroup['invalid']))
  134. return $this->failed($cartGroup['invalid'][0]['productInfo']['store_name'].'已失效!');
  135. if(!$cartGroup['valid']) return $this->failed('请提交购买的商品!');
  136. $cartInfo = $cartGroup['valid'];
  137. $priceGroup = StoreOrder::getOrderPriceGroup($cartInfo);
  138. $other = [
  139. 'offlinePostage'=>SystemConfigService::get('offline_postage'),
  140. 'integralRatio'=>SystemConfigService::get('integral_ratio')
  141. ];
  142. $usableCoupon = StoreCouponUser::beUsableCoupon($this->userInfo['uid'],$priceGroup['totalPrice']);
  143. $cartIdA = explode(',',$cartId);
  144. $seckill_id=0;
  145. $bargain_id=0;
  146. if(count($cartIdA) == 1){
  147. $cartInfoMark = StoreCart::where('id',$cartId)->find();
  148. if((int)$cartInfoMark['seckill_id']>0) $seckill_id = $cartInfoMark['seckill_id'];
  149. else if((int)$cartInfoMark['bargain_id']>0) $bargain_id = $cartInfoMark['bargain_id'];
  150. else $seckill_id=0;
  151. }
  152. $this->assign([
  153. 'usableCoupon'=>$usableCoupon,
  154. 'seckill_id'=>$seckill_id,
  155. 'bargain_id'=>$bargain_id,
  156. 'cartInfo'=>$cartInfo,
  157. 'priceGroup'=>$priceGroup,
  158. 'orderKey'=>StoreOrder::cacheOrderInfo($this->userInfo['uid'],$cartInfo,$priceGroup,$other),
  159. 'offlinePostage'=>$other['offlinePostage'],
  160. 'userInfo'=>User::getUserInfo($this->userInfo['uid']),
  161. 'integralRatio'=>$other['integralRatio']
  162. ]);
  163. return $this->fetch();
  164. }
  165. //获取列表
  166. public function get_list(){
  167. return JsonService::successful(StoreCombination::get_list(20));
  168. }
  169. /**
  170. * 秒杀列表页
  171. *
  172. */
  173. public function seckill_index(){
  174. $storeSeckill=StoreSeckill::where('is_del',0)->where('status',1)->where('start_time','<',time())->where('stop_time','>',time())->order('sort desc')->select()->toArray();
  175. $this->assign('seckillProduct',$storeSeckill);
  176. return $this->fetch();
  177. }
  178. /**
  179. * 秒杀详情页
  180. * @param string $id
  181. */
  182. public function seckill_detail($id = ''){
  183. if(!$id || !($storeInfo = StoreSeckill::getValidProduct($id))) return $this->failed('商品不存在或已下架!');
  184. $storeInfo['userLike'] = StoreProductRelation::isProductRelation($storeInfo['product_id'],$this->userInfo['uid'],'like','product_seckill');
  185. $storeInfo['like_num'] = StoreProductRelation::productRelationNum($storeInfo['product_id'],'like','product_seckill');
  186. $storeInfo['userCollect'] = StoreProductRelation::isProductRelation($storeInfo['product_id'],$this->userInfo['uid'],'collect','product_seckill');
  187. list($productAttr,$productValue) = StoreProductAttr::getProductAttrDetail($storeInfo['product_id']);
  188. $wechatInfo = WechatUser::get($this->userInfo['uid']);
  189. setView($this->userInfo['uid'],$id,$storeInfo['product_id'],'viwe','seckill');
  190. //是否关注
  191. if(!$wechatInfo) $isFollow = 0;
  192. else $isFollow = $wechatInfo['subscribe'];
  193. $this->assign([
  194. 'storeInfo'=>$storeInfo,
  195. // 'similarity'=>StoreProduct::cateIdBySimilarityProduct($storeInfo['cate_id'],'id,store_name,image,price,sales',4),
  196. 'productAttr'=>$productAttr,
  197. 'productValue'=>$productValue,
  198. 'reply'=>StoreProductReply::getRecProductReply($storeInfo['product_id']),
  199. 'replyCount'=>StoreProductReply::productValidWhere()->where('product_id',$storeInfo['product_id'])->count(),
  200. 'mer_id' => 0,
  201. 'merchant'=>null,
  202. 'site'=>SystemConfigService::more(['wechat_qrcode','wechat_name','wechat_avatar']),
  203. 'isFollow'=>$isFollow
  204. ]);
  205. return $this->fetch();
  206. }
  207. }