goods_helper.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 16/3/30
  6. * Time: 下午3:31
  7. */
  8. require_once (BASE_ROOT_PATH . '/helper/field_helper.php');
  9. require_once (BASE_ROOT_PATH . '/helper/model_helper.php');
  10. require_once (BASE_ROOT_PATH . '/helper/activity_helper.php');
  11. require_once (BASE_ROOT_PATH . '/helper/goods/commonid_helper.php');
  12. require_once (BASE_ROOT_PATH . '/helper/bonus_helper.php');
  13. require_once (BASE_ROOT_PATH . '/helper/brand_helper.php');
  14. require_once (BASE_ROOT_PATH . '/helper/user_session/favorite.php');
  15. require_once (BASE_ROOT_PATH . '/helper/user_session/anotice.php');
  16. class goods_helper
  17. {
  18. const fieldstr = 'goods_id,goods_commonid,goods_state,store_id,brand_id,gc_id,goods_name,
  19. goods_price,goods_lowest_price,goods_marketprice,goods_promotion_price,
  20. goods_jingle,goods_image,goods_salenum,evaluation_good_star,evaluation_count,goods_storage,goods_storage_alarm,is_virtual,is_presell,
  21. is_fcode,have_gift,goods_mobile_name,goods_spec,goods_collect,goods_addtime,goods_edittime';
  22. private $mUseMainPage;
  23. private $mPriceCalcer;
  24. public function __construct(bonus\IPriceCalculate $price_calcer,$main_page = true) {
  25. $this->mPriceCalcer = $price_calcer;
  26. $this->mUseMainPage = $main_page;
  27. }
  28. public function get_distinct($goods_commonids)
  29. {
  30. $goods_list = Model('goods')->cls()->getGoodsListByColorDistinct(['goods_commonid' => ['in', $goods_commonids]],self::fieldstr);
  31. $goods_list = $this->goods_list_extend($goods_list);
  32. return $goods_list;
  33. }
  34. public function get_infos($goods_ids,$page=0,$order='goods_id asc')
  35. {
  36. $goods_list = Model('goods')->cls()->getGoodsOnlineList(['goods_id' => ['in', $goods_ids]],self::fieldstr,$page,$order);
  37. $goods_list = $this->goods_list_extend($goods_list);
  38. return $goods_list;
  39. }
  40. public function order_goods($goods_ids,$page=0,$order='goods_id asc')
  41. {
  42. $goods_list = Model('goods')->cls()->getGoodsList(['goods_id' => ['in', $goods_ids]],self::fieldstr,$page,$order);
  43. return $goods_list;
  44. }
  45. //show_gid => 显示这个sku的详情
  46. public function get_spu($common_id,$show_gid,&$err)
  47. {
  48. $err = errcode::Success;
  49. $common_id = intval($common_id);
  50. $mod = Model('goods');
  51. $common_info = $mod->getGoodeCommonInfoByID($common_id);
  52. if(empty($common_info)) {
  53. $err = ['code' => errcode::ErrParamter,'msg' =>'商品不存在或者已经删除'];
  54. return false;
  55. }
  56. $goods_list = $mod->getGoodsOnlineList(['goods_commonid' => $common_id],self::fieldstr);
  57. if(empty($goods_list)) {
  58. $err = ['code' => errcode::ErrParamter,'msg' =>'抱歉,商品已经下架了,不能查看详情~'];
  59. return false;
  60. }
  61. foreach ($goods_list as $goods_info) {
  62. $mod->click_goods($goods_info['goods_id']);
  63. }
  64. $ret = [];
  65. $gcommon = new goods_common($common_info,$goods_list,$show_gid);
  66. $ret['common_info'] = $gcommon->format();
  67. $ret_summary = $this->summary($goods_list,$related_goods);
  68. $summary = $ret_summary['summary'];
  69. if(!empty($related_goods)) {
  70. $ret_related = $this->online_summary($related_goods,$x);
  71. $summary = array_merge($summary,$ret_related['summary']);
  72. }
  73. $ret['summary'] = $summary;
  74. if(empty($ret['common_info']['images']))
  75. {
  76. $images = [];
  77. foreach ($summary as $item) {
  78. $images[] = $item['goods_image_url'];
  79. }
  80. $ret['common_info']['images'] = $images;
  81. }
  82. $ret['groupbuy'] = $ret_summary['groupbuy'];
  83. $ret['limitime'] = $ret_summary['limitime'];
  84. $ret['bundling'] = $ret_summary['bundling'];
  85. return $ret;
  86. }
  87. public function common_summary($common_ids, &$goods_ids, &$related_goods)
  88. {
  89. $mod = Model('goods');
  90. $goods_list = $mod->getGoodsListByColorDistinct(['goods_commonid' => ['in', $common_ids]],self::fieldstr);
  91. $goods_ids = [];
  92. foreach ($goods_list as $goods) {
  93. $goods_ids[] = intval($goods['goods_id']);
  94. }
  95. return $this->summary($goods_list,$related_goods);
  96. }
  97. public function online_summary(&$goods_ids, &$related_goods)
  98. {
  99. $goods_list = Model('goods')->cls()->getGoodsOnlineList(['goods_id' => ['in', $goods_ids]],self::fieldstr);
  100. $goods_ids = [];
  101. foreach ($goods_list as $goods) {
  102. $goods_id = intval($goods['goods_id']);
  103. $goods_ids[] = $goods_id;
  104. }
  105. $goods_ids = array_unique($goods_ids);
  106. $ret = $this->summary($goods_list,$related_goods);
  107. return $ret;
  108. }
  109. public function cart_summary($goods_ids,&$related_goods)
  110. {
  111. $goods_list = Model('goods')->cls()->getGoodsList(['goods_id' => ['in', $goods_ids]],self::fieldstr);
  112. return $this->summary($goods_list,$related_goods);
  113. }
  114. public function summary($goods_list, &$related_goods,$vgoods_price_calc = null)
  115. {
  116. $related_goods = [];
  117. $summary_list = [];
  118. $sort_summarys = [];
  119. $favorate = new user_session\favorite();
  120. $anotice = new user_session\anotice();
  121. foreach ($goods_list as $goods)
  122. {
  123. $summary = new goods_summary($this->mPriceCalcer,$goods);
  124. $info = $summary->format($act_type,$act_id,$favorate,$anotice,$this->mUseMainPage,$vgoods_price_calc);
  125. $goods_id = intval($goods['goods_id']);
  126. $sort_summarys[$goods_id] = $info;
  127. $summary_list[] = $info;
  128. $related_goods = array_merge($related_goods,$summary->related_goods());
  129. }
  130. $related_goods = array_unique($related_goods);
  131. $gbuys = [];
  132. $ltimes = [];
  133. $bundling = [];
  134. foreach ($summary_list as $summary)
  135. {
  136. $act_id = intval($summary['act_id']);
  137. $act_type = intval($summary['act_type']);
  138. if($act_type == activity_helper::ACTIVITY_GROUPBUY)
  139. {
  140. if(isset($gbuys[$act_id]) == false) {
  141. $info = activity\groupbuy::instance()->get_info($act_id);
  142. $gbuys[$act_id] = $info;
  143. }
  144. }
  145. elseif($act_type == activity_helper::ACTIVITY_LIMITTIME)
  146. {
  147. if(isset($ltimes[$act_id]) == false) {
  148. $info = activity\limitime::instance()->get_info($act_id);
  149. $ltimes[$act_id] = $info;
  150. }
  151. }
  152. $have_bundle = $summary['have_bundle'];
  153. if($have_bundle)
  154. {
  155. foreach ($summary['bundles'] as $bl_id) {
  156. $info = activity\bundling::instance()->get_info($bl_id,$goods_ids);
  157. $bundling[$bl_id] = $info;
  158. }
  159. }
  160. }
  161. $ret = [];
  162. $ret['summary'] = $summary_list;
  163. $ret['sort_summary'] = $sort_summarys;
  164. $ret['groupbuy'] = [];
  165. foreach ($gbuys as $key => $val) {
  166. array_push($ret['groupbuy'],$val);
  167. }
  168. $ret['limitime'] = [];
  169. foreach ($ltimes as $key => $val) {
  170. array_push($ret['limitime'],$val);
  171. }
  172. $ret['bundling'] = [];
  173. foreach ($bundling as $key => $val) {
  174. array_push($ret['bundling'],$val);
  175. }
  176. $ret['bargain_create'] = [];
  177. $mine_bargins = $this->bargains($summary_list);
  178. foreach ($summary_list as $summary)
  179. {
  180. $gid = $summary['goods_id'];
  181. $item = activity\bargain_goods::instance()->get_info($gid);
  182. $goods_num = $item['goods_num'];
  183. $storage = $summary['goods_storage'];
  184. if($storage > $goods_num) {
  185. $grabed_num = $goods_num - 1;
  186. } else {
  187. $grabed_num = $goods_num - $storage;
  188. }
  189. if(array_key_exists($gid,$mine_bargins)) {
  190. $item['bargain_id'] = $mine_bargins[$gid];
  191. }
  192. else {
  193. $item['bargain_id'] = 0;
  194. }
  195. $item['grabed_num'] = $grabed_num;
  196. if($item != false) {
  197. $ret['bargain_create'][] = $item;
  198. }
  199. }
  200. return $ret;
  201. }
  202. private function bargains($summary_list)
  203. {
  204. if(!session_helper::logined()) return [];
  205. $gids = [];
  206. foreach ($summary_list as $summary) {
  207. $gids[] = $summary['goods_id'];
  208. }
  209. $mod_bargain = Model('room_bargain');
  210. $items = $mod_bargain->getBargainByUserGoodIDs(session_helper::memberid(),$gids);
  211. $result = [];
  212. foreach ($items as $item) {
  213. $gid = intval($item['goods_id']);
  214. $result[$gid] = intval($item['bargain_id']);
  215. }
  216. return $result;
  217. }
  218. /**
  219. * 处理商品列表(抢购、限时折扣、商品图片)
  220. */
  221. private function goods_list_extend($goods_list)
  222. {
  223. if(empty($goods_list)) return $goods_list;
  224. foreach ($goods_list as $key => &$value)
  225. {
  226. $value['group_flag'] = false;
  227. $value['xianshi_flag'] = false;
  228. //商品图片url
  229. $value['goods_image_url'] = cthumb($value['goods_image'], 360, $value['store_id']);
  230. $value['goods_state'] = 1;
  231. $value['goods_storage_state'] = intval($value['goods_storage']) > 0 ? 1 : 0;
  232. $value['goods_name'] = $value['goods_mobile_name'];
  233. $fields = 'store_id,nc_distinct,gc_id,goods_image,goods_salenum,evaluation_good_star,evaluation_count,is_virtual,is_presell,' .
  234. 'is_fcode,have_gift,goods_storage,goods_storage_alarm,goods_attr,group_flag,xianshi_flag';
  235. field_helper::unset_column($value,$fields);
  236. }
  237. return $goods_list;
  238. }
  239. }