文件
mashangyoujiu/Application/SmallProgramApi/Controller/GoodsController.class.php

2871 行
126 KiB
PHP
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?php
namespace SmallProgramApi\Controller;
//[1.8.50]
use Api\Controller\InventoryController;
use Common\Business\GoodsClassify;
use Common\Business\Plug;
use Common\Business\ShopCoupon;
use Common\Model\RetailCollectModel;
use Common\Model\RetailGoodsBannerModel;
use Common\Model\RetailGoodsModel;
use Common\Model\RetailGuideModel;
use Common\Model\RetailHostModel;
use Common\Model\RetailMealPlusGoodsModel;
use Common\Model\RetailPlusMealGroupModel;
use Common\Model\RetailPlusSetModel;
use Common\Model\RetailSinglePlusGoodsModel;
use Common\Model\RetailSkuGoodsModel;
use Common\Model\RetailStoreLabelModel;
use Common\Model\RetailStoreModel;
use Common\Model\RetailStoreXcxConfigModel;
//use Common\Model\RetailGoodsGiftsActivityModel;
use LittleGift\Business\Goods;
use Think\Hook;
class GoodsController extends BaseController
{
public function _initialize()
{
parent::_initialize();
if (empty(self::$store_id)) {
$res['status'] = 0;
$res['msg'] = '缺少门店参数';
$this->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=&quot;/", "img src=&quot;" . $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=&quot;/", "img src=&quot;" . $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=&quot;/", "img src=&quot;" . $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);
}
}