goods_helper.php 9.6 KB

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