2871 行
126 KiB
PHP
可执行文件
2871 行
126 KiB
PHP
可执行文件
<?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="/", "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);
|
||
}
|
||
}
|