Goodssku.php 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <?php
  2. /**
  3. * Goodssku.php
  4. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  5. * =========================================================
  6. * Copy right 2015-2025 山西牛酷信息科技有限公司, 保留所有权利。
  7. * ----------------------------------------------
  8. * 官方网址: http://www.niushop.com.cn
  9. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
  10. * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
  11. * =========================================================
  12. * @author : niuteam
  13. * @date : 2015.1.17
  14. * @version : v1.0.0.0
  15. */
  16. namespace app\api\controller;
  17. use app\model\goods\Goods;
  18. use app\model\goods\GoodsAttribute;
  19. use app\model\shop\Shop as ShopModel;
  20. /**
  21. * 商品sku
  22. * @author Administrator
  23. *
  24. */
  25. class Goodssku extends BaseApi
  26. {
  27. /**
  28. * 基础信息
  29. */
  30. public function info()
  31. {
  32. $sku_id = isset($this->params['sku_id']) ? $this->params['sku_id'] : 0;
  33. if (empty($sku_id)) {
  34. return $this->response($this->error('', 'REQUEST_SKU_ID'));
  35. }
  36. $goods = new Goods();
  37. $field = 'sku_id,sku_name,sku_spec_format,price,market_price,discount_price,promotion_type,start_time,end_time,stock,sku_image,sku_images,goods_spec_format,site_id,site_name,category_id,goods_id';
  38. $info = $goods->getGoodsSkuInfo([ [ 'sku_id', '=', $sku_id ] ], $field);
  39. if(!empty($info['data']['goods_spec_format'])) {
  40. $shuju = json_decode($info['data']['goods_spec_format'], true);
  41. foreach ($shuju as $k => $v) {
  42. foreach ($shuju[$k]['value'] as &$v1) {
  43. $goodssku = $goods->getGoodsSkuInfo([['sku_id', '=', $v1['sku_id']]], 'stock');
  44. $v1['stock'] = $goodssku['data']['stock'];
  45. }
  46. }
  47. $info['data']['goods_spec_format'] = $shuju;
  48. }
  49. $good_sku_data= $goods->getGoodsSkuList([['goods_id','=',$info['data']['goods_id']]]);
  50. $data = $goods->getGoodsInfo(['goods_id'=>$info['data']['goods_id']],'goods_name,price,pay_num1,price1,pay_num2,price2,pay_num3,price3,sku_id,introduction,goods_content,goods_image,is_free_shipping');
  51. $g= explode(',',$data['data']['goods_image']);
  52. $data['data']['show_image'] = $g[0];
  53. $goodlist = $goods->getGoodsList(['category_id'=>$info['data']['category_id']],'goods_id,goods_name,goods_image,price,pay_num1,price1,pay_num2,price2,pay_num3,price3,sku_id','','5');
  54. foreach ($goodlist['data'] as &$v){
  55. $goods_image= explode(',',$v['goods_image']);
  56. $v['goods_image']=$goods_image[0];
  57. }
  58. $info['data']['goods_detail'] = $data['data'];
  59. $info['data']['tuijian']=$goodlist['data'];
  60. $info['data']['good_sku_data'] = $good_sku_data['data'];
  61. return $this->response($info);
  62. }
  63. /**
  64. * 详情信息
  65. */
  66. public function detail()
  67. {
  68. $sku_id = isset($this->params['sku_id']) ? $this->params['sku_id'] : 0;
  69. if (empty($sku_id)) {
  70. return $this->response($this->error('', 'REQUEST_SKU_ID'));
  71. }
  72. $res = [];
  73. $goods = new Goods();
  74. $goods_sku_detail = $goods->getGoodsSkuDetail($sku_id);
  75. $goods_sku_detail = $goods_sku_detail['data'];
  76. $res['goods_sku_detail'] = $goods_sku_detail;
  77. // 店铺信息
  78. $shop_model = new ShopModel();
  79. $shop_info = $shop_model->getShopInfo([ [ 'site_id', '=', $goods_sku_detail['site_id'] ] ], 'site_id,site_name,is_own,logo,avatar,banner,seo_description,qq,ww,telephone,shop_desccredit,shop_servicecredit,shop_deliverycredit,shop_baozh,shop_baozhopen,shop_baozhrmb,shop_qtian,shop_zhping,shop_erxiaoshi,shop_tuihuo,shop_shiyong,shop_shiti,shop_xiaoxie,shop_sales,sub_num');
  80. $shop_info = $shop_info['data'];
  81. $res['shop_info'] = $shop_info;
  82. return $this->response($this->success($res));
  83. }
  84. /**
  85. * 列表信息
  86. */
  87. public function page()
  88. {
  89. $page = isset($this->params['page']) ? $this->params['page'] : 1;
  90. $page_size = isset($this->params['page_size']) ? $this->params['page_size'] : PAGE_LIST_ROWS;
  91. $site_id = isset($this->params['site_id']) ? $this->params['site_id'] : 0;//站点id
  92. $goods_id_arr = isset($this->params['goods_id_arr']) ? $this->params['goods_id_arr'] : '';//sku_id数组
  93. $keyword = isset($this->params['keyword']) ? $this->params['keyword'] : '';//关键词
  94. $category_id = isset($this->params['category_id']) ? $this->params['category_id'] : 0;//分类
  95. $category_level = isset($this->params['category_level']) ? $this->params['category_level'] : 0;//分类等级
  96. $brand_id = isset($this->params['brand_id']) ? $this->params['brand_id'] : 0;//品牌
  97. $min_price = isset($this->params['min_price']) ? $this->params['min_price'] : 0;//价格区间,小
  98. $max_price = isset($this->params['max_price']) ? $this->params['max_price'] : 0;//价格区间,大
  99. $is_free_shipping = isset($this->params['is_free_shipping']) ? $this->params['is_free_shipping'] : 0;//是否免邮
  100. $is_own = isset($this->params['is_own']) ? $this->params['is_own'] : '';//是否自营
  101. $order = isset($this->params['order']) ? $this->params['order'] : "create_time";//排序(综合、销量、价格)
  102. $sort = isset($this->params['sort']) ? $this->params['sort'] : "desc";//升序、降序
  103. $attr = isset($this->params['attr']) ? $this->params['attr'] : "";//属性json
  104. $condition = [];
  105. if (!empty($site_id)) {
  106. $condition[] = [ 'gs.site_id', '=', $site_id ];
  107. }
  108. if (!empty($goods_id_arr)) {
  109. $condition[] = [ 'gs.goods_id', 'in', $goods_id_arr ];
  110. }
  111. if (!empty($keyword)) {
  112. $condition[] = [ 'g.goods_name|gs.sku_name|gs.keywords', 'like', '%' . $keyword . '%' ];
  113. }
  114. if (!empty($category_id) && !empty($category_level)) {
  115. $condition[] = [ 'gs.category_id_' . $category_level, '=', $category_id ];
  116. }
  117. if (!empty($brand_id)) {
  118. $condition[] = [ 'gs.brand_id', '=', $brand_id ];
  119. }
  120. if ($min_price != "" && $max_price != "") {
  121. $condition[] = [ 'gs.discount_price', 'between', [ $min_price, $max_price ] ];
  122. } elseif ($min_price != "") {
  123. $condition[] = [ 'gs.discount_price', '<=', $min_price ];
  124. } elseif ($max_price != "") {
  125. $condition[] = [ 'gs.discount_price', '>=', $max_price ];
  126. }
  127. if (!empty($is_free_shipping)) {
  128. $condition[] = [ 'gs.is_free_shipping', '=', $is_free_shipping ];
  129. }
  130. if ($is_own !== '') {
  131. $condition[] = [ 'gs.is_own', '=', $is_own ];
  132. }
  133. // 非法参数进行过滤
  134. if ($sort != "desc" && $sort != "asc") {
  135. $sort = "";
  136. }
  137. // 非法参数进行过滤
  138. if ($order != '') {
  139. if ($order != "sale_num" && $order != "discount_price") {
  140. $order = 'gs.create_time';
  141. }
  142. $order_by = $order . ' ' . $sort;
  143. } else {
  144. $order_by = 'gs.sort desc,gs.create_time desc';
  145. }
  146. // 拿到商品属性,查询sku_id
  147. if (!empty($attr)) {
  148. $attr = json_decode($attr, true);
  149. $attr_id = [];
  150. $attr_value_id = [];
  151. foreach ($attr as $k => $v) {
  152. $attr_id[] = $v['attr_id'];
  153. $attr_value_id[] = $v['attr_value_id'];
  154. }
  155. $goods_attribute = new GoodsAttribute();
  156. $attribute_condition = [
  157. [ 'attr_id', 'in', implode(",", $attr_id) ],
  158. [ 'attr_value_id', 'in', implode(",", $attr_value_id) ],
  159. ];
  160. $attribute_list = $goods_attribute->getAttributeIndexList($attribute_condition, 'sku_id');
  161. $attribute_list = $attribute_list['data'];
  162. if (!empty($attribute_list)) {
  163. $sku_id = [];
  164. foreach ($attribute_list as $k => $v) {
  165. $sku_id[] = $v['sku_id'];
  166. }
  167. $condition[] = [
  168. [ 'gs.sku_id', 'in', implode(",", $sku_id) ]
  169. ];
  170. }
  171. }
  172. $condition[] = [ 'gs.goods_state', '=', 1 ];
  173. $condition[] = [ 'gs.verify_state', '=', 1 ];
  174. $condition[] = [ 'gs.is_delete', '=', 0 ];
  175. $field = 'gs.goods_id,gs.sku_id,gs.sku_name,gs.price,gs.market_price,gs.discount_price,gs.stock,gs.sale_num,gs.sku_image,gs.goods_name,gs.site_id,gs.website_id,gs.is_own,gs.is_free_shipping,gs.introduction,gs.promotion_type,g.goods_image';
  176. $alias = 'gs';
  177. $join = [
  178. [ 'goods g', 'gs.sku_id = g.sku_id', 'inner' ]
  179. ];
  180. $goods = new Goods();
  181. $list = $goods->getGoodsSkuPageList($condition, $page, $page_size, $order_by, $field, $alias, $join);
  182. return $this->response($list);
  183. }
  184. /**
  185. * 商品推荐
  186. * @return string
  187. */
  188. public function recommend()
  189. {
  190. $page = isset($this->params['page']) ? $this->params['page'] : 1;
  191. $page_size = isset($this->params['page_size']) ? $this->params['page_size'] : PAGE_LIST_ROWS;
  192. $condition = [
  193. [ 'gs.goods_state', '=', 1 ],
  194. [ 'gs.verify_state', '=', 1 ],
  195. [ 'gs.is_delete', '=', 0 ]
  196. ];
  197. $goods = new Goods();
  198. $field = 'gs.goods_id,gs.sku_id,gs.sku_name,gs.price,gs.market_price,gs.discount_price,gs.stock,gs.sale_num,gs.sku_image,gs.goods_name,gs.site_id,gs.website_id,gs.is_own,gs.is_free_shipping,gs.introduction,gs.promotion_type,g.goods_image';
  199. $alias = 'gs';
  200. $join = [
  201. [ 'goods g', 'gs.sku_id = g.sku_id', 'inner' ]
  202. ];
  203. $order_by = 'gs.sort desc,gs.create_time desc';
  204. $list = $goods->getGoodsSkuPageList($condition, $page, $page_size, $order_by, $field, $alias, $join);
  205. return $this->response($list);
  206. }
  207. }