123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- <?php
- /**
- * Created by PhpStorm.
- * User: stanley-king
- * Date: 16/3/30
- * Time: 下午3:31
- */
- require_once (BASE_ROOT_PATH . '/helper/field_helper.php');
- require_once (BASE_ROOT_PATH . '/helper/model_helper.php');
- require_once (BASE_ROOT_PATH . '/helper/activity_helper.php');
- require_once (BASE_ROOT_PATH . '/helper/goods/commonid_helper.php');
- require_once (BASE_ROOT_PATH . '/helper/bonus_helper.php');
- require_once (BASE_ROOT_PATH . '/helper/brand_helper.php');
- require_once (BASE_ROOT_PATH . '/helper/user_session/favorite.php');
- require_once (BASE_ROOT_PATH . '/helper/user_session/anotice.php');
- class goods_helper
- {
- const fieldstr = 'goods_id,goods_commonid,goods_state,store_id,brand_id,gc_id,goods_name,
- goods_price,goods_lowest_price,goods_marketprice,goods_promotion_price,
- goods_jingle,goods_image,goods_salenum,evaluation_good_star,evaluation_count,goods_storage,goods_storage_alarm,is_virtual,is_presell,
- is_fcode,have_gift,goods_mobile_name,goods_spec,goods_collect,goods_addtime,goods_edittime';
- private $mUseMainPage;
- private $mPriceCalcer;
- public function __construct(bonus\IPriceCalculate $price_calcer,$main_page = true) {
- $this->mPriceCalcer = $price_calcer;
- $this->mUseMainPage = $main_page;
- }
- public function get_distinct($goods_commonids)
- {
- $goods_list = Model('goods')->cls()->getGoodsListByColorDistinct(array('goods_commonid' => array('in', $goods_commonids)),self::fieldstr);
- $goods_list = $this->goods_list_extend($goods_list);
- return $goods_list;
- }
- public function get_infos($goods_ids,$page=0,$order='goods_id asc')
- {
- $goods_list = Model('goods')->cls()->getGoodsOnlineList(array('goods_id' => array('in', $goods_ids)),self::fieldstr,$page,$order);
- $goods_list = $this->goods_list_extend($goods_list);
- return $goods_list;
- }
- //show_gid => 显示这个sku的详情
- public function get_spu($common_id,$show_gid,&$err)
- {
- $err = errcode::Success;
- $common_id = intval($common_id);
- $mod = Model('goods');
- $common_info = $mod->getGoodeCommonInfoByID($common_id);
- if(empty($common_info)) {
- $err = array('code' => errcode::ErrParamter,'msg' =>'商品不存在或者已经删除');
- return false;
- }
- $goods_list = $mod->getGoodsOnlineList(array('goods_commonid' => $common_id),self::fieldstr);
- if(empty($goods_list)) {
- $err = array('code' => errcode::ErrParamter,'msg' =>'抱歉,商品已经下架了,不能查看详情~');
- return false;
- }
- foreach ($goods_list as $goods_info) {
- $mod->click_goods($goods_info['goods_id']);
- }
- $ret = array();
- $gcommon = new goods_common($common_info,$goods_list,$show_gid);
- $ret['common_info'] = $gcommon->format();
- $ret_summary = $this->summary($goods_list,$related_goods);
- $summary = $ret_summary['summary'];
- if(!empty($related_goods)) {
- $ret_related = $this->online_summary($related_goods,$x);
- $summary = array_merge($summary,$ret_related['summary']);
- }
- $ret['summary'] = $summary;
- if(empty($ret['common_info']['images']))
- {
- $images = [];
- foreach ($summary as $item) {
- $images[] = $item['goods_image_url'];
- }
- $ret['common_info']['images'] = $images;
- }
- $ret['groupbuy'] = $ret_summary['groupbuy'];
- $ret['limitime'] = $ret_summary['limitime'];
- $ret['bundling'] = $ret_summary['bundling'];
- return $ret;
- }
- public function common_summary($common_ids, &$goods_ids, &$related_goods)
- {
- $mod = Model('goods');
- $goods_list = $mod->getGoodsListByColorDistinct(array('goods_commonid' => array('in', $common_ids)),self::fieldstr);
- $goods_ids = array();
- foreach ($goods_list as $goods) {
- $goods_ids[] = intval($goods['goods_id']);
- }
- return $this->summary($goods_list,$related_goods);
- }
- public function online_summary(&$goods_ids, &$related_goods)
- {
- $goods_list = Model('goods')->cls()->getGoodsOnlineList(array('goods_id' => array('in', $goods_ids)),self::fieldstr);
- $goods_ids = array();
- foreach ($goods_list as $goods) {
- $goods_id = intval($goods['goods_id']);
- $goods_ids[] = $goods_id;
- }
- $goods_ids = array_unique($goods_ids);
- $ret = $this->summary($goods_list,$related_goods);
- return $ret;
- }
- public function cart_summary($goods_ids,&$related_goods)
- {
- $goods_list = Model('goods')->cls()->getGoodsList(array('goods_id' => array('in', $goods_ids)),self::fieldstr);
- return $this->summary($goods_list,$related_goods);
- }
- public function summary($goods_list, &$related_goods)
- {
- $related_goods = [];
- $summary_list = [];
- $sort_summarys = [];
- $favorate = new user_session\favorite();
- $anotice = new user_session\anotice();
- foreach ($goods_list as $goods)
- {
- $summary = new goods_summary($this->mPriceCalcer,$goods);
- $info = $summary->format($act_type,$act_id,$favorate,$anotice,$this->mUseMainPage);
- $goods_id = intval($goods['goods_id']);
- $sort_summarys[$goods_id] = $info;
- $summary_list[] = $info;
- $related_goods = array_merge($related_goods,$summary->related_goods());
- }
- $related_goods = array_unique($related_goods);
- $gbuys = [];
- $ltimes = [];
- $bundling = [];
- foreach ($summary_list as $summary)
- {
- $act_id = intval($summary['act_id']);
- $act_type = intval($summary['act_type']);
- if($act_type == activity_helper::ACTIVITY_GROUPBUY)
- {
- if(isset($gbuys[$act_id]) == false) {
- $info = activity\groupbuy::instance()->get_info($act_id);
- $gbuys[$act_id] = $info;
- }
- }
- elseif($act_type == activity_helper::ACTIVITY_LIMITTIME)
- {
- if(isset($ltimes[$act_id]) == false) {
- $info = activity\limitime::instance()->get_info($act_id);
- $ltimes[$act_id] = $info;
- }
- }
- else {
- }
- $have_bundle = $summary['have_bundle'];
- if($have_bundle)
- {
- foreach ($summary['bundles'] as $bl_id) {
- $info = activity\bundling::instance()->get_info($bl_id,$goods_ids);
- $bundling[$bl_id] = $info;
- }
- }
- }
- $ret = array();
- $ret['summary'] = $summary_list;
- $ret['sort_summary'] = $sort_summarys;
- $ret['groupbuy'] = array();
- foreach ($gbuys as $key => $val) {
- array_push($ret['groupbuy'],$val);
- }
- $ret['limitime'] = array();
- foreach ($ltimes as $key => $val) {
- array_push($ret['limitime'],$val);
- }
- $ret['bundling'] = array();
- foreach ($bundling as $key => $val) {
- array_push($ret['bundling'],$val);
- }
- $ret['bargain_create'] = [];
- $mine_bargins = $this->bargains($summary_list);
- foreach ($summary_list as $summary)
- {
- $gid = $summary['goods_id'];
- $item = activity\bargain_goods::instance()->get_info($gid);
- $goods_num = $item['goods_num'];
- $storage = $summary['goods_storage'];
- if($storage > $goods_num) {
- $grabed_num = $goods_num - 1;
- } else {
- $grabed_num = $goods_num - $storage;
- }
- if(array_key_exists($gid,$mine_bargins)) {
- $item['bargain_id'] = $mine_bargins[$gid];
- }
- else {
- $item['bargain_id'] = 0;
- }
- $item['grabed_num'] = $grabed_num;
- if($item != false) {
- $ret['bargain_create'][] = $item;
- }
- }
- return $ret;
- }
- private function bargains($summary_list)
- {
- if(!session_helper::logined()) return [];
- $gids = [];
- foreach ($summary_list as $summary) {
- $gids[] = $summary['goods_id'];
- }
- $mod_bargain = Model('room_bargain');
- $items = $mod_bargain->getBargainByUserGoodIDs(session_helper::memberid(),$gids);
- $result = [];
- foreach ($items as $item) {
- $gid = intval($item['goods_id']);
- $result[$gid] = intval($item['bargain_id']);
- }
- return $result;
- }
- /**
- * 处理商品列表(抢购、限时折扣、商品图片)
- */
- private function goods_list_extend($goods_list)
- {
- if(empty($goods_list)) return $goods_list;
- foreach ($goods_list as $key => &$value)
- {
- $value['group_flag'] = false;
- $value['xianshi_flag'] = false;
- //商品图片url
- $value['goods_image_url'] = cthumb($value['goods_image'], 360, $value['store_id']);
- $value['goods_state'] = 1;
- $value['goods_storage_state'] = intval($value['goods_storage']) > 0 ? 1 : 0;
- $value['goods_name'] = $value['goods_mobile_name'];
- $fields = 'store_id,nc_distinct,gc_id,goods_image,goods_salenum,evaluation_good_star,evaluation_count,is_virtual,is_presell,' .
- 'is_fcode,have_gift,goods_storage,goods_storage_alarm,goods_attr,group_flag,xianshi_flag';
- field_helper::unset_column($value,$fields);
- }
- return $goods_list;
- }
- }
|