ajaxReturn($res); } } /** * 获取商家推荐商品 */ public function getSellGoods() { if (IS_POST) { $store_id = self::$store_id; $merchant_id = self::$merchant_id; $StoreXcxConfigModel = D('RetailStoreXcxConfig'); $store_config = $StoreXcxConfigModel->getFind(array($StoreXcxConfigModel::STORE_ID => $store_id)); if (!empty($store_config) && $store_config[$StoreXcxConfigModel::RECOMMEND_STATUS] == 0) { $result['status'] = 0; $result['msg'] = '该门店暂未开启推荐商品'; $this->ajaxReturn($result); } $HostModel = D('RetailHost'); $GoodsModel = D('RetailGoods'); $where['h.' . $HostModel::STORE_ID] = $store_id; $where['h.' . $HostModel::MERCHANT_ID] = $merchant_id; $where['h.' . $HostModel::STATUS] = 1; $where['h.' . $HostModel::TYPE] = 1; $where['g.' . $GoodsModel::ONLINE_STATE] = 1; $where['g.' . $GoodsModel::STATUS] = 0; $where['g.' . $GoodsModel::ONLINE_PRICE] = array('gt', 0); $field = array( 'h.*', 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NUMBER, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . $GoodsModel::VIP_ONLINE_STATE, 'g.' . 'attribute_state', 'g.' . $GoodsModel::PLUS_MEM_STATUS, 'g.' . $GoodsModel::PLUS_PRICE, 'g.' . 'shop_mem_status', 'g.' . 'shop_mem_price' ); $SkuGoodsModel = D('RetailSkuGoods'); $goods = $HostModel->getHostGoods($where, $field, 'h.' . $HostModel::SORT . ' asc,g.' . $GoodsModel::GOODS_ORDER . ' asc'); if (!empty($goods)) { foreach ($goods as &$val) { $val['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $val[$HostModel::GOODS_ID]); $val['goods_image'] = getGoodsImage($val[$GoodsModel::GOODS_IMG_ID], $store_id); if ($val['attribute_state'] == 2) { $goodsSku = $SkuGoodsModel->getFind(array('state' => 0, 'goods_id' => $val[$HostModel::GOODS_ID])); if (empty($goodsSku)) { $val['attribute_state'] = 1; $val['goods_num'] = 0; } } $val['maxBuyNum'] = (int)$val['goods_num']; } $res['status'] = 1; $res['info'] = $goods; } else { $res['status'] = 0; $res['msg'] = '暂无推荐商品'; } } else { $res['status'] = 0; $res['msg'] = '网络错误'; } $this->ajaxReturn($res); } /** * 获取魔方数据 */ public function getMagicCube() { $store_id = self::$store_id; $MagicStoreModel = D('RetailMagicStore'); $StoreXcxConfigModel = D('RetailStoreXcxConfig'); $store_config = $StoreXcxConfigModel->getFind(array($StoreXcxConfigModel::STORE_ID => $store_id)); if (empty($store_config) || $store_config[$StoreXcxConfigModel::MAGIC_STATUS] == 0) { $result['status'] = 0; $result['msg'] = '该门店暂未开启魔方'; $this->ajaxReturn($result); } $magic = $MagicStoreModel->getSelect(array($MagicStoreModel::STORE_ID => $store_id, $MagicStoreModel::STATUS => 1), '*', $MagicStoreModel::ID . ' asc'); if (!empty($magic)) { foreach ($magic as &$val) { $val['child_img'] = getImage($val[$MagicStoreModel::CHILD_IMG_ID]); $val['child_img_1'] = getImage($val[$MagicStoreModel::CHILD_IMG_ID_1]); $val['child_img_2'] = getImage($val[$MagicStoreModel::CHILD_IMG_ID_2]); $val['child_img_3'] = getImage($val[$MagicStoreModel::CHILD_IMG_ID_3]); $MagicCubeModel = D('RetailMagicCube'); if ($val[$MagicStoreModel::MC_ID]) { $magic_cube = $MagicCubeModel->getFind(array($MagicCubeModel::ID => $val[$MagicStoreModel::MC_ID])); if ($magic_cube[$MagicCubeModel::TYPE] == 1) { $val['url'] = $magic_cube[$MagicCubeModel::URL] . '?id=' . $val[$MagicStoreModel::LINK_ID]; } else { $val['url'] = $magic_cube[$MagicCubeModel::URL]; } $val['url'] = str_replace('pages/recharge', 'pages/mine/recharge', $val['url']); $val['url'] = str_replace('pages/details', 'pages/product/details', $val['url']); } else { $val['url'] = '/pages/web/web?url=' . $val[$MagicStoreModel::URL]; } for ($i = 1; $i < 4; $i++) { if ($val[$MagicStoreModel::MC_ID . '_' . $i]) { $magic_cube = $MagicCubeModel->getFind(array($MagicCubeModel::ID => $val[$MagicStoreModel::MC_ID . '_' . $i])); if ($magic_cube[$MagicCubeModel::TYPE] == 1) { $val['url_' . $i] = $magic_cube[$MagicCubeModel::URL] . '?id=' . $val[$MagicStoreModel::LINK_ID . '_' . $i]; } else { $val['url_' . $i] = $magic_cube[$MagicCubeModel::URL]; } $val['url_' . $i] = str_replace('pages/recharge', 'pages/mine/recharge', $val['url_' . $i]); $val['url_' . $i] = str_replace('pages/details', 'pages/product/details', $val['url_' . $i]); } else { $val['url_' . $i] = '/pages/web/web?url=' . $val[$MagicStoreModel::URL . '_' . $i]; } } } $result['magic'] = $magic; $result['status'] = 1; $result['msg'] = '查询成功'; } else { $result['status'] = 0; $result['msg'] = '该门店暂未开启魔方'; } $this->ajaxReturn($result); } /** * 获取促销商品和最新商品 */ public function getPromotionAndNewGoods() { $store_id = self::$store_id; $StoreXcxConfigModel = D('RetailStoreXcxConfig'); $store_config = $StoreXcxConfigModel->getFind(array($StoreXcxConfigModel::STORE_ID => $store_id)); if (empty($store_config) || ($store_config[$StoreXcxConfigModel::PROMOTION_STATUS] == 0 && $store_config[$StoreXcxConfigModel::NEW_STATUS] == 0)) { $result['status'] = 0; $result['msg'] = '未开启该功能'; $this->ajaxReturn($result); } $time = time(); $HostModel = D('RetailHost'); $GoodsModel = D('RetailGoods'); if ($store_config[$StoreXcxConfigModel::PROMOTION_STATUS] == 1) { $where = array( 'h.' . $HostModel::STORE_ID => $store_id, 'h.' . $HostModel::TYPE => 2, 'h.' . $HostModel::STATUS => 1, 'h.' . $HostModel::STATE => 1, 'h.' . $HostModel::START_TIME => array('elt', $time), 'h.' . $HostModel::END_TIME => array('egt', $time), 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::ONLINE_PRICE => array('gt', 0), ); $field = array( 'h.*', 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . $GoodsModel::VIP_ONLINE_STATE, ); $promotion = $HostModel->getHostGoods($where, $field, ''); foreach ($promotion as &$val) { $val['goods_image'] = getGoodsImage($val[$GoodsModel::GOODS_IMG_ID], $store_id); $val['old_money'] = $val['online_price']; $val['online_price'] = $val['act_price']; } } else { $promotion = array(); } if ($store_config[$StoreXcxConfigModel::NEW_STATUS] == 1) { $where = array( 'h.' . $HostModel::STORE_ID => $store_id, 'h.' . $HostModel::TYPE => 3, 'h.' . $HostModel::STATUS => 1, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::ONLINE_PRICE => array('gt', 0), ); $field = array( 'h.*', 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . $GoodsModel::VIP_ONLINE_STATE, ); $newGoods = $HostModel->getHostGoods($where, $field); foreach ($newGoods as &$value) { $value['goods_image'] = getGoodsImage($value[$GoodsModel::GOODS_IMG_ID], $store_id); } } else { $newGoods = array(); } $result['status'] = 1; $result['msg'] = '查询成功'; $result['promotion'] = $promotion; $result['newGoodsList'] = $newGoods; $this->ajaxReturn($result); } /** * 获取商品分类 */ public function getGoodsClass_v1() { $merchant_id = self::$merchant_id; $store_id = self::$store_id; $ClassModel = D('RetailGoodsClass'); $map = array( $ClassModel::MERCHANT_ID => $merchant_id, $ClassModel::STATUS => 0, $ClassModel::TYPE => 1 ); $fields = array( $ClassModel::ID, $ClassModel::CLASS_NAME, ); $class_1 = $ClassModel->getSelect($map, $fields, $ClassModel::CODE . ' asc'); $classArr = array(); //存储菜单数组 $GoodsModel = D('RetailGoods'); $mapG = array( $GoodsModel::STORE_ID => $store_id, $GoodsModel::ONLINE_STATE => 1, $GoodsModel::STATUS => 0 ); $map2 = array( $ClassModel::MERCHANT_ID => $merchant_id, $ClassModel::STATUS => 0, $ClassModel::TYPE => 2 ); $map3 = array( 'c.' . $ClassModel::MERCHANT_ID => $merchant_id, 'c.' . $ClassModel::STATUS => 0, 'c.' . $ClassModel::TYPE => 3, 'g.' . $GoodsModel::STORE_ID => $store_id, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0, ); foreach ($class_1 as $value) { $mapG[$GoodsModel::GOODS_CLASS_ID] = $value[$ClassModel::ID]; $goods_1 = $GoodsModel->getFind($mapG, 'id'); //查看是否有商品 $map2[$ClassModel::PID] = $value[$ClassModel::ID]; $class_2 = $ClassModel->getSelect($map2, $fields, $ClassModel::CODE . ' asc'); //查询二级分类 $tempArr = array(); foreach ($class_2 as $val) { $mapG[$GoodsModel::GOODS_CLASS_ID] = $val[$ClassModel::ID]; $goods_2 = $GoodsModel->getFind($mapG, 'id'); //查看是否有商品 $map3['c.' . $ClassModel::PID] = $val[$ClassModel::ID]; $class_3 = $ClassModel->alias('c') ->join('ls_retail_goods as g on g.' . $GoodsModel::GOODS_CLASS_ID . '=c.' . $ClassModel::ID) ->where($map3) ->group('g.' . $GoodsModel::GOODS_CLASS_ID) ->order('c.' . $ClassModel::CODE . ' asc') ->field('c.' . $ClassModel::ID . ',c.' . $ClassModel::CLASS_NAME) ->select(); if (!empty($class_3)) { $temp = $val; $temp['list'] = $class_3; } else if (!empty($goods_2)) { $temp = $val; $temp['list'] = array(); } if (!empty($temp)) { $tempArr[] = $temp; unset($temp); } } if (!empty($tempArr)) { $tempA = $value; $tempA['list'] = $tempArr; $classArr[] = $tempA; } else if (!empty($goods_1)) { $tempA = $value; $tempA['list'] = array(); $classArr[] = $tempA; } } if (!empty($classArr)) { $result['data'] = $classArr; $result['status'] = 1; $result['msg'] = '查询成功'; } else { $result['status'] = 0; $result['msg'] = '暂无商品分类'; } $this->ajaxBack($result); } /** * 根据分类获取商品 */ public function getGoodsList_v1() { $type = I('post.type'); $id = I('post.id'); $page = I('post.page'); if (empty($type) || empty($id) || empty($page)) { $result['status'] = 0; $result['msg'] = '缺少参数'; $this->ajaxReturn($result); } $store_id = self::$store_id; if ($type != 1 && $type != 2 && $type != 3) { $result['status'] = 0; $result['msg'] = '参数有误'; $this->ajaxReturn($result); } $GoodsModel = D('RetailGoods'); $count = 10; $idArr = $this->getGoodsClass($id, $type); $HostModel = D('RetailHost'); $map = array( 'g.' . $GoodsModel::STORE_ID => $store_id, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::GOODS_CLASS_ID => array('in', $idArr), 'g.' . $GoodsModel::ONLINE_PRICE => array('gt', 0), ); $fields = array( 'g.' . 'id', 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . 'attribute_state', 'g.' . 'shop_mem_status', 'g.' . 'shop_mem_price', 'g.' . $GoodsModel::PLUS_MEM_STATUS, 'g.' . $GoodsModel::PLUS_PRICE, 'h.' . $HostModel::STATUS . ' as h_status', 'h.' . $HostModel::ACT_PRICE ); $order = 'g.' . $GoodsModel::GOODS_ORDER . ' asc,' . 'g.' . 'id' . ' desc, h.act_price asc'; $goods = $GoodsModel->getHostGoods($map, $fields, $order, $page . ',' . $count); $StoreXcxConfigModel = D('RetailStoreXcxConfig'); $promotion_status = $StoreXcxConfigModel->getFind(array($StoreXcxConfigModel::STORE_ID => $store_id), $StoreXcxConfigModel::PROMOTION_STATUS); if (!empty($goods)) { foreach ($goods as &$val) { $val['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $val['id']); $val['goods_image'] = getGoodsImage($val[$GoodsModel::GOODS_IMG_ID], $store_id); $val['maxBuyNum'] = (int)$val['goods_num']; if ($promotion_status && $val['h_status'] && $val['attribute_state' == 1]) { $val['shop_mem_status'] = 2; $val['plus_mem_status'] = 2; $val['online_price'] = $val['act_price']; } } $result['data'] = $goods; $result['count'] = $count; $result['status'] = 1; $result['msg'] = '查询成功'; } else { $result['status'] = 0; $result['msg'] = '暂无商品'; } $this->ajaxBack($result); } /** * @param $id 分类id * @param $type 分类类型 1一级 2二级 3三级 * @return array */ protected function getGoodsClass($id, $type = null) { $ClassModel = D('RetailGoodsClass'); $idArr = array($id); if (!$type) { $type = $ClassModel->getFindField(array('id' => $id), 'type'); } switch ($type) { case '1': //一级分类下的所有商品 $class = $ClassModel->alias('c2') ->join('ls_retail_goods_class as c3 on c3.' . $ClassModel::PID . '=c2.' . $ClassModel::ID . ' AND c3.' . $ClassModel::TYPE . '=3 AND c3.' . $ClassModel::STATUS . '=0', 'LEFT') ->where(array('c2.' . $ClassModel::PID => $id, 'c2.' . $ClassModel::TYPE => 2, 'c2.' . $ClassModel::STATUS => 0)) ->field('c2.' . $ClassModel::ID . ',c3.' . $ClassModel::ID . ' as c3_id') ->select(); if (!empty($class)) { foreach ($class as $key => $val) { if (!in_array($val['id'], $idArr)) { $idArr[] = $val['id']; } if (!empty($val['c3_id'])) { $idArr[] = $val['c3_id']; } } } break; case 2: //二级分类下的所有商品 $map = array($ClassModel::PID => $id, $ClassModel::TYPE => 3, $ClassModel::STATUS => 0); $class = $ClassModel->getFindField($map, $ClassModel::ID, true); if (!empty($class)) { $idArr = $class; $idArr[] = $id; } break; case 3: //三级分类下的所有商品 break; } return $idArr; } /** * 商品详情 */ public function details() { if (IS_POST) { $goodsId = I('post.id'); $uid = self::$uid; //用户id $store_id = self::$store_id; $userType = self::$user['user_type']; //1普通用户 2plus会员 3常规会员 $GoodsModel = D('RetailGoods'); $where = array( 'id' => $goodsId, $GoodsModel::STATUS => 0, $GoodsModel::ONLINE_STATE => 1 ); $field = array( 'id', $GoodsModel::DETAILS, $GoodsModel::STORE_ID, $GoodsModel::MERCHANT_ID, $GoodsModel::GOODS_NAME, 'shop_mem_status', 'shop_mem_price', 'attribute_state', $GoodsModel::RETAIL_PRICE, $GoodsModel::ONLINE_PRICE, $GoodsModel::VIP_ONLINE_STATE, $GoodsModel::GOODS_IMG_ID, $GoodsModel::SELL_NUM, $GoodsModel::COMPANY, $GoodsModel::SPECIFICATIONS, $GoodsModel::PRICING_METHOD, $GoodsModel::PLUS_MEM_STATUS, $GoodsModel::PLUS_PRICE, $GoodsModel::FICTITIOUS_NUM, $GoodsModel::SUB_HEADING, ); $info = $GoodsModel->getFind($where, $field); if (empty($info)) { $res['status'] = 0; $res['msg'] = '商品已售罄'; $this->ajaxReturn($res); } $info['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $goodsId); if (!$info[$GoodsModel::ONLINE_PRICE] || floatval($info[$GoodsModel::ONLINE_PRICE]) < 0.01) { $info[$GoodsModel::ONLINE_PRICE] = $info[$GoodsModel::RETAIL_PRICE]; } $info['user_type'] = $userType; $info['goods_img'] = getGoodsImage($info[$GoodsModel::GOODS_IMG_ID], $store_id); $fictitious_num = $info[$GoodsModel::FICTITIOUS_NUM] ? $info[$GoodsModel::FICTITIOUS_NUM] : 0; //虚拟销量 $info['sell_num'] = round($info[$GoodsModel::SELL_NUM] + $fictitious_num, 2); if (!empty($info[$GoodsModel::DETAILS])) { $info['details'] = str_replace('img src="/', 'img src="' . $this->REQUEST_URL . '/', $info[$GoodsModel::DETAILS]); $info['details'] = str_replace("img src="/", "img src="" . $this->REQUEST_URL . '/', $info[$GoodsModel::DETAILS]); $info['details'] = str_replace("style=''", "", $info[$GoodsModel::DETAILS]); $info['details'] = str_replace('style=""', "", $info[$GoodsModel::DETAILS]); } $GoodsBannerModel = D('RetailGoodsBanner'); $banners = $GoodsBannerModel->getSelect(array($GoodsBannerModel::GOODS_ID => $info[$GoodsBannerModel::ID]), $GoodsBannerModel::IMAGE_ID); $info['banners'] = array(); if (!empty($banners)) { foreach ($banners as $key => $value) { $img = getGoodsImage($value[$GoodsBannerModel::IMAGE_ID], $store_id); $info['banners'][] = $img; } } if (empty($info['banners'])) { $info['banners'][] = $info['goods_img']; } $StoreModel = D('RetailStore'); $customer_service = $StoreModel->getFindField(array($StoreModel::ID => $store_id), $StoreModel::CUSTOMER_SERVICE); $info[$StoreModel::PHONE] = $StoreModel->getFindField(array($StoreModel::ID => $store_id), $StoreModel::PHONE); $info[$StoreModel::CUSTOMER_SERVICE] = !$customer_service || !$info[$StoreModel::PHONE] ? 2 : $customer_service; //判断是否是促销商品 $StoreXcxConfigModel = D('RetailStoreXcxConfig'); $promotion_status = $StoreXcxConfigModel->getFindField(array($StoreXcxConfigModel::STORE_ID => $store_id), $StoreXcxConfigModel::PROMOTION_STATUS); $HostModel = D('RetailHost'); $time = time(); $map = array( $HostModel::GOODS_ID => $goodsId, $HostModel::TYPE => 2, $HostModel::STATUS => 1, $HostModel::START_TIME => array('elt', $time), $HostModel::END_TIME => array('egt', $time), ); $promotion = $HostModel->getFind($map); if ($promotion_status && !empty($promotion)) { $info['shop_mem_status'] = 2; $info[$HostModel::OLD_MONEY] = $info[$GoodsModel::ONLINE_PRICE]; $info[$GoodsModel::ONLINE_PRICE] = $promotion[$HostModel::ACT_PRICE]; } else { $info[$HostModel::OLD_MONEY] = 0; } if ($info['shop_mem_status'] == 1 && (empty($info['shop_mem_price']) || $info['shop_mem_price'] < 0.01) && $info['attribute_state'] == 1) { $info['shop_mem_price'] = 0.01; $info['goods_num'] = 0; } //判断用户是否收藏该商品 $CollectModel = D('RetailCollect'); $collect = $CollectModel->getFind(array('goods_id' => $info['id'], 'uid' => $uid)); if (!empty($collect)) { $info['collect'] = 1; //商品被该用户收藏 } else { $info['collect'] = 0; //商品未被该用户收藏 } //判断会员价是否为空 if ($info['attribute_state'] == 1 && $info['shop_mem_status'] == 1 && empty($info['shop_mem_price'])) { $info['shop_mem_status'] = 2; $info['shop_mem_price'] = 0; } //多规格商品 if ($info['attribute_state'] == 2) { //启用多规格,但存在没有添加规格商品的可能 $SkuGoodsModel = D('RetailSkuGoods'); $goodsSku = $SkuGoodsModel->getSelect(array('goods_id' => $goodsId, 'state' => 0)); if (empty($goodsSku)) { $info['goods_num'] = 0; } else { $data = $this->getGoodsSku($goodsId); $res['skuDetailList'] = $data['skuDetailList']; $res['skuList'] = $data['skuList']; } } $info['discount'] = 0; //默认没有优惠 $info['cart_num'] = 1; //团购标签列表 $LabelModel = D('RetailStoreLabel'); $labelList = $LabelModel->getSelect(array('store_id' => $store_id, 'status' => 1)); foreach ($labelList as &$v) { $v['img'] = D('ImageGallery')->getFieldPath(array('id' => $v['img_id'])); } if (self::$store['guide_online_state'] == 1 && !empty(self::$user['guide_id'])) { $GuideModel = D('RetailGuide'); $gMap = array( 'id' => self::$user['guide_id'], 'storeid' => $store_id ); $status = $GuideModel->getFindField($gMap, 'status'); if ($status == 1) { $res['guide_id'] = self::$user['guide_id']; //导购员id } } if (!empty($info)) { $res['status'] = 1; $res['msg'] = '查询成功'; $res['data'] = $info; $res['labelList'] = $labelList; } else { $res['status'] = 0; $res['msg'] = '暂无数据'; } $this->ajaxReturn($res); } } /** * 商品搜索和更多推荐商品更多 */ public function goodsStatic() { if (IS_POST) { $page = I('post.page'); //分页 $search = I('post.search'); //关键字 $type = I('post.type'); // 默认综合 2:最新 3:价格从高到低 4:价格从低到高 5:销量 $class_id = I('post.class_id'); //分类id $store_id = self::$store_id; $GoodsModel = D('RetailGoods'); $where[$GoodsModel::STORE_ID] = $store_id; $where[$GoodsModel::STATUS] = 0; //正常 $where[$GoodsModel::ONLINE_STATE] = 1; //商城 $where[$GoodsModel::ONLINE_PRICE] = array('gt', 0); $page = $page ? $page : 1; $count = 20; //搜索 if (isset($search) && $search != '') { $where[$GoodsModel::GOODS_NAME] = array('like', '%' . $search . '%'); } if (isset($class_id) && $class_id != '' && !empty($class_id)) { $class_id = $this->getGoodsClass($class_id, 1); //默认为一级分类 $where[$GoodsModel::GOODS_CLASS_ID] = array('in', $class_id); } switch ($type) { case 2: $order = $GoodsModel::ADD_TIME . ' desc,' . 'id' . ' desc'; break; case 3: $order = $GoodsModel::ONLINE_PRICE . ' desc,' . 'id' . ' desc'; break; case 4: $order = $GoodsModel::ONLINE_PRICE . ' asc,' . 'id' . ' desc'; break; case 5: $order = $GoodsModel::SELL_NUM . ' desc,' . 'id' . ' desc'; break; default: $order = $GoodsModel::GOODS_ORDER . ' asc,' . 'id' . ' desc'; break; } $fields = array( 'id', $GoodsModel::GOODS_NAME, $GoodsModel::GOODS_IMG_ID, $GoodsModel::ONLINE_PRICE, $GoodsModel::VIP_ONLINE_STATE, 'shop_mem_status', 'shop_mem_price', $GoodsModel::PLUS_MEM_STATUS, $GoodsModel::PLUS_PRICE ); $goods = $GoodsModel->getSelect($where, $fields, $order, $page . ',' . $count); if ($goods) { foreach ($goods as $key => &$val) { $val['goods_image'] = getGoodsImage($val[$GoodsModel::GOODS_IMG_ID], $store_id); } $res['count'] = $count; $res['status'] = 1; $res['msg'] = '查询成功'; $res['goods'] = $goods; } else { $res['count'] = $count; $res['status'] = 1; $res['msg'] = '暂无商品'; $res['goods'] = array(); } } else { $res['status'] = 0; $res['msg'] = '网络错误'; } $this->ajaxBack($res); } /** *plus商品 */ public function plusGoods() { $merchant_id = self::$merchant_id; $store_id = self::$store_id; $PlusSetModel = D('RetailPlusSet'); $plus_set = $PlusSetModel->getFind(array($PlusSetModel::MERCHANT_ID => $merchant_id)); $SinglePlusGoodsModel = D('RetailSinglePlusGoods'); $where[$SinglePlusGoodsModel::MERCHANT_ID] = $merchant_id; $where[$SinglePlusGoodsModel::STATUS] = 1; $where[$SinglePlusGoodsModel::STORE_ID] = $store_id; $GoodsModel = D('RetailGoods'); if ($plus_set[$PlusSetModel::GOODS_SWITCH_TYPE] == 2) { $goodsId = $SinglePlusGoodsModel->getFindField($where, $SinglePlusGoodsModel::GOODS_ID, true); if ($goodsId) { $map[$GoodsModel::STATUS] = 0; $map[$GoodsModel::ONLINE_STATE] = 1; $map['id'] = array('in', $goodsId); $field = array( 'id', $GoodsModel::GOODS_IMG_ID, $GoodsModel::GOODS_NAME, $GoodsModel::ONLINE_PRICE, ); $goodsInfo = $GoodsModel->getSelect($map, $field); if ($goodsInfo) { foreach ($goodsInfo as $key => &$val) { $val['goods_image'] = getGoodsImage($val[$GoodsModel::GOODS_IMG_ID], $store_id); } } } } if ($plus_set[$PlusSetModel::GOODS_GROUP_SWITCH_TYPE] == 2) { $PlusMealGroupModel = D('RetailPlusMealGroup'); $groupInfo = $PlusMealGroupModel->getSelect($where); if ($groupInfo) { $goodsMeal = array(); foreach ($groupInfo as $key => &$val) { $MealPlusGoodsModel = D('RetailMealPlusGoods'); $mealGoodsIds = $MealPlusGoodsModel->getFindField(array($MealPlusGoodsModel::GROUP_ID => $val[$PlusMealGroupModel::ID], $MealPlusGoodsModel::STATUS => 1), $MealPlusGoodsModel::GOODS_ID, true); $map[$GoodsModel::STATUS] = 0; $map[$GoodsModel::ONLINE_STATE] = 1; $map['id'] = array('in', $mealGoodsIds); $goodsInfoNum = $GoodsModel->getCount($map); if ($goodsInfoNum != count($mealGoodsIds)) { unset($val); continue; } if (!empty($val['image_id'])) { $val['good_image'] = getGoodsImage($val[$PlusMealGroupModel::IMAGE_ID], $store_id); } array_push($goodsMeal, $val); } } } $res['status'] = 1; $res['goodsList'] = $goodsInfo ? $goodsInfo : array(); $res['goodsMeal'] = $goodsMeal ? $goodsMeal : array(); $this->ajaxReturn($res); } /** * 2019-11-12 plus商品 */ public function plusGoods_v1() { $merchant_id = self::$merchant_id; $store_id = self::$store_id; $PlusSetModel = D('RetailPlusSet'); $plus_set = $PlusSetModel->getFind(array($PlusSetModel::MERCHANT_ID => $merchant_id)); $SinglePlusGoodsModel = D('RetailSinglePlusGoods'); $GoodsModel = D('RetailGoods'); if ($plus_set[$PlusSetModel::GOODS_SWITCH_TYPE] == 2) { $field = array( 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . 'attribute_state', 'g.' . 'shop_mem_status', 'g.' . 'shop_mem_price', 'g.' . $GoodsModel::PLUS_MEM_STATUS, 'g.' . $GoodsModel::PLUS_PRICE, 'p.' . $SinglePlusGoodsModel::ID, 'p.' . $SinglePlusGoodsModel::TIME, 'p.' . $SinglePlusGoodsModel::GOODS_ID, ); $map = array( 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'p.' . $SinglePlusGoodsModel::MERCHANT_ID => $merchant_id, 'p.' . $SinglePlusGoodsModel::STATUS => 1, 'p.' . $SinglePlusGoodsModel::STORE_ID => $store_id, ); $goodsInfo = $SinglePlusGoodsModel->getSelectGoods($map, $field); if ($goodsInfo) { foreach ($goodsInfo as &$value) { $value['goods_image'] = getGoodsImage($value[$GoodsModel::GOODS_IMG_ID], $store_id); $value['goods_num'] = 0; $value['skuAttr'] = array(); $value['skuList'] = array(); if ($value['attribute_state'] == 2) { $sku = $this->getGoodsSku($value[$SinglePlusGoodsModel::GOODS_ID]); $value['sku'] = $sku; $value['m'] = M()->_sql(); if ($sku['skuDetailList']) { $value['skuAttr'] = $sku['skuList']; $value['skuList'] = $sku['skuDetailList']; $value['goods_num'] = $sku['goods_num']; } } else { $value['goods_num'] = A('Api/Inventory')->goods_num(1, $store_id, $value[$SinglePlusGoodsModel::GOODS_ID]); } } } } if ($plus_set[$PlusSetModel::GOODS_GROUP_SWITCH_TYPE] == 2) { $PlusMealGroupModel = D('RetailPlusMealGroup'); $where = array( $PlusMealGroupModel::MERCHANT_ID => $merchant_id, $PlusMealGroupModel::STATUS => 1, $PlusMealGroupModel::STORE_ID => $store_id, ); $groupInfo = $PlusMealGroupModel->getSelect($where); $MealPlusGoodsModel = D('RetailMealPlusGoods'); $field = array( 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . 'attribute_state', 'g.' . 'shop_mem_status', 'g.' . 'shop_mem_price', 'g.' . $GoodsModel::PLUS_MEM_STATUS, 'g.' . $GoodsModel::PLUS_PRICE, 'm.' . $SinglePlusGoodsModel::GOODS_ID, ); $groupList = array(); foreach ($groupInfo as $key => &$gVal) { $map = array( 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'm.' . $MealPlusGoodsModel::GROUP_ID => $gVal[$PlusMealGroupModel::ID], 'm.' . $SinglePlusGoodsModel::STATUS => 1, ); $goodsMeal = $MealPlusGoodsModel->getSelectGoods($map, $field); if (empty($goodsMeal)) { continue; } foreach ($goodsMeal as &$mVal) { $mVal['goods_image'] = getGoodsImage($mVal[$GoodsModel::GOODS_IMG_ID], $store_id); $mVal['goods_num'] = 0; $mVal['skuAttr'] = array(); $mVal['skuList'] = array(); if ($mVal['attribute_state'] == 2) { $sku = $this->getGoodsSku($mVal[$SinglePlusGoodsModel::GOODS_ID]); if ($sku['skuDetailList']) { $mVal['skuAttr'] = $sku['skuList']; $mVal['skuList'] = $sku['skuDetailList']; $mVal['goods_num'] = round($sku['goods_num']); } } else { $mVal['goods_num'] = A('Api/Inventory')->goods_num(1, $store_id, $mVal[$SinglePlusGoodsModel::GOODS_ID]); } } $gVal['goodsList'] = $goodsMeal; $gVal['image'] = getImage($gVal[$PlusMealGroupModel::IMAGE_ID]); $groupList[] = $gVal; } } $res['status'] = 1; $res['plus_set'] = $plus_set; $res['msg'] = '获取成功'; $res['goodsList'] = $goodsInfo ? $goodsInfo : array(); $res['groupList'] = $groupList ? $groupList : array(); $this->ajaxReturn($res); } /** * 2020-5-22 获取商户所有plus商品 */ public function plusGoods_v2() { $merchant_id = self::$merchant_id; $store_id = self::$store_id; $PlusSetModel = new RetailPlusSetModel(); $plus_set = $PlusSetModel->getFind(array($PlusSetModel::MERCHANT_ID => $merchant_id)); $SinglePlusGoodsModel = new RetailSinglePlusGoodsModel(); $GoodsModel = new RetailGoodsModel(); $InventoryApi = new InventoryController(); $storeList = array(); $StoreModel = new RetailStoreModel(); if ($plus_set[$PlusSetModel::GOODS_SWITCH_TYPE] == 2) { $field = array( 'g.' . $GoodsModel::STORE_ID, 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . 'attribute_state', 'g.' . 'shop_mem_status', 'g.' . 'shop_mem_price', 'g.' . $GoodsModel::PLUS_MEM_STATUS, 'g.' . $GoodsModel::PLUS_PRICE, 'p.' . $SinglePlusGoodsModel::ID, 'p.' . $SinglePlusGoodsModel::TIME, 'p.' . $SinglePlusGoodsModel::GOODS_ID, ); $map = array( 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'p.' . $SinglePlusGoodsModel::MERCHANT_ID => $merchant_id, 'p.' . $SinglePlusGoodsModel::STATUS => 1, ); $goodsInfo = $SinglePlusGoodsModel->getSelectGoods($map, $field); if ($goodsInfo) { foreach ($goodsInfo as &$value) { $value['goods_image'] = getGoodsImage($value[$GoodsModel::GOODS_IMG_ID], '', $value['store_id']); $value['goods_num'] = 0; $value['skuAttr'] = array(); $value['skuList'] = array(); if ($value['attribute_state'] == 2) { $sku = $this->getGoodsSku($value[$SinglePlusGoodsModel::GOODS_ID], $value['store_id']); $value['sku'] = $sku; $value['m'] = M()->_sql(); if ($sku['skuDetailList']) { $value['skuAttr'] = $sku['skuList']; $value['skuList'] = $sku['skuDetailList']; $value['goods_num'] = $sku['goods_num']; } } else { $value['goods_num'] = $InventoryApi->goods_num(1, $store_id, $value[$SinglePlusGoodsModel::GOODS_ID]); } //门店图片 if ($storeList[$value['store_id']]) { $value['store_name'] = $storeList[$value['storeids']]['store_name']; $value['store_image'] = $storeList[$value['storeids']]['store_image']; } else { $store = $StoreModel->getFind(array('id' => $value['storeids']), 'storetag as store_name,shopimg_id'); $store['store_image'] = getImage($store['shopimg_id']); $value['store_name'] = $store['store_name']; $value['store_image'] = $store['store_image']; $storeList[$value['storeids']] = $store; } } } } if ($plus_set[$PlusSetModel::GOODS_GROUP_SWITCH_TYPE] == 2) { $PlusMealGroupModel = new RetailPlusMealGroupModel(); $where = array( $PlusMealGroupModel::MERCHANT_ID => $merchant_id, $PlusMealGroupModel::STATUS => 1, ); $groupInfo = $PlusMealGroupModel->getSelect($where); $MealPlusGoodsModel = new RetailMealPlusGoodsModel(); $field = array( 'g.' . $GoodsModel::STORE_ID, 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . 'attribute_state', 'g.' . 'shop_mem_status', 'g.' . 'shop_mem_price', 'g.' . $GoodsModel::PLUS_MEM_STATUS, 'g.' . $GoodsModel::PLUS_PRICE, 'm.' . $SinglePlusGoodsModel::GOODS_ID, ); $groupList = array(); foreach ($groupInfo as $key => &$gVal) { $map = array( 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'm.' . $MealPlusGoodsModel::GROUP_ID => $gVal[$PlusMealGroupModel::ID], 'm.' . $SinglePlusGoodsModel::STATUS => 1, ); $goodsMeal = $MealPlusGoodsModel->getSelectGoods($map, $field); if (empty($goodsMeal)) { continue; } foreach ($goodsMeal as &$mVal) { $mVal['goods_image'] = getGoodsImage($mVal[$GoodsModel::GOODS_IMG_ID], $gVal['store_id']); $mVal['goods_num'] = 0; $mVal['skuAttr'] = array(); $mVal['skuList'] = array(); if ($mVal['attribute_state'] == 2) { $sku = $this->getGoodsSku($mVal[$SinglePlusGoodsModel::GOODS_ID], $gVal['store_id']); if ($sku['skuDetailList']) { $mVal['skuAttr'] = $sku['skuList']; $mVal['skuList'] = $sku['skuDetailList']; $mVal['goods_num'] = round($sku['goods_num']); } } else { $mVal['goods_num'] = $InventoryApi->goods_num(1, $store_id, $mVal[$SinglePlusGoodsModel::GOODS_ID]); } } $gVal['goodsList'] = $goodsMeal; $gVal['image'] = getImage($gVal[$PlusMealGroupModel::IMAGE_ID]); //门店图片 if ($storeList[$gVal['store_id']]) { $gVal['store_name'] = $storeList[$gVal['storeids']]['store_name']; $gVal['store_image'] = $storeList[$gVal['storeids']]['store_image']; } else { $store = $StoreModel->getFind(array('id' => $gVal['storeids']), 'storetag as store_name,shopimg_id'); $store['store_image'] = getImage($store['shopimg_id']); $gVal['store_name'] = $store['store_name']; $gVal['store_image'] = $store['store_image']; $storeList[$gVal['storeids']] = $store; } $groupList[] = $gVal; } } $res['status'] = 1; $res['plus_set'] = $plus_set; $res['msg'] = '获取成功'; $res['goodsList'] = $goodsInfo ? $goodsInfo : array(); $res['groupList'] = $groupList ? $groupList : array(); $this->ajaxReturn($res); } /** * 2019-11-21 新版获取促销商品和最新商品 */ public function getPromotionAndNewGoods_v1() { $store_id = self::$store_id; $StoreXcxConfigModel = D('RetailStoreXcxConfig'); $store_config = $StoreXcxConfigModel->getFind(array($StoreXcxConfigModel::STORE_ID => $store_id)); if (empty($store_config) || ($store_config[$StoreXcxConfigModel::PROMOTION_STATUS] == 0 && $store_config[$StoreXcxConfigModel::NEW_STATUS] == 0)) { $result['status'] = 0; $result['msg'] = '未开启该功能'; $this->ajaxReturn($result); } $time = time(); $HostModel = D('RetailHost'); $GoodsModel = D('RetailGoods'); if ($store_config[$StoreXcxConfigModel::PROMOTION_STATUS] == 1) { //促销 $where = array( 'h.' . $HostModel::STORE_ID => $store_id, 'h.' . $HostModel::TYPE => 2, 'h.' . $HostModel::STATUS => 1, 'h.' . $HostModel::STATE => 1, 'h.' . $HostModel::START_TIME => array('elt', $time), 'h.' . $HostModel::END_TIME => array('egt', $time), 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0 ); $field = array( 'h.' . $HostModel::ID, 'h.' . $HostModel::GOODS_ID, 'h.' . $HostModel::STATUS . ' as promotion_status', 'h.' . $HostModel::ACT_PRICE, 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . $GoodsModel::VIP_ONLINE_STATE, ); $order = 'h.id desc,g.' . $GoodsModel::GOODS_ORDER . ' asc,' . 'g.' . 'id' . ' desc, h.act_price asc'; $promotion = $HostModel->getHostGoods($where, $field, $order); foreach ($promotion as &$val) { $val['goods_image'] = getGoodsImage($val[$GoodsModel::GOODS_IMG_ID], $store_id); } } else { $promotion = array(); } if ($store_config[$StoreXcxConfigModel::NEW_STATUS] == 1) { //最新 if ($store_config[$StoreXcxConfigModel::PROMOTION_STATUS] == 1) { //开启促销 $where = array( 'h.' . $HostModel::STORE_ID => $store_id, 'h.' . $HostModel::TYPE => 3, 'h.' . $HostModel::STATUS => 1, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::ONLINE_PRICE => array('gt', 0), ); $field = array( 'h.' . $HostModel::ID, 'h.' . $HostModel::GOODS_ID, 'h1.' . $HostModel::ACT_PRICE, 'h1.' . $HostModel::STATUS . ' as promotion_status', 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . $GoodsModel::VIP_ONLINE_STATE, ); $order = 'h.id desc,g.' . $GoodsModel::GOODS_ORDER . ' asc,' . 'g.' . 'id' . ' desc, h1.act_price asc'; $newGoods = $HostModel->getOtherGoods($where, $field, $order); } else { $where = array( 'h.' . $HostModel::STORE_ID => $store_id, 'h.' . $HostModel::TYPE => 3, 'h.' . $HostModel::STATUS => 1, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::ONLINE_PRICE => array('gt', 0), ); $field = array( 'h.' . $HostModel::ID, 'h.' . $HostModel::GOODS_ID, 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . $GoodsModel::VIP_ONLINE_STATE, ); $newGoods = $HostModel->getActGoods($where, $field); } foreach ($newGoods as &$value) { $value['promotion_status'] = $value['promotion_status'] ?: 0; $value['goods_image'] = getGoodsImage($value[$GoodsModel::GOODS_IMG_ID], $store_id); } } else { $newGoods = array(); } $result['status'] = 1; $result['msg'] = '查询成功'; $result['promotion'] = $promotion; $result['newGoodsList'] = $newGoods; $this->ajaxReturn($result); } /** * 2019-12-6 * 新版商城页面促销 */ public function getPromotionAndNewGoods_v2() { $store_id = self::$store_id; $StoreXcxConfigModel = D('RetailStoreXcxConfig'); $store_config = $StoreXcxConfigModel->getFind(array($StoreXcxConfigModel::STORE_ID => $store_id)); if (empty($store_config) || ($store_config[$StoreXcxConfigModel::PROMOTION_STATUS] == 0 && $store_config[$StoreXcxConfigModel::NEW_STATUS] == 0)) { $result['status'] = 0; $result['msg'] = '未开启该功能'; $this->ajaxReturn($result); } $time = time(); $HostModel = D('RetailHost'); $GoodsModel = D('RetailGoods'); if ($store_config[$StoreXcxConfigModel::PROMOTION_STATUS] == 1) { //促销 $where = array( 'h.' . $HostModel::STORE_ID => $store_id, 'h.' . $HostModel::TYPE => 2, 'h.' . $HostModel::STATUS => 1, 'h.' . $HostModel::STATE => 1, 'h.' . $HostModel::START_TIME => array('elt', $time), 'h.' . $HostModel::END_TIME => array('egt', $time), 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0, ); $field = array( 'h.' . $HostModel::ID, 'h.' . $HostModel::GOODS_ID, 'h.' . $HostModel::STATUS . ' as promotion_status', 'h.' . $HostModel::ACT_PRICE, 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . $GoodsModel::VIP_ONLINE_STATE, 'g.' . 'attribute_state', 's.goods_num' ); $order = 'h.id desc,g.' . $GoodsModel::GOODS_ORDER . ' asc,' . 'g.' . 'id' . ' desc, h.act_price asc'; $promotion = $HostModel->getHostGoods_v1($where, $field, $order, '1,3'); foreach ($promotion as &$val) { $val['goods_image'] = getGoodsImage($val[$GoodsModel::GOODS_IMG_ID], $store_id); if ($val['attribute_state'] == 2) { $val['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $val['goods_id']); } } } else { $promotion = array(); } if ($store_config[$StoreXcxConfigModel::NEW_STATUS] == 1) { //最新 if ($store_config[$StoreXcxConfigModel::PROMOTION_STATUS] == 1) { //开启促销 $where = array( 'h.' . $HostModel::STORE_ID => $store_id, 'h.' . $HostModel::TYPE => 3, 'h.' . $HostModel::STATUS => 1, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::ONLINE_PRICE => array('gt', 0), ); $field = array( 'h.' . $HostModel::ID, 'h.' . $HostModel::GOODS_ID, 'h1.' . $HostModel::ACT_PRICE, 'h1.' . $HostModel::STATUS . ' as promotion_status', 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . $GoodsModel::VIP_ONLINE_STATE, 'g.' . 'attribute_state', 'g.' . 'shop_mem_status', 'g.' . 'shop_mem_price', 'g.' . $GoodsModel::PLUS_MEM_STATUS, 'g.' . $GoodsModel::PLUS_PRICE, ); $order = 'h.id desc,g.' . $GoodsModel::GOODS_ORDER . ' asc,' . 'g.' . 'id' . ' desc, h1.act_price asc'; $newGoods = $HostModel->getOtherGoods($where, $field, $order, '1,4'); } else { $where = array( 'h.' . $HostModel::STORE_ID => $store_id, 'h.' . $HostModel::TYPE => 3, 'h.' . $HostModel::STATUS => 1, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::ONLINE_PRICE => array('gt', 0), ); $field = array( 'h.' . $HostModel::ID, 'h.' . $HostModel::GOODS_ID, 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . $GoodsModel::VIP_ONLINE_STATE, 'g.' . 'attribute_state', 'g.' . 'shop_mem_status', 'g.' . 'shop_mem_price', 'g.' . $GoodsModel::PLUS_MEM_STATUS, 'g.' . $GoodsModel::PLUS_PRICE, ); $newGoods = $HostModel->getActGoods($where, $field, 'g.' . 'id' . ' desc', '1,4'); } foreach ($newGoods as &$value) { $value['promotion_status'] = $value['promotion_status'] ?: 0; $value['goods_image'] = getGoodsImage($value[$GoodsModel::GOODS_IMG_ID], $store_id); $value['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $value['goods_id']); if ($value['shop_mem_status'] == 1 && (empty($value['shop_mem_price']) || floatval($value['shop_mem_price']) <= 0)) { $value['shop_mem_status'] = 2; } if ($value[$GoodsModel::PLUS_MEM_STATUS] == 1 && (empty($value[$GoodsModel::PLUS_PRICE]) || floatval($value[$GoodsModel::PLUS_PRICE]) <= 0)) { $value[$GoodsModel::PLUS_MEM_STATUS] = 2; } } } else { $newGoods = array(); } $result['status'] = 1; $result['msg'] = '查询成功'; $result['promotion'] = $promotion; $result['newGoodsList'] = $newGoods; $this->ajaxReturn($result); } /** * 获取商家推荐商品 */ public function getSellGoods_v1() { if (IS_POST) { $store_id = self::$store_id; $merchant_id = self::$merchant_id; $uid = self::$uid; $page = I('post.page'); $limit = 10; $StoreXcxConfigModel = D('RetailStoreXcxConfig'); $sMap = array( $StoreXcxConfigModel::STORE_ID => $store_id, ); $sFields = array( $StoreXcxConfigModel::RECOMMEND_STATUS, $StoreXcxConfigModel::PROMOTION_STATUS, ); $store_config = $StoreXcxConfigModel->getFind($sMap, $sFields); if (!empty($store_config) && $store_config[$StoreXcxConfigModel::RECOMMEND_STATUS] == 0) { $result['status'] = 0; $result['msg'] = '该门店暂未开启推荐商品'; $this->ajaxReturn($result); } $HostModel = D('RetailHost'); $GoodsModel = D('RetailGoods'); if ($store_config[$StoreXcxConfigModel::PROMOTION_STATUS] == 1) { //开启促销 $map = array( 'h.' . $HostModel::STORE_ID => $store_id, 'h.' . $HostModel::MERCHANT_ID => $merchant_id, 'h.' . $HostModel::STATUS => 1, 'h.' . $HostModel::TYPE => 1, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::ONLINE_PRICE => array('gt', 0), ); $field = array( 'h.' . $HostModel::ID, 'h.' . $HostModel::GOODS_ID, 'h1.' . $HostModel::STATUS . ' as promotion_status', 'h1.' . $HostModel::ACT_PRICE, 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NUMBER, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . $GoodsModel::VIP_ONLINE_STATE, 'g.' . 'attribute_state', 'g.' . $GoodsModel::PLUS_MEM_STATUS, 'g.' . $GoodsModel::PLUS_PRICE, 'g.' . 'shop_mem_status', 'g.' . 'shop_mem_price' ); $order = 'h.' . $HostModel::SORT . ' asc,h.id desc,g.' . $GoodsModel::GOODS_ORDER . ' asc,h1.' . $HostModel::ACT_PRICE . ' asc'; $goods = $HostModel->getOtherGoods($map, $field, $order, $page . ',' . $limit); } else { $map = array( 'h.' . $HostModel::STORE_ID => $store_id, 'h.' . $HostModel::MERCHANT_ID => $merchant_id, 'h.' . $HostModel::STATUS => 1, 'h.' . $HostModel::TYPE => 1, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::ONLINE_PRICE => array('gt', 0), ); $field = array( 'h.' . $HostModel::ID, 'h.' . $HostModel::GOODS_ID, 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NUMBER, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . $GoodsModel::VIP_ONLINE_STATE, 'g.' . 'attribute_state', 'g.' . $GoodsModel::PLUS_MEM_STATUS, 'g.' . $GoodsModel::PLUS_PRICE, 'g.' . 'shop_mem_status', 'g.' . 'shop_mem_price', ); $order = 'h.' . $HostModel::SORT . ' asc,g.' . $GoodsModel::GOODS_ORDER . ' asc,h.id desc'; $goods = $HostModel->getActGoods($map, $field, $order, $page . ',' . $limit); } $Plug = new Plug(); // 判断商户是否开启分销插件 $PlugData = $Plug->PlugPermissions([ 'merchant_id' => self::$merchant_id, 'identification_arr' => ['malldistribution'] ]); if (!empty($PlugData['data']['plug']['malldistribution'])) { $isOpenDistribution = 1; } if (!empty($goods)) { foreach ($goods as &$val) { $val['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $val[$HostModel::GOODS_ID]); $val['goods_image'] = getGoodsImage($val[$GoodsModel::GOODS_IMG_ID], $store_id); $val['promotion_status'] = $val['promotion_status'] ? $val['promotion_status'] : 0; $val['maxBuyNum'] = (int)$val['goods_num']; // // 获取活动信息 // $gift_info = [ // 'goods_id' => $val['id'], // 'uid' => $uid, // ]; // Hook::listen('gifts_info', $gift_info); // if ($gift_info) { // $val['gift_info'] = true; // } else { // $val['gift_info'] = false; // } if ($isOpenDistribution) { try { if (self::$uid) { $MiniDistributorController = new \Distribution\Controller\MiniDistributorController(); $propReturnRes = $MiniDistributorController->disStorePropReturn(self::$uid, $val['id'], $val['online_price']); } } catch (\Exception $e) { } if ($propReturnRes['status'] == 1) { $val['disStoreProp'] = $propReturnRes['disStoreProp']; } } } $res['status'] = 1; $res['info'] = $goods; } else { $res['status'] = 1; $res['info'] = array(); $res['msg'] = '暂无推荐商品'; } $res['limit'] = $limit; } else { $res['status'] = 0; $res['msg'] = '网络错误'; } $this->ajaxReturn($res); } /** * 2019-11-22商品详情 新版促销 * 2020-04-28 会员积分 */ public function getGoodsDetails() { if (IS_POST) { $platform_type = self::$merchant['platform_type'] ? self::$merchant['platform_type'] : 1; //商户平台类型 1默认系统 2微礼平台 $goodsId = I('post.id'); $uid = self::$uid; //用户id $merchant_id = self::$merchant_id; //门店id $userType = self::$user['user_type']; //1普通用户 2plus会员 3常规会员 $GoodsModel = new RetailGoodsModel(); $ImageGallery = new \Common\Model\ImageGalleryModel(); if ($goodsId == 0) { $m_id = I('post.m_id'); if (!$m_id || $m_id == 0) { $res['status'] = 0; $res['msg'] = '参数有误'; $this->ajaxReturn($res); } $storeId = self::$store_id; //门店id $whereMid = [ 'store_id' => $storeId,//门店id 'm_goods_id' => $m_id,//调拨商户的商品id 'status' => 0,//状态:0,正常,1,下架,2,删除。 'online_state' => 1,//是否在商城中出售:0,不在,1,在商城出售。 ]; $fieldMid = 'id'; $orderMid = 'id desc'; //获取门店商品表id $goodsId = $GoodsModel->getOrderFindField($whereMid, $fieldMid, $orderMid); if (empty($goodsId)) { $res['status'] = 0; $res['msg'] = '商品已售罄'; $this->ajaxReturn($res); } } $where = array( 'id' => $goodsId, 'status' => 0, 'online_state' => 1 ); $field = array( 'id', 'details', 'store_id', 'merchant_id', 'goods_name', 'shop_mem_status', 'shop_mem_price', 'attribute_state', 'retail_price', 'online_price', 'vip_online_state', 'goods_img_id', 'sell_num', 'company', 'specifications', 'pricing_method', 'plus_mem_status', 'plus_price', 'fictitious_num', 'subheading', 'delivery_type', 'delivery_template_id', 'shop_mem_integral', 'plus_mem_integral', 'video_id' // 商品视频id ); if ($platform_type == 2) { $field[] = 'third_goods_code'; } $info = $GoodsModel->getFind($where, $field); if (empty($info)) { $res['status'] = 0; $res['msg'] = '商品已售罄'; $this->ajaxReturn($res); } $info['video_url'] = $ImageGallery->getFieldPath(['id' => $info['video_id']]); if ($platform_type == 2) { $info['goods_num'] = 0; } else { $info['goods_num'] = A('Api/Inventory')->goods_num(2, $info['store_id'], $goodsId); } if (!$info['online_price'] || floatval($info['online_price']) < 0.01) { $info['online_price'] = $info['retail_price']; } $info['user_type'] = $userType; $info['goods_img'] = getGoodsImage($info['goods_img_id'], $info['store_id']); $fictitious_num = $info['fictitious_num'] ? $info['fictitious_num'] : 0; //虚拟销量 $info['sell_num'] = round($info['sell_num'] + $fictitious_num, 2); if (!empty($info['details'])) { $info['details'] = str_replace('img src="/', 'img src="' . $this->REQUEST_URL . '/', $info['details']); $info['details'] = str_replace("img src="/", "img src="" . $this->REQUEST_URL . '/', $info['details']); $info['details'] = str_replace("style=''", "", $info['details']); $info['details'] = str_replace('style=""', "", $info['details']); $info['details'] = str_replace('src="/Uploads/', 'src="' . $this->REQUEST_URL . '/Uploads/', $info['details']); } $GoodsBannerModel = new RetailGoodsBannerModel(); $banners = $GoodsBannerModel->getSelect(array('goods_id' => $info['id']), 'image_id'); $info['banners'] = array(); if (!empty($banners)) { foreach ($banners as $key => $value) { $img = getImage($value['image_id']); $info['banners'][] = $img; } } if (empty($info['banners'])) { $info['banners'][] = $info['goods_img']; } $StoreModel = new RetailStoreModel(); $customer_service = $StoreModel->getFindField(array('id' => $info['store_id']), 'customer_service'); $info['phone'] = $StoreModel->getFindField(array('id' => $info['store_id']), 'phone'); $info['customer_service'] = !$customer_service || !$info['phone'] ? 2 : $customer_service; //判断是否是促销商品 $StoreXcxConfigModel = new RetailStoreXcxConfigModel(); $promotion_status = $StoreXcxConfigModel->getFindField(array('storeid' => $info['store_id']), 'promotion_status'); if ($promotion_status == 1) { $HostModel = new RetailHostModel(); $time = time(); $map = array( 'goods_id' => $goodsId, 'type' => 2, 'state' => 1, 'starttime' => array('elt', $time), 'endtime' => array('egt', $time), ); $promotion = $HostModel->getOrderFind($map, '*', 'act_price' . ' asc'); if (!empty($promotion)) { $info['promotion_status'] = 1; $info['act_price'] = $promotion['act_price']; } } if ($info['shop_mem_status'] == 1 && (empty($info['shop_mem_price']) || $info['shop_mem_price'] < 0.01) && $info['attribute_state'] == 1) { $info['shop_mem_price'] = 0.01; $info['goods_num'] = 0; } //判断用户是否收藏该商品 $CollectModel = new RetailCollectModel(); $collect = $CollectModel->getFind(array('goods_id' => $info['id'], 'uid' => $uid)); if (!empty($collect)) { $info['collect'] = 1; //商品被该用户收藏 } else { $info['collect'] = 0; //商品未被该用户收藏 } //判断会员价是否为空 if ($info['attribute_state'] == 1 && $info['shop_mem_status'] == 1 && empty($info['shop_mem_price'])) { $info['shop_mem_status'] = 2; $info['shop_mem_price'] = 0; } //多规格商品 if ($info['attribute_state'] == 2) { //启用多规格,但存在没有添加规格商品的可能 $SkuGoodsModel = new RetailSkuGoodsModel(); $goodsSku = $SkuGoodsModel->getSelect(array('goods_id' => $goodsId, 'state' => 0)); if (empty($goodsSku)) { $info['goods_num'] = 0; } else { $data = $this->getGoodsSku($goodsId, $info['store_id'], $platform_type); $res['skuDetailList'] = $data['skuDetailList']; $res['skuList'] = $data['skuList']; if ($platform_type == 2) { $info['goods_num'] = $data['goods_num']; } } } else { if ($platform_type == 2) { //第三方平台 $ThirdGoodsClass = new Goods(); $result = $ThirdGoodsClass->goodsNumQuery([ 'merchant_id' => self::$merchant_id, 'type' => 2, 'code_arr' => [$info['third_goods_code']], 'Customer_Codes' => self::$store['third_code'] ]); if ($result['status'] == 1 && !empty($result['data'])) { $info['goods_num'] = $result['data'][0]; } } } $info['discount'] = 0; //默认没有优惠 $info['cart_num'] = 1; //获取商户设置更改积分显示 $MerchantConfigModel = D('RetailMerchantConfig'); $MerchantConfig = $MerchantConfigModel->getConfig($info['merchant_id']); if ($MerchantConfig['integral_arrive_cash'] == 1) { if ($MerchantConfig['marketing_methods'] == 1) { $info['plus_mem_integral'] = '0'; $info['shop_mem_integral'] = '0'; } } else { $info['plus_mem_integral'] = '0'; $info['shop_mem_integral'] = '0'; } //团购标签列表 $LabelModel = new RetailStoreLabelModel(); $labelList = $LabelModel->getSelect(array('store_id' => $info['store_id'], 'status' => 1)); foreach ($labelList as &$v) { $v['img'] = D('ImageGallery')->getFieldPath(array('id' => $v['img_id'])); } if (self::$store['guide_online_state'] == 1 && !empty(self::$user['guide_id'])) { $GuideModel = new RetailGuideModel(); $gMap = array( 'id' => self::$user['guide_id'], 'storeid' => $info['store_id'] ); $status = $GuideModel->getFindField($gMap, 'status'); if ($status == 1) { $res['guide_id'] = self::$user['guide_id']; //导购员id } } //免配送费门槛金额 $delivery_cost = self::$store['delivery_cost']; $delivery_status = self::$store['delivery_status']; // 促销赠送活动--暂时关闭 // $res['giftsList'] = $GoodsGiftsActivityModel->judgeGoodsGiftsActivityMini($goodsId); $res['delivery_set'] = $this->handleDelivery($info['delivery_type']); if ($res['delivery_set'][2]['data'] == 1) { $res['delivery_rule'] = $this->handleDeliveryRule($info['delivery_template_id']); } $Plug = new Plug(); // 判断商户是否开启分销插件 $PlugData = $Plug->PlugPermissions([ 'merchant_id' => self::$merchant_id, 'identification_arr' => ['malldistribution'] ]); if (!empty($PlugData['data']['plug']['malldistribution'])) { $isOpenDistribution = 1; } // 分佣计算 $commission['is_self_buying'] = -1; $commission['commission'] = -1; $distributor_id = I('post.distributor_id'); if ($uid && $isOpenDistribution) { //用户已登录 $DistributorModel = new \Distribution\Model\DistributorModel(); $MiniDistributorController = new \Distribution\Controller\MiniDistributorController(); $self_distributor_id = $DistributorModel->getFindField(['uid' => $uid, 'status' => 0], 'id'); //判断当前用户是不是分销员 if ($self_distributor_id) { $DistributionConfig = new \Distribution\Model\ConfigModel(); //当前登录人是分销员 展示自己的预估佣金 $info['distributor_id'] = $self_distributor_id; if ($isOpenDistribution) { try { $propReturnRes = $MiniDistributorController->disStorePropReturn(self::$uid, $info['id'], $info['online_price']); } catch (\Exception $e) { } if ($propReturnRes['status'] == 1) { $commission['is_self_buying'] = $DistributionConfig->getFindField(['merchant_id' => self::$merchant_id], 'is_self_buying'); $commission['commission'] = $propReturnRes['disStoreProp']; } } } else if ($distributor_id) { //是普通用户 进行客户绑定操作 try { $DistributionLink = new \Distribution\Business\Link(); $DistributionLink->getLinkBehavior($uid, $distributor_id, $merchant_id); } catch (\Exception $e) { } } } // 活动赠送 $gift_info = [ 'goods_id' => $goodsId, 'uid' => $uid, ]; Hook::listen('gifts_info', $gift_info); if (!$gift_info) { // 改商品没有活动 $gift_info = []; } $info['gift_info'] = $gift_info; // 满赠商品 $info['self_commission'] = $commission; // 佣金 $Plug = new Plug(); $result = $Plug->PlugPermissions([ 'merchant_id' => self::$merchant_id, 'identification_arr' => [ 'shopcoupon' ] ]); if (!empty($result['data']['plug']['shopcoupon'])) { $shopCouponClass = new ShopCoupon(); $result = $shopCouponClass->couponList([ 'merchant_id' => self::$merchant_id, 'xcx_id' => self::$uid, 'store_id' => self::$store_id, 'goods_id' => $goodsId, 'page' => 1 ]); $shop_coupon = $result['data']['list']; } $res['status'] = 1; $res['msg'] = '查询成功'; $res['data'] = $info; $res['labelList'] = $labelList; $res['delivery_cost'] = $delivery_cost; $res['delivery_status'] = $delivery_status; $res['vip'] = $this->getVipInfo(); $res['vip_register_state'] = empty($MerchantConfig['vip_register_state']) ? 0 : $MerchantConfig['vip_register_state']; $res['plus_register_state'] = empty($MerchantConfig['plus_register_state']) ? 0 : $MerchantConfig['plus_register_state']; $res['shop_coupon'] = $shop_coupon ? $shop_coupon : []; $this->ajaxReturn($res); } } /** * 2019-11-27获取商品分类 */ public function getGoodsClass_v2() { $type = I('post.type'); //获取 1一级分类 2二级分类 3三级分类 $pid = I('post.pid'); //上级分类id $pid = $pid ? $pid : 0; if (!in_array($type, array('1', '2', '3'))) { $result['status'] = 0; $result['msg'] = '请求类型有误'; $this->ajaxReturn($result); } $merchant_id = self::$merchant_id; $store_id = self::$store_id; $RetailStoreModel = new RetailStoreModel(); $industry_id = $RetailStoreModel->getFindField(['id' => $store_id], 'industry_id'); $ClassModel = D('RetailGoodsClass'); $StoreClassModel = D('StoreGoodsClass'); $map = array( 'c.' . $ClassModel::MERCHANT_ID => $merchant_id, 'c.' . $ClassModel::STATUS => 0, 'c.' . $ClassModel::TYPE => $type, 'c.' . $ClassModel::PID => $pid, 's.' . $StoreClassModel::ONLINE_STATE => 1, 's.' . $StoreClassModel::STORE_ID => $store_id, ); if ($industry_id) { $map['c.industry_id'] = ['in', [$industry_id, 0]]; } $fields = array( 'c.' . $ClassModel::ID, 'c.' . $ClassModel::PID, 'c.' . $ClassModel::CLASS_NAME, 'c.' . $ClassModel::BANNER_ID, ); $class_list = $ClassModel->alias('c') ->join('ls_store_goods_class as s on s.class_id=c.id') ->where($map) ->field($fields) ->order('c.' . $ClassModel::CODE . ' asc') ->select(); $ImageGalleryModel = new \Common\Model\ImageGalleryModel(); foreach ($class_list as &$value) { $value['list'] = array(); if ($value['banner_id']) { $value['banner_url'] = $ImageGalleryModel->getOneField(['id' => $value['banner_id']], 'path'); } else { $value['banner_url'] = ''; } } if (!empty($class_list)) { $result['data'] = $class_list; $result['status'] = 1; $result['msg'] = '查询成功'; } else { $result['status'] = 1; $result['data'] = array(); $result['msg'] = '暂无商品分类'; } $this->ajaxBack($result); } /** * 2024-02-07获取商品分类 */ public function getGoodsClass_v3() { $merchant_id = self::$merchant_id; $store_id = self::$store_id; $RetailStoreModel = new RetailStoreModel(); $industry_id = $RetailStoreModel->getFindField(['id' => $store_id], 'industry_id'); $ClassModel = D('RetailGoodsClass'); $StoreClassModel = D('StoreGoodsClass'); $map = array( 'c.' . $ClassModel::MERCHANT_ID => $merchant_id, 'c.' . $ClassModel::STATUS => 0, 's.' . $StoreClassModel::ONLINE_STATE => 1, 's.' . $StoreClassModel::STORE_ID => $store_id, ); if ($industry_id) { $map['c.industry_id'] = ['in', [$industry_id, 0]]; } $fields = array( 'c.' . $ClassModel::ID, 'c.' . $ClassModel::PID, 'c.' . $ClassModel::CLASS_NAME, 'c.' . $ClassModel::TYPE, 'c.' . $ClassModel::BANNER_ID, ); $class_list = $ClassModel->alias('c') ->join('ls_store_goods_class as s on s.class_id=c.id') ->where($map) ->field($fields) ->order('c.' . $ClassModel::CODE . ' asc') ->select(); $ImageGalleryModel = new \Common\Model\ImageGalleryModel(); foreach ($class_list as &$value) { $value['list'] = array(); if ($value['banner_id']) { $value['banner_url'] = $ImageGalleryModel->getOneField(['id' => $value['banner_id']], 'path'); } else { $value['banner_url'] = ''; } } $class_list = buildTree($class_list); if (!empty($class_list)) { $result['data'] = $class_list; $result['status'] = 1; $result['msg'] = '查询成功'; } else { $result['status'] = 1; $result['data'] = array(); $result['msg'] = '暂无商品分类'; } $this->ajaxBack($result); } /** * 根据分类获取商品 */ public function getGoodsList_v2() { $platform_type = self::$merchant['platform_type'] ? self::$merchant['platform_type'] : 1; //商户平台类型 1默认系统 2微礼平台 $type = I('post.type'); $id = I('post.id'); $page = I('post.page'); if (empty($type) || empty($id) || empty($page)) { $result['status'] = 0; $result['msg'] = '缺少参数'; $this->ajaxReturn($result); } $store_id = self::$store_id; if ($type != 1 && $type != 2 && $type != 3) { $result['status'] = 0; $result['msg'] = '参数有误'; $this->ajaxReturn($result); } $GoodsModel = D('RetailGoods'); $count = 10; $idArr = $this->getGoodsClass($id, $type); $HostModel = D('RetailHost'); $map = array( 'g.' . $GoodsModel::STORE_ID => $store_id, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::GOODS_CLASS_ID => array('in', $idArr), 'g.' . $GoodsModel::ONLINE_PRICE => array('gt', 0), 'g.advance_sale_status' => 0 ); $fields = array( 'g.' . 'id', 'g.' . $GoodsModel::COMPANY, 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . 'attribute_state', 'g.' . 'shop_mem_status', 'g.' . 'shop_mem_price', 'g.' . $GoodsModel::PLUS_MEM_STATUS, 'g.' . $GoodsModel::PLUS_PRICE, 'h.' . $HostModel::STATUS . ' as promotion_status', 'h.' . $HostModel::ACT_PRICE, ); if ($platform_type == 2) { $fields[] = 'g.third_goods_code'; } $order = 'g.' . $GoodsModel::GOODS_ORDER . ' asc,' . 'g.' . 'id' . ' desc, h.act_price asc'; $goods = $GoodsModel->getHostGoods($map, $fields, $order, $page . ',' . $count); $Plug = new Plug(); // 判断商户是否开启分销插件 $PlugData = $Plug->PlugPermissions([ 'merchant_id' => self::$merchant_id, 'identification_arr' => ['malldistribution'] ]); if (!empty($PlugData['data']['plug']['malldistribution'])) { $isOpenDistribution = 1; } $StoreXcxConfigModel = D('RetailStoreXcxConfig'); $promotion_status = $StoreXcxConfigModel->getFindField(array($StoreXcxConfigModel::STORE_ID => $store_id), $StoreXcxConfigModel::PROMOTION_STATUS); if (!empty($goods)) { //第三方平台库存 if ($platform_type == 2) { $code_arr = []; //编码集合 $sku_code_arr = []; //规格商品编码集合 $SkuGoodsModel = new RetailSkuGoodsModel(); } foreach ($goods as &$val) { if ($platform_type == 2) { if ($val['attribute_state'] == 2) { //规格 $sku_code_arr[$val['id']] = $SkuGoodsModel->getFindField([ 'goods_id' => $val['id'], 'status' => 1, 'state' => 0 ], 'third_goods_code', true); } else { //非规格 $code_arr[$val['id']] = $val['third_goods_code']; } $val['goods_num'] = 0; } else { $val['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $val['id']); } $val['goods_image'] = getGoodsImage($val[$GoodsModel::GOODS_IMG_ID], $store_id); $val['maxBuyNum'] = (int)$val['goods_num']; if ($promotion_status == 1 && $val['promotion_status'] == 1) { $val['shop_mem_status'] = 2; $val['plus_mem_status'] = 2; } else { $val['promotion_status'] = 0; } if ($isOpenDistribution) { try { if (self::$uid) { $MiniDistributorController = new \Distribution\Controller\MiniDistributorController(); $propReturnRes = $MiniDistributorController->disStorePropReturn(self::$uid, $val['id'], $val['online_price']); } } catch (\Exception $e) { } if ($propReturnRes['status'] == 1) { $val['disStoreProp'] = $propReturnRes['disStoreProp']; } } } if ($platform_type == 2) { if (!empty($code_arr) || !empty($sku_code_arr)) { $GoodsClass = new Goods(); $result = $GoodsClass->goodsNumQuery([ 'type' => 1, 'code_arr' => $code_arr, 'sku_code_arr' => $sku_code_arr, 'merchant_id' => self::$merchant_id, 'Customer_Codes' => self::$store['third_code'] ]); if ($result['status'] == 1 && !empty($result['data'])) { $stock = $result['data']; foreach ($goods as &$val) { if (!empty($stock[$val['id']])) { $val['goods_num'] = $stock[$val['id']]; $val['maxBuyNum'] = (int)$val['goods_num']; } } } } } $result['data'] = $goods; $result['count'] = $count; $result['status'] = 1; $result['msg'] = '查询成功'; } else { $result['status'] = 0; $result['msg'] = '暂无商品'; } $this->ajaxBack($result); } //获取指定分类的分类列表 public function getClassList() { $data = I('post.'); $GoodsClassify = new GoodsClassify(); $result = $GoodsClassify->basisIdGetList($data); $this->ajaxReturn($result); } /** * 商品搜索和更多推荐商品更多 */ public function goodsStatic_v1() { if (IS_POST) { $platform_type = self::$merchant['platform_type'] ? self::$merchant['platform_type'] : 1; $page = I('post.page'); //分页 $search = I('post.search'); //关键字 $type = I('post.type'); // 默认综合 2:最新 3:价格从高到低 4:价格从低到高 5:销量 $class_id = I('post.class_id'); //分类id $goods_id_gather = I('post.goods_id_gather'); //指定的商品id $brands = I('post.brands'); // 品牌 $min = I('post.min'); // 价格区间最小值 $max = I('post.max'); // 价格区间最大值 $store_id = self::$store_id; $GoodsModel = new RetailGoodsModel(); $StoreXcxConfigModel = new RetailStoreXcxConfigModel(); $promotion_status = $StoreXcxConfigModel->getFindField(['storeid' => self::$store_id], 'promotion_status'); $map = array( 'g.store_id' => $store_id, 'g.status' => 0, //正常 'g.online_state' => 1, //商城 'g.online_price' => array('gt', 0), 'g.advance_sale_status' => 0 ); if (is_numeric($min) && is_numeric($max) && $min < $max) { $map['g.online_price'] = array('between', [$min, $max]); } if (!empty($brands)) { $brands = array_filter(explode(',', $brands), function ($value) { return is_numeric($value); }); if (count($brands)) { $map['g.goods_brand_id'] = array('in', $brands); } } $page = $page ? $page : 1; $count = 20; //搜索 if (isset($search) && $search != '') { $map['g.goods_name|inve.name'] = array('like', '%' . $search . '%'); } if (isset($class_id) && $class_id != '' && !empty($class_id)) { $class_id = $this->getGoodsClass($class_id); $map['g.goods_class_id'] = array('in', $class_id); } else { if (!empty($goods_id_gather)) { $map['g.id'] = ['in', $goods_id_gather]; } } switch ($type) { case 2: $order = 'g.add_time desc,g.id desc'; break; case 3: $order = 'g.online_price desc,g.id desc'; break; case 4: $order = 'g.online_price asc,g.id desc'; break; case 5: $order = 'g.sell_num desc,g.id desc'; break; default: $order = 'g.goods_order asc,g.id desc'; break; } $fields = array( 'g.id', 'g.goods_name', 'g.goods_img_id', 'g.online_price', 'g.vip_online_state', 'g.shop_mem_status', 'g.shop_mem_price', 'g.plus_mem_status', 'g.plus_price', 'g.attribute_state', ); if ($platform_type == 2) { $fields[] = 'g.third_goods_code'; } if ($promotion_status == 1) { $fields[] = 'h.act_price'; $fields[] = 'h.status as promotion_status'; $order .= ',h.act_price asc'; $goods = $GoodsModel->getHostGoods($map, $fields, $order, $page . ',' . $count); } else { $goods = $GoodsModel->getUnHostGoods($map, $fields, $order, $page . ',' . $count); } if ($goods) { $Plug = new Plug(); // 判断商户是否开启分销插件 $PlugData = $Plug->PlugPermissions([ 'merchant_id' => self::$merchant_id, 'identification_arr' => ['malldistribution'] ]); if (!empty($PlugData['data']['plug']['malldistribution'])) { $isOpenDistribution = 1; } if ($platform_type == 2) { //第三方平台 $code_arr = []; $sku_code_arr = []; $SkuGoodsModel = new RetailSkuGoodsModel(); } foreach ($goods as &$val) { $val['goods_image'] = getGoodsImage($val['goods_img_id'], $store_id); if ($promotion_status != 1) { $val['promotion_status'] = 0; } if ($isOpenDistribution) { try { if (self::$uid) { $MiniDistributorController = new \Distribution\Controller\MiniDistributorController(); $propReturnRes = $MiniDistributorController->disStorePropReturn(self::$uid, $val['id'], $val['online_price']); } } catch (\Exception $e) { } if ($propReturnRes['status'] == 1) { $val['disStoreProp'] = $propReturnRes['disStoreProp']; } } if ($platform_type == 2) { $val['goods_num'] = 0; if ($val['attribute_state'] == 2) { $sku_code_arr[$val['id']] = $SkuGoodsModel->getFindField([ 'goods_id' => $val['id'], 'status' => 1, 'state' => 0 ], 'third_goods_code', true); } else { $code_arr[$val['id']] = $val['third_goods_code']; } } else { $val['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $val['id']); } if ($val['shop_mem_status'] == 1 && (empty($val['shop_mem_price']) || floatval($val['shop_mem_price']) <= 0)) { $val['shop_mem_status'] = 2; } if ($val['plus_mem_status'] == 1 && (empty($val['plus_price']) || floatval($val['plus_price']) <= 0)) { $val['plus_mem_status'] = 2; } } if ($platform_type == 2) { //第三方平台 if (!empty($code_arr) || !empty($sku_code_arr)) { $GoodsClass = new Goods(); $thirdResult = $GoodsClass->goodsNumQuery([ 'type' => 1, 'code_arr' => $code_arr, 'sku_code_arr' => $sku_code_arr, 'merchant_id' => self::$merchant_id, 'Customer_Codes' => self::$store['third_code'] ]); if ($thirdResult['status'] == 1 && !empty($thirdResult['data'])) { $goods_stock = $thirdResult['data']; foreach ($goods as &$val) { if (!empty($goods_stock[$val['id']])) { $val['goods_num'] = $goods_stock[$val['id']]; } } } } } $res['count'] = $count; $res['status'] = 1; $res['msg'] = '查询成功'; $res['goods'] = $goods; $res['brands'] = $GoodsModel->getGoodsBrand($map); } else { $res['count'] = $count; $res['status'] = 1; $res['msg'] = '暂无商品'; $res['goods'] = array(); } } else { $res['status'] = 0; $res['msg'] = '网络错误'; } $this->ajaxBack($res); } /** * 预售轮播图 */ public function advanceBanner() { $where = array( 'store_id' => self::$store_id, 'merchant_id' => self::$merchant_id, 'status' => 1, 'scene_type' => 3 ); $BannerList = D('FaceBackGround')->getSelect($where, "img_id", "sort asc"); if ($BannerList) { foreach ($BannerList as &$img) { $img['image'] = getImage($img['img_id']); } } $res['status'] = 1; $res['image'] = $BannerList; $this->ajaxReturn($res); } /** * 预售商品列表 */ public function advanceList() { $AdvanceGoodsModel = D("AdvanceGoods"); $AdvanceSkuGoodsModel = D("AdvanceSkuGoods"); $time = time(); $page = I("post.page"); $limit = 10; $where = array( 'a.store_id' => self::$store_id, 'a.merchant_id' => self::$merchant_id, 'a.advance_state' => 1, 'a.surplus_num' => array('gt', 0), 'a.advance_end_time' => array('gt', time()), 'g.status' => 0 ); $advanceList = M("retail_advance_goods as a") ->join("ls_retail_goods as g on a.goods_id=g.id") ->field("a.id,a.goods_id,a.advance_start_time,a.advance_num,a.surplus_num,a.advance_price,a.earnest_price,a.advance_type,a.attribute_state,g.goods_name,g.goods_img_id") ->where($where) ->order("a.id desc") ->page($page, $limit) ->select(); $advance_active = array(); if ($advanceList) { foreach ($advanceList as &$val) { $frozen_param = array( 'id' => $val['id'], 'goods_id' => $val['goods_id'], 'sku_id' => '', 'attribute_state' => $val['attribute_state'] ); $frozen_num = $AdvanceGoodsModel->frozen_num($frozen_param); $val['surplus_num'] = round($val['surplus_num'] - $frozen_num, 3); if ($val['surplus_num'] <= 0) { continue; } $val['reserve_num'] = D("RetailBillAdvance")->getUserNum(array("id" => $val['id']))['data']['count']; //已经预定人数 $val['img'] = getGoodsImage($val['goods_img_id'], self::$store_id); $val['img'] = $val['img'] ? $val['img'] : ''; if ($val['advance_start_time'] < $time) { $val['start_type'] = 1; //开始活动 } else { $val['start_type'] = 0; //未开始活动 } switch ($val['attribute_state']) { case 1: $val['advance_price'] = number_format($val['advance_price'], 2); if ($val['advance_type'] == 2) { $val['earnest_price'] = number_format($val['earnest_price'], 2); $val['tail_price'] = number_format($val['advance_price'] - $val['earnest_price'], 2); } break; case 2: $sku_info = $AdvanceSkuGoodsModel->where(array('advance_id' => $val['id'], 'goods_id' => $val['goods_id'], 'advance_state' => 1))->order("advance_price asc")->find(); $val['advance_price'] = $sku_info['advance_price'] ? number_format($sku_info['advance_price'], 2) : ''; if ($val['advance_type'] == 2) { $val['earnest_price'] = $sku_info['earnest_price'] ? number_format($sku_info['earnest_price'], 2) : ''; $val['tail_price'] = number_format($sku_info['advance_price'] - $sku_info['earnest_price'], 2); } break; } array_push($advance_active, $val); } $res['status'] = 1; $res['advanceList'] = $advance_active; } else { $res['status'] = 0; $res['msg'] = '改活动已下架'; } $this->ajaxReturn($res); } /** * 预售商品详情 */ public function advanceGoods() { $platform_type = self::$merchant['platform_type']; $id = I('post.id'); //商品id $uid = self::$uid; //用户id $store_id = self::$store_id; if (!$id) { $res = array('status' => 0, 'msg' => '参数错误'); $this->ajaxReturn($res); } $ImageGallery = new \Common\Model\ImageGalleryModel(); $AdvanceSkuGoodsModel = D("AdvanceSkuGoods"); $where = array( 'a.store_id' => $store_id, 'a.goods_id' => $id, 'a.advance_state' => 1, 'g.status' => 0 ); $fields = [ 'a.*', 'g.details', 'g.video_id', 'g.goods_name', 'g.goods_img_id', 'g.goods_class_id' ]; if ($platform_type == 2) { //第三方平台 $fields[] = 'g.third_goods_code'; } $AdvanceGoodsModel = D("AdvanceGoods"); $info = $AdvanceGoodsModel->advanceGoodsInfo($where, $fields); if (!$info) { $res = array('status' => 0, 'msg' => '活动商品已下架'); $this->ajaxReturn($res); } $frozen_param = array( 'id' => $info['id'], 'goods_id' => $info['goods_id'], 'sku_id' => '', 'attribute_state' => $info['attribute_state'] ); $frozen_num = $AdvanceGoodsModel->frozen_num($frozen_param); $info['surplus_num'] = round($info['surplus_num'] - $frozen_num, 3); if ($info['surplus_num'] <= 0) { $res = array('status' => 0, 'msg' => '该商品已售空'); $this->ajaxReturn($res); } $info['goods_img'] = getGoodsImage($info['goods_img_id'], $store_id); $GoodsBannerModel = D('RetailGoodsBanner'); $banners = $GoodsBannerModel->getSelect(array($GoodsBannerModel::GOODS_ID => $id), $GoodsBannerModel::IMAGE_ID); $info['banners'] = array(); if (!empty($banners)) { foreach ($banners as $key => $value) { $img = getGoodsImage($value[$GoodsBannerModel::IMAGE_ID], $store_id); $info['banners'][] = $img; } } if ($info['attribute_state'] == 1) { if ($platform_type == 2 && !empty($info['third_goods_code'])) { //第三方平台 $ThirdGoodsClass = new Goods(); $thirdResult = $ThirdGoodsClass->goodsNumQuery([ 'merchant_id' => self::$merchant_id, 'type' => 2, 'code_arr' => [$info['third_goods_code']], 'Customer_Codes' => self::$store['third_code'] ]); if ($thirdResult['status'] == 1 && !empty($thirdResult['data'])) { $goods_stock = $thirdResult['data'][0]; if ($goods_stock <= 0) { $info['surplus_num'] = 0; $ThirdGoodsClass->activityOff([ 'id' => $info['id'], 'type' => 3 ]); } else if ($goods_stock < $info['surplus_num']) { $info['surplus_num'] = $goods_stock; } } else { $info['surplus_num'] = 0; } if ($info['surplus_num'] <= 0) { $res = array('status' => 0, 'msg' => '该商品已售空'); $this->ajaxReturn($res); } } $info['advance_price'] = round($info['advance_price'], 2); $info['advance_num'] = round($info['advance_num'], 3); $info['surplus_num'] = round($info['surplus_num'], 3); if ($info['advance_type'] == 2) { //定金 $info['earnest_price'] = round($info['earnest_price'], 2); $info['arrive_price'] = round($info['arrive_price'], 2); } } else if ($info['attribute_state'] == 2) { $sku_advance_info = $AdvanceSkuGoodsModel->where(array('goods_id' => $id, 'advance_state' => 1))->field('advance_price,earnest_price,arrive_price')->order('advance_price asc')->find(); $info['advance_price'] = round($sku_advance_info['advance_price'], 2); if ($info['advance_type'] == 2) { $info['earnest_price'] = round($sku_advance_info['earnest_price'], 2); $info['arrive_price'] = round($sku_advance_info['arrive_price'], 2); } $SkuListModel = D('RetailSkuList'); $SkuAttrModel = D('RetailSkuAttr'); $sku_where = array( 'a.store_id' => $store_id, 'a.goods_id' => $id, 'a.advance_state' => 1, 's.state' => 0, 's.status' => 1 ); $fields = [ 'a.sku_id', 'a.advance_num', 'a.surplus_num', 'a.earnest_price', 'a.advance_price', 'a.arrive_price', 's.goods_img_id', 's.sku_id_list', ]; if ($platform_type == 2) { //第三方平台 $fields[] = 's.third_goods_code'; } $sku_info = M("retail_advance_sku_goods as a") ->join('ls_retail_sku_goods as s on a.sku_id=s.id') ->where($sku_where) ->field($fields) ->select(); if ($sku_info) { $attrArr = array(); if ($platform_type == 2) { //第三方平台 $code_arr = []; $z_frozen_num = 0; //总的冻结数量 } foreach ($sku_info as $key => &$val) { $frozen_param = array( 'id' => $info['id'], 'goods_id' => $info['goods_id'], 'sku_id' => $val['sku_id'], 'attribute_state' => $info['attribute_state'] ); $frozen_num = $AdvanceGoodsModel->frozen_num($frozen_param); //冻结库存 if ($platform_type == 2) { $code_arr[$val['sku_id']] = $val['third_goods_code']; $z_frozen_num += $frozen_num; } $info['surplus_num'] = round($info['surplus_num'] - $frozen_num, 3); $attrArr = array_merge($attrArr, explode(',', $val['sku_id_list'])); $val['goods_img'] = getGoodsImage($val['goods_img_id'], $store_id); $map = array( 'id' => array('in', $val['sku_id_list']) ); $name = $SkuListModel->getFindField($map, 'name', true); $val['name'] = implode(',', $name); $val['advance_price'] = round($val['advance_price'], 2); $val['advance_num'] = round($val['advance_num'], 3); $val['surplus_num'] = round($val['surplus_num'] - $frozen_num, 3); if ($info['advance_type'] == 2) { //定金 $val['earnest_price'] = round($val['earnest_price'], 2); $val['arrive_price'] = round($val['arrive_price'], 2); } } if ($platform_type == 2 && !empty($code_arr)) { //第三方平台 $ThirdGoodsClass = new Goods(); $thirdResult = $ThirdGoodsClass->goodsNumQuery([ 'merchant_id' => self::$merchant_id, 'type' => 2, 'code_arr' => $code_arr, 'Customer_Codes' => self::$store['third_code'] ]); if ($thirdResult['status'] == 1 && !empty($thirdResult['data'])) { $goods_stock = $thirdResult['data']; $z_surplus_num = 0; //总的可出售库存 foreach ($sku_info as &$val) { if (!empty($goods_stock[$val['sku_id']])) { if ($goods_stock[$val['sku_id']] <= 0) { $val['surplus_num'] = 0; } else if ($goods_stock[$val['sku_id']] < $val['surplus_num']) { $val['surplus_num'] = $goods_stock[$val['sku_id']]; } } else { $val['surplus_num'] = 0; } $z_surplus_num += $val['surplus_num']; } $info['surplus_num'] = $z_surplus_num; } else { $info['surplus_num'] = 0; } if ($info['surplus_num'] <= 0) { //取消活动 $ThirdGoodsClass->activityOff([ 'id' => $info['id'], 'type' => 3 ]); } } $attr = array(); $sku_id_list = explode(',', $sku_info[0]['sku_id_list']); foreach ($sku_id_list as $v) { $attr_id = $SkuListModel->getFindField(array($SkuListModel::ID => $v), $SkuListModel::ATTR_ID); $temp = $SkuAttrModel->getFind(array($SkuAttrModel::ID => $attr_id), $SkuAttrModel::ID . ',' . $SkuAttrModel::NAME); $map = array( $SkuListModel::ID => array('in', $attrArr), $SkuListModel::ATTR_ID => $attr_id ); $temp['list'] = $SkuListModel->getSelect($map, $SkuListModel::ID . ',' . $SkuListModel::NAME); $attr[] = $temp; } $res['skuDetailList'] = $sku_info; //商品规格 $res['skuList'] = $attr; //规格分类列表 } } if ($info['advance_type'] == 2) { //定金 $info['tail_time'] = date('Y.m.d H:i', $info['tail_start_time']) . ' ~ ' . date('Y.m.d H:i', $info['tail_end_time']); $info['tail_start_time'] = date('Y.m.d H:i', $info['tail_start_time']); } $info['video_url'] = $ImageGallery->getFieldPath(['id' => $info['video_id']]); $info['advanceEndTime'] = date('Y.m.d H:i', $info['advance_end_time']); $info['deliver_s_time'] = $info['deliver_start_time']; $info['deliver_e_time'] = $info['deliver_end_time']; $info['deliver_time'] = date('Y.m.d H:i', $info['deliver_start_time']); $info['deliver_start_time'] = date('m月d日', $info['deliver_start_time']); $info['deliver_end_time'] = date('m月d日', $info['deliver_end_time']); $info['restrict_num'] = $info['restrict_num'] ? round($info['restrict_num'], 3) : null; $info['rise_num'] = $info['rise_num'] ? round($info['rise_num'], 3) : null; if (!empty($info['details'])) { $info['details'] = str_replace('img src="/', 'img src="' . $this->REQUEST_URL . '/', $info['details']); $info['details'] = str_replace("img src="/", "img src="" . $this->REQUEST_URL . '/', $info['details']); $info['details'] = str_replace("style=''", "", $info['details']); $info['details'] = str_replace('style=""', "", $info['details']); $info['details'] = str_replace('src="/Uploads/', 'src="' . $this->REQUEST_URL . '/Uploads/', $info['details']); } $info['reserve_num'] = D("RetailBillAdvance")->getUserNum(array("id" => $info['id']))['data']['count']; //已经预定人数 $res['delivery_set'] = $this->handleDelivery($info['delivery_type']); if ($res['delivery_set'][2]['data'] == 1) { $res['delivery_rule'] = $this->handleDeliveryRule($info['delivery_template_id']); } $collect_model = new RetailCollectModel(); $collect = $collect_model->getFind(array('goods_id' => $info['goods_id'], 'activity_id' => $info['id'], 'uid' => $uid, 'type' => 4)); if ($collect) { $info['collect_state'] = 1; //已收藏 } else { $info['collect_state'] = 0; //未收藏 } //免配送费门槛金额 $delivery_cost = self::$store['delivery_cost']; $delivery_status = self::$store['delivery_status']; $res['status'] = 1; $res['data'] = $info; $res['delivery_cost'] = $delivery_cost; $res['delivery_status'] = $delivery_status; $this->ajaxReturn($res); } /** * 获取促销商品列表 * 2019-12-27 */ public function getPromotion() { $page = I('post.page'); $keyword = I('post.keyword'); $store_id = self::$store_id; $StoreXcxConfigModel = D('RetailStoreXcxConfig'); $promotion_status = $StoreXcxConfigModel->getFindField(array($StoreXcxConfigModel::STORE_ID => $store_id), $StoreXcxConfigModel::PROMOTION_STATUS); if ($promotion_status != 1) { $res['status'] = 0; $res['msg'] = '商家未开启促销功能'; $this->ajaxReturn($res); } $HostModel = D('RetailHost'); $GoodsModel = D('RetailGoods'); //促销 $time = time(); $map = array( 'h.' . $HostModel::STORE_ID => $store_id, 'h.' . $HostModel::TYPE => 2, 'h.' . $HostModel::STATUS => 1, 'h.' . $HostModel::STATE => 1, 'h.' . $HostModel::START_TIME => array('elt', $time), 'h.' . $HostModel::END_TIME => array('egt', $time), 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0, ); if (!empty($keyword)) { $map['g.' . $GoodsModel::GOODS_NAME] = array('like', '%' . $keyword . '%'); } $field = array( 'h.' . $HostModel::ID, 'h.' . $HostModel::GOODS_ID, 'h.' . $HostModel::STATUS . ' as promotion_status', 'h.' . $HostModel::ACT_PRICE, 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . $GoodsModel::VIP_ONLINE_STATE, 'g.' . 'attribute_state', 's.goods_num' ); $limit = 10; $order = 'h.id desc,g.' . $HostModel::ID . ' desc,' . 'g.' . 'id' . ' desc, h.act_price asc'; $promotion = $HostModel->getHostGoods_v1($map, $field, $order, $page . ',' . $limit); foreach ($promotion as &$val) { $val['goods_image'] = getGoodsImage($val[$GoodsModel::GOODS_IMG_ID], $store_id); $val['goods_num'] = floatval($val['goods_num']); if ($val['attribute_state'] == 2) { $val['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $val['goods_id']); } } $res['status'] = 1; $res['data'] = $promotion; $res['limit'] = $limit; $this->ajaxReturn($res); } /** * 获取所有最新商品列表 */ public function getNewGoods() { $page = I('post.page'); $keyword = I('post.keyword'); $store_id = self::$store_id; $StoreXcxConfigModel = D('RetailStoreXcxConfig'); $store_config = $StoreXcxConfigModel->getFind(array($StoreXcxConfigModel::STORE_ID => $store_id), array($StoreXcxConfigModel::PROMOTION_STATUS, $StoreXcxConfigModel::NEW_STATUS)); $HostModel = D('RetailHost'); $GoodsModel = D('RetailGoods'); //促销 if ($store_config[$StoreXcxConfigModel::NEW_STATUS] != 1) { $res['status'] = 0; $res['msg'] = '商家未开启最新商品功能'; $this->ajaxReturn($res); } //最新 $limit = 10; if ($store_config[$StoreXcxConfigModel::PROMOTION_STATUS] == 1) { //开启促销 $map = array( 'h.' . $HostModel::STORE_ID => $store_id, 'h.' . $HostModel::TYPE => 3, 'h.' . $HostModel::STATUS => 1, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::ONLINE_PRICE => array('gt', 0), ); if (!empty($keyword)) { $map['g.' . $GoodsModel::GOODS_NAME] = array('like', '%' . $keyword . '%'); } $field = array( 'h.' . $HostModel::ID, 'h.' . $HostModel::GOODS_ID, 'h1.' . $HostModel::ACT_PRICE, 'h1.' . $HostModel::STATUS . ' as promotion_status', 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . $GoodsModel::VIP_ONLINE_STATE, 'g.' . 'attribute_state', 'g.' . 'shop_mem_status', 'g.' . 'shop_mem_price', 'g.' . $GoodsModel::PLUS_MEM_STATUS, 'g.' . $GoodsModel::PLUS_PRICE, ); $order = 'h.id desc,g.' . $GoodsModel::GOODS_ORDER . ' asc,' . 'g.' . 'id' . ' desc, h1.act_price asc'; $newGoods = $HostModel->getOtherGoods($map, $field, $order, $page . ',' . $limit); } else { $map = array( 'h.' . $HostModel::STORE_ID => $store_id, 'h.' . $HostModel::TYPE => 3, 'h.' . $HostModel::STATUS => 1, 'g.' . $GoodsModel::ONLINE_STATE => 1, 'g.' . $GoodsModel::STATUS => 0, 'g.' . $GoodsModel::ONLINE_PRICE => array('gt', 0), ); if (!empty($keyword)) { $map['g.' . $GoodsModel::GOODS_NAME] = array('like', '%' . $keyword . '%'); } $field = array( 'h.' . $HostModel::ID, 'h.' . $HostModel::GOODS_ID, 'g.' . $GoodsModel::GOODS_IMG_ID, 'g.' . $GoodsModel::GOODS_NAME, 'g.' . $GoodsModel::ONLINE_PRICE, 'g.' . $GoodsModel::VIP_ONLINE_STATE, 'g.' . 'attribute_state', 'g.' . 'shop_mem_status', 'g.' . 'shop_mem_price', 'g.' . $GoodsModel::PLUS_MEM_STATUS, 'g.' . $GoodsModel::PLUS_PRICE, ); $newGoods = $HostModel->getActGoods($map, $field, 'g.' . 'id' . ' desc', $page . ',' . $limit); } foreach ($newGoods as &$value) { $value['promotion_status'] = $value['promotion_status'] ?: 0; $value['goods_image'] = getGoodsImage($value[$GoodsModel::GOODS_IMG_ID], $store_id); $value['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $value['goods_id']); if ($value['shop_mem_status'] == 1 && (empty($value['shop_mem_price']) || floatval($value['shop_mem_price']) <= 0)) { $value['shop_mem_status'] = 2; } if ($value[$GoodsModel::PLUS_MEM_STATUS] == 1 && (empty($value[$GoodsModel::PLUS_PRICE]) || floatval($value[$GoodsModel::PLUS_PRICE]) <= 0)) { $value[$GoodsModel::PLUS_MEM_STATUS] = 2; } } $res['status'] = 1; $res['data'] = $newGoods; $res['limit'] = $limit; $this->ajaxBack($res); } /** * 扫码购 */ public function scavenging_v1() { $code = I('post.goods_code'); if (empty($code)) { $res['status'] = 0; $res['msg'] = '缺少参数'; $this->ajaxReturn($res); } $store_id = self::$store_id; $merchant_id = self::$merchant_id; $num = 1; $GoodsModel = D('RetailGoods'); $map = array( $GoodsModel::STORE_ID => $store_id, $GoodsModel::MERCHANT_ID => $merchant_id, $GoodsModel::STATUS => 0, $GoodsModel::ONLINE_STATE => 1, ); $canChangeCarNum = 1; //是否可以修改购物车数量 1可以 0不可以 if (preg_match("/^\d{18}$/", $code)) { $goods_number = substr($code, 2, 5); $num = substr($code, 12, 5); $num = round($num / 1000, 3); $map[$GoodsModel::GOODS_NUMBER] = $goods_number; $canChangeCarNum = 0; } else { $map[$GoodsModel::GOODS_CODE] = $code; } $SkuGoodsModel = D('RetailSkuGoods'); $goodsFields = array( 'id', 'id' . ' as goods_id', $GoodsModel::GOODS_NAME, $GoodsModel::SELL_NUM, $GoodsModel::FICTITIOUS_NUM, $GoodsModel::COMPANY, $GoodsModel::SPECIFICATIONS, 'shop_mem_status', 'shop_mem_price', $GoodsModel::PLUS_MEM_STATUS, $GoodsModel::PLUS_PRICE, 'attribute_state', $GoodsModel::GOODS_IMG_ID, $GoodsModel::RETAIL_PRICE, $GoodsModel::ONLINE_PRICE, $GoodsModel::PRICING_METHOD, ); $goods = $GoodsModel->getFind($map, $goodsFields); $promotion_price = 0; if ($goods) { $StoreXcxConfigModel = D('RetailStoreXcxConfig'); $promotion_status = $StoreXcxConfigModel->getFindField(array($StoreXcxConfigModel::STORE_ID => $store_id), $StoreXcxConfigModel::PROMOTION_STATUS); //判断是否开启促销 if ($promotion_status == 1) { $HostModel = D('RetailHost'); $time = time(); $hMap = array( $HostModel::GOODS_ID => $goods['id'], $HostModel::START_TIME => array('elt', $time), $HostModel::END_TIME => array('gt', $time), $HostModel::STATUS => 1, $HostModel::TYPE => 2, ); $promotion_price = $HostModel->getOrderFindField($hMap, $HostModel::ACT_PRICE, $HostModel::ACT_PRICE . ' asc'); } //商品条码 if (!$goods[$GoodsModel::ONLINE_PRICE] || floatval($goods[$GoodsModel::ONLINE_PRICE]) < 0.01) { $goods[$GoodsModel::ONLINE_PRICE] = $goods[$GoodsModel::RETAIL_PRICE]; } if ($goods['shop_mem_status'] == 1 && !$goods['shop_mem_price'] || $goods['shop_mem_status'] == 2) { $goods['shop_mem_price'] = 0; $goods['shop_mem_status'] = 2; } if ($goods['attribute_state'] == 2) { $goodsSku = $SkuGoodsModel->getFind(array('state' => 0, 'goods_id' => $goods['id'])); if (empty($goodsSku)) { $goods['attribute_state'] = 1; } } $goods['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $goods['id']); $redis_key = 'retail_goods_' . $goods['id'] . '_*'; $wait_pay_num = $this->getWaitNum($redis_key); $value['goods_num'] = round($goods['goods_num'] - $wait_pay_num, 3); $goods['goods_img'] = getGoodsImage($goods[$GoodsModel::GOODS_IMG_ID], $store_id); $res['status'] = 1; $res['msg'] = '查找成功'; $res['goods'] = $goods; } else { //规格条码 $map = array( 'state' => 0, $SkuGoodsModel::STORE_ID => $store_id, $SkuGoodsModel::SKU_CODE => $code ); $skuGoods = $SkuGoodsModel->getFind($map); if (!empty($skuGoods)) { $map = array( 'id' => $skuGoods['goods_id'], $GoodsModel::STATUS => 0, $GoodsModel::STORE_ID => $store_id, $GoodsModel::MERCHANT_ID => $merchant_id, $GoodsModel::ONLINE_STATE => 1, ); $goods = $GoodsModel->getFind($map); if (!empty($goods)) { if (!$goods[$GoodsModel::ONLINE_PRICE] || floatval($goods[$GoodsModel::ONLINE_PRICE]) < 0.01) { $goods[$GoodsModel::ONLINE_PRICE] = $goods[$GoodsModel::RETAIL_PRICE]; } $goods['goods_img'] = getGoodsImage($goods[$GoodsModel::GOODS_IMG_ID], $store_id); $goods['goods_id'] = $goods['id']; $goods['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $goods['id']); $redis_key = 'retail_goods_' . $goods['id'] . '_*'; $wait_pay_num = $this->getWaitNum($redis_key); $value['goods_num'] = round($goods['goods_num'] - $wait_pay_num, 3); $res['goods'] = $goods; $res['skuSelect'] = explode(',', $skuGoods['sku_id_list']); $res['status'] = 1; $res['msg'] = '查找成功'; } else { $res['status'] = 0; $res['msg'] = '暂无该商品'; } } else { $res['status'] = 0; $res['msg'] = '暂无该商品'; } } $obj = ['斤', '市斤']; if ($goods['pricing_method'] == 2 && array_search($goods['company'], $obj)) { //市斤*2,由于大华称传输的是公斤 $num = round($num * 2, 3); } $res['canChangeCarNum'] = $canChangeCarNum; $res['num'] = $num; $res['act_price'] = $promotion_price; $res['promotion_status'] = $promotion_price ? 1 : 0; $this->ajaxReturn($res); } /** * 获取商品规格 */ public function getGoodsSku_v1() { $platform_type = self::$merchant['platform_type'] ? self::$merchant['platform_type'] : 1; $goods_id = I('post.goods_id'); if (empty($goods_id)) { $result['status'] = 0; $result['msg'] = '缺少参数商品id'; $this->ajaxReturn($result); } $GoodsModel = D('RetailGoods'); $map = array( $GoodsModel::STORE_ID => self::$store_id, $GoodsModel::ONLINE_STATE => 1, $GoodsModel::STATUS => 0, 'id' => $goods_id ); $goods = $GoodsModel->getFind($map); if (!empty($goods)) { if ($goods['attribute_state'] != 2) { $result['status'] = 2; $result['msg'] = '该商品未启用规格'; return $result; } $data = $this->getGoodsSku($goods_id, $goods['store_id'], $platform_type); $result['goods_img'] = getGoodsImage($goods[$GoodsModel::GOODS_IMG_ID], $goods['store_id']); $result['goods_name'] = $goods['goods_name']; if ($platform_type == 2) { //第三方平台 $result['goods_num'] = $data['goods_num']; } else { $result['goods_num'] = A('Api/Inventory')->goods_num(2, $goods['store_id'], $goods_id); } $result['data'] = $data; $result['status'] = 1; $result['msg'] = '查询成功'; } else { $result['status'] = 0; $result['msg'] = '商品不存在或已下架'; } $this->ajaxReturn($result); } }