1221 行
52 KiB
PHP
可执行文件
1221 行
52 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace SmallProgramApi\Controller;
|
||
|
||
use Common\Model\RetailGoodsModel;
|
||
use Common\Model\RetailShoppingModel;
|
||
use Common\Model\RetailGoodsGiftsActivityModel;
|
||
use LittleGift\Business\Goods;
|
||
use Think\Controller;
|
||
|
||
//[1.9.6]
|
||
|
||
class ShoppingController extends BaseController
|
||
{
|
||
public function _initialize()
|
||
{
|
||
parent::_initialize();
|
||
if (empty(self::$store_id)) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '缺少门店参数';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if (empty(self::$uid) || self::$user['login_state'] != 1) {
|
||
$res['status'] = -1;
|
||
$res['msg'] = '用户未登录';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取购物车列表
|
||
*/
|
||
public function getShoppingGoods_v1()
|
||
{
|
||
$uid = self::$uid;
|
||
$store_id = self::$store_id;
|
||
$XcxConfigModel = D('RetailStoreXcxConfig');
|
||
$promotion_status = $XcxConfigModel->getFindField(array($XcxConfigModel::STORE_ID => $store_id), $XcxConfigModel::PROMOTION_STATUS);
|
||
|
||
$ShoppingModel = D('RetailShopping');
|
||
$GoodsModel = D('RetailGoods');
|
||
$SkuGoodsModel = D('RetailSkuGoods');
|
||
$SkuListModel = D('RetailSkuList');
|
||
$skuFields = array(
|
||
$SkuGoodsModel::ID,
|
||
$SkuGoodsModel::RETAIL_PRICE,
|
||
$SkuGoodsModel::ONLINE_PRICE,
|
||
$SkuGoodsModel::SHOP_MEM_PRICE,
|
||
$SkuGoodsModel::SKU_ID_LIST,
|
||
$SkuGoodsModel::STATE,
|
||
$SkuGoodsModel::SKU_NUM,
|
||
$SkuGoodsModel::GOODS_IMG_ID,
|
||
$SkuGoodsModel::PLUS_PRICE,
|
||
);
|
||
$goods_list = $ShoppingModel->getShoppingGoods($uid, $store_id, '', '', '1');
|
||
foreach ($goods_list as &$val) {
|
||
// 普通购买
|
||
if (!$val[$GoodsModel::ONLINE_PRICE] || floatval($val[$GoodsModel::ONLINE_PRICE]) < 0.01) {
|
||
$val[$GoodsModel::ONLINE_PRICE] = $val[$GoodsModel::RETAIL_PRICE];
|
||
}
|
||
if (!$promotion_status) {
|
||
$val['h_status'] = 0;
|
||
}
|
||
if ($val['h_status'] == 1) {
|
||
$val[$GoodsModel::VIP_ONLINE_STATE] = 0; // 促销商品 不打折
|
||
$val['online_price'] = $val['act_price'];
|
||
}
|
||
$val['goods_img'] = $this->getGoodsImage($val[$GoodsModel::GOODS_IMG_ID]);
|
||
|
||
if ($val[$GoodsModel::SHOP_MEM_STATUS] == 1 && (!$val[$GoodsModel::SHOP_MEM_PRICE] || $val[$GoodsModel::SHOP_MEM_PRICE] < 0.01) && !$val[$ShoppingModel::SKU_ID]) {
|
||
$val[$GoodsModel::SHOP_MEM_STATUS] = 2;
|
||
}
|
||
if ($val[$GoodsModel::PLUS_MEM_STATUS] == 1 && (!$val[$GoodsModel::PLUS_PRICE] || $val[$GoodsModel::PLUS_PRICE] < 0.01) && !$val[$ShoppingModel::SKU_ID]) {
|
||
$val[$GoodsModel::PLUS_MEM_STATUS] = 2;
|
||
}
|
||
$val['checked'] = true;
|
||
$val['error'] = 0;
|
||
if (!empty($val[$ShoppingModel::SKU_ID])) {
|
||
$val[$ShoppingModel::NUM] = round($val[$ShoppingModel::NUM], 3);
|
||
if ($val[$GoodsModel::ATTRIBUTE_STATE] == 1) {
|
||
$val[$GoodsModel::GOODS_NUM] = 0;
|
||
$val['msg'] = '商品失效';
|
||
$val['error'] = 1;
|
||
$val['checked'] = false;
|
||
} else {
|
||
$sku = $SkuGoodsModel->getFind(array($SkuGoodsModel::ID => $val[$ShoppingModel::SKU_ID]), $skuFields);
|
||
if (empty($sku) || $sku[$SkuGoodsModel::STATE] == 1) {
|
||
$val[$GoodsModel::GOODS_NUM] = 0;
|
||
$val[$ShoppingModel::NUM] = 0;
|
||
$val['msg'] = '商品失效';
|
||
$val['error'] = 1;
|
||
$val['checked'] = false;
|
||
}
|
||
$sku_num = A('Api/Inventory')->goods_num(1, self::$store_id, $val[$ShoppingModel::GOODS_ID], $val[$ShoppingModel::SKU_ID]);
|
||
$sku['goods_num'] = $sku_num;
|
||
$name = $SkuListModel->getFindField(array($SkuListModel::ID => array('in', $sku[$SkuGoodsModel::SKU_ID_LIST])), $SkuListModel::NAME, true);
|
||
$sku['name'] = implode(',', $name);
|
||
$sku['goods_img'] = $this->getGoodsImage($sku[$SkuGoodsModel::GOODS_IMG_ID]);
|
||
$val['goods_img'] = $sku['goods_img'];
|
||
if ($sku[$SkuGoodsModel::STATE] == 0) {
|
||
$val['goods_num'] = $sku_num;
|
||
if (!$val['h_status']) {
|
||
if (!$sku[$SkuGoodsModel::ONLINE_PRICE] || floatval($sku[$SkuGoodsModel::ONLINE_PRICE]) < 0.01) {
|
||
$sku[$SkuGoodsModel::ONLINE_PRICE] = $sku[$SkuGoodsModel::RETAIL_PRICE];
|
||
}
|
||
$val[$GoodsModel::ONLINE_PRICE] = $sku[$SkuGoodsModel::ONLINE_PRICE];
|
||
}
|
||
} else {
|
||
$val['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $val[$ShoppingModel::GOODS_ID]);
|
||
}
|
||
if (!empty($sku[$SkuGoodsModel::SHOP_MEM_PRICE]) && $sku[$SkuGoodsModel::SHOP_MEM_PRICE] > 0) {
|
||
$val[$GoodsModel::SHOP_MEM_PRICE] = $sku[$SkuGoodsModel::SHOP_MEM_PRICE];
|
||
}
|
||
if (!empty($sku[$SkuGoodsModel::PLUS_PRICE]) && $sku[$SkuGoodsModel::PLUS_PRICE] > 0) {
|
||
$val[$GoodsModel::PLUS_PRICE] = $sku[$SkuGoodsModel::PLUS_PRICE];
|
||
}
|
||
$val['sku'] = $sku;
|
||
}
|
||
} else {
|
||
if (($val[$GoodsModel::SHOP_MEM_STATUS] == 1 && (!$val[$GoodsModel::SHOP_MEM_PRICE] || $val[$GoodsModel::SHOP_MEM_PRICE] < 0.01)) || !$val[$GoodsModel::ONLINE_PRICE] || $val[$GoodsModel::ONLINE_PRICE] < 0.01) {
|
||
$val[$GoodsModel::GOODS_NUM] = 0;
|
||
$val[$ShoppingModel::NUM] = 0;
|
||
$val['msg'] = '商品失效';
|
||
$val['error'] = 1;
|
||
$val['checked'] = false;
|
||
} else {
|
||
$val['goods_num'] = A('Api/Inventory')->goods_num(1, $store_id, $val[$ShoppingModel::GOODS_ID]);
|
||
$val[$ShoppingModel::NUM] = round($val[$ShoppingModel::NUM], 3);
|
||
}
|
||
}
|
||
$redis_key = 'retail_goods_' . $val[$ShoppingModel::GOODS_ID] . '_*';
|
||
$wait_pay_num = $this->getWaitNum($redis_key);
|
||
$val['wait_pay_num'] = $wait_pay_num;
|
||
$val['goods_num'] = round($val['goods_num'] - $wait_pay_num, 3);
|
||
if ($val['goods_num'] < $val[$ShoppingModel::NUM]) {
|
||
$val['msg'] = '库存不足';
|
||
$val['error'] = 1;
|
||
$val['checked'] = false;
|
||
}
|
||
$val['maxBuyNum'] = $val['goods_num'];
|
||
if ($val[$GoodsModel::ATTRIBUTE_STATE] == 2 && empty($val[$ShoppingModel::SKU_ID]) || $val[$GoodsModel::ATTRIBUTE_STATE] == 1 && !empty($val[$ShoppingModel::SKU_ID])) {
|
||
$val['msg'] = '商品失效';
|
||
$val['error'] = 1;
|
||
$val['checked'] = false;
|
||
}
|
||
}
|
||
$res['status'] = 1;
|
||
$res['msg'] = '查询成功';
|
||
$res['goods_list'] = $goods_list;
|
||
$vipInfo = $this->getVipInfo();
|
||
if (empty($vipInfo)) {
|
||
$vipInfo = self::$user;
|
||
$vipInfo['discount'] = 1;
|
||
}
|
||
$res['user_info'] = $vipInfo;
|
||
$this->ajaxBack($res);
|
||
}
|
||
|
||
/**
|
||
* 添加到购物车
|
||
*/
|
||
public function addShopping_v1()
|
||
{
|
||
$platform_type = self::$merchant['platform_type'] ? self::$merchant['platform_type'] : 1; //商户平台类型 1默认系统 2微礼平台
|
||
$goods_id = I('post.goods_id'); //商品id
|
||
$num = I('post.num'); //数量
|
||
$type = I('post.type') == 2 ? 2 : 1;//1添加购物车 2购买
|
||
$sku_id = I('post.sku_id'); //规格id
|
||
$fixed_num = I('post.fixed_num') == 1 ? 1 : 0;//是否属固定数量 0不是 1是(针对扫码购扫称重商品条码)
|
||
|
||
if (empty($goods_id)) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '缺少商品id';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if (empty($num)) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '缺少商品数量';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if (!verifyWeight($num, 2)) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '商品数量有误';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
$ShoppingModel = D('RetailShopping');
|
||
$merchant_id = self::$merchant_id;
|
||
$uid = self::$uid;
|
||
|
||
$GoodsModel = new RetailGoodsModel();
|
||
$map = array(
|
||
$GoodsModel::ID => $goods_id,
|
||
$GoodsModel::MERCHANT_ID => $merchant_id,
|
||
$GoodsModel::STATUS => 0,
|
||
$GoodsModel::ONLINE_STATE => 1
|
||
);
|
||
$fields = array(
|
||
$GoodsModel::ID,
|
||
$GoodsModel::ATTRIBUTE_STATE,
|
||
$GoodsModel::SHOP_MEM_PRICE,
|
||
$GoodsModel::ONLINE_PRICE,
|
||
$GoodsModel::SHOP_MEM_STATUS,
|
||
'pricing_method',
|
||
'store_id',
|
||
);
|
||
if ($platform_type == 2) {
|
||
$fields[] = 'third_goods_code';
|
||
}
|
||
$goods = $GoodsModel->getFind($map, $fields);
|
||
if (empty($goods)) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '商品不存在';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$store_id = $goods['store_id'];
|
||
$item = array(
|
||
$ShoppingModel::GOODS_ID => $goods_id,
|
||
$ShoppingModel::STORE_ID => $store_id,
|
||
$ShoppingModel::UID => $uid,
|
||
$ShoppingModel::MERCHANT_ID => $merchant_id,
|
||
$ShoppingModel::NUM => $num,
|
||
$ShoppingModel::ADD_TIME => time(),
|
||
$ShoppingModel::CHANGE_STATE => $fixed_num ? 0 : 1
|
||
);
|
||
if (!empty($sku_id)) {
|
||
$item[$ShoppingModel::SKU_ID] = $sku_id;
|
||
}
|
||
|
||
if (!verifyWeight($num, $goods['pricing_method'])) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '商品数量有误';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if ($goods[$GoodsModel::ATTRIBUTE_STATE] == 1) {
|
||
//无规格商品数量
|
||
if ($platform_type == 2) {
|
||
//第三方平台
|
||
$goods['goods_num'] = 0;
|
||
$ThirdGoodsClass = new Goods();
|
||
$result = $ThirdGoodsClass->goodsNumQuery([
|
||
'merchant_id' => self::$merchant_id,
|
||
'type' => 2,
|
||
'code_arr' => [$goods['third_goods_code']],
|
||
'Customer_Codes' => self::$store['third_code']
|
||
]);
|
||
if ($result['status'] == 1 && !empty($result['data'])) {
|
||
$goods['goods_num'] = $result['data'][0];
|
||
}
|
||
} else {
|
||
$goods['goods_num'] = A('Api/Inventory')->goods_num(1, $store_id, $goods_id);
|
||
}
|
||
}
|
||
$item[$ShoppingModel::TYPE] = 1;// 来源于加入购物车。
|
||
/**
|
||
* 规格商品
|
||
*/
|
||
if ($goods[$GoodsModel::ATTRIBUTE_STATE] == 2) {
|
||
if (!empty($sku_id)) {
|
||
$SkuModel = D('RetailSkuGoods');
|
||
$map = array(
|
||
$SkuModel::ID => $sku_id,
|
||
$SkuModel::STATE => 0,
|
||
$SkuModel::GOODS_ID => $goods_id
|
||
);
|
||
$sku = $SkuModel->getFind($map);
|
||
if (empty($sku)) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '该商品设置有误,暂不能购买';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if ($platform_type == 2) {
|
||
//第三方平台
|
||
$goods['goods_num'] = 0;
|
||
$ThirdGoodsClass = new Goods();
|
||
$result = $ThirdGoodsClass->goodsNumQuery([
|
||
'merchant_id' => self::$merchant_id,
|
||
'type' => 2,
|
||
'code_arr' => [$sku['third_goods_code']],
|
||
'Customer_Codes' => self::$store['third_code']
|
||
]);
|
||
if ($result['status'] == 1 && !empty($result['data'])) {
|
||
$goods['goods_num'] = $result['data'][0];
|
||
}
|
||
} else {
|
||
$goods['goods_num'] = A('Api/Inventory')->goods_num(1, $store_id, $goods_id, $sku_id);
|
||
}
|
||
$goods[$GoodsModel::SHOP_MEM_PRICE] = $sku[$SkuModel::SHOP_MEM_PRICE];
|
||
$goods[$GoodsModel::ONLINE_PRICE] = $sku[$SkuModel::ONLINE_PRICE];
|
||
$item[$ShoppingModel::SKU_ID] = $sku_id;
|
||
} else if ($goods[$GoodsModel::PRICING_METHOD] != 2) {
|
||
$res['status'] = 2;
|
||
$res['msg'] = '该商品规格有变动,请重试';
|
||
$res['attribute_state'] = 2;
|
||
$this->ajaxReturn($res);
|
||
}
|
||
} else if (!empty($sku_id)) {
|
||
$res['status'] = 2;
|
||
$res['msg'] = '该商品规格有变动,请重试';
|
||
$res['attribute_state'] = 1;
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
if (round($goods['goods_num'] - $num) < 0) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '库存不足' . $num;
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if (($goods[$GoodsModel::SHOP_MEM_STATUS] == 1 && (!$goods[$GoodsModel::SHOP_MEM_PRICE] || $goods[$GoodsModel::SHOP_MEM_PRICE] < 0.01)) || !$goods[$GoodsModel::ONLINE_PRICE] || $goods[$GoodsModel::ONLINE_PRICE] < 0.01) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '商品价格设置有误,请联系商家';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if ($type == 2) {
|
||
//立即购买
|
||
$item[$ShoppingModel::TYPE] = 2;
|
||
$id = $ShoppingModel->addOrder($item);
|
||
} else {
|
||
//加入购物车
|
||
$map = array(
|
||
$ShoppingModel::GOODS_ID => $goods_id,
|
||
$ShoppingModel::UID => $uid,
|
||
$ShoppingModel::STATE => 1,
|
||
$ShoppingModel::TYPE => 1,
|
||
$ShoppingModel::CHANGE_STATE => 1
|
||
);
|
||
if (!empty($sku_id)) {
|
||
$map[$ShoppingModel::SKU_ID] = $sku_id;
|
||
}
|
||
$oldOrder = $ShoppingModel->getFind($map);//该商品是否加过购物车
|
||
if (!empty($oldOrder)) {
|
||
$goods['goods_num'] = round($goods['goods_num'] - $oldOrder[$ShoppingModel::NUM], 3);
|
||
}
|
||
if (round($goods['goods_num'] - $num) < 0) {
|
||
$num = $goods['goods_num'];
|
||
}
|
||
if ($num <= 0) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '商品库存不足';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if (!empty($oldOrder)) {
|
||
$success = $ShoppingModel->toSetInc($map, $ShoppingModel::NUM, $num);
|
||
if ($success) {
|
||
$id = $oldOrder[$ShoppingModel::ID];
|
||
} else {
|
||
$id = 0;
|
||
}
|
||
} else {
|
||
$id = $ShoppingModel->addOrder($item);
|
||
}
|
||
}
|
||
if ($id) {
|
||
$res['id'] = $id;
|
||
$res['status'] = 1;
|
||
$res['msg'] = '加入成功';
|
||
} else {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '加入失败';
|
||
}
|
||
$this->ajaxBack($res);
|
||
}
|
||
|
||
/**
|
||
* 获取商品规格
|
||
*/
|
||
public function getGoodsSku_v1()
|
||
{
|
||
$goods_id = I('post.goods_id');
|
||
if (empty($goods_id)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '缺少参数商品id';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
$GoodsModel = new RetailGoodsModel();
|
||
$map = array(
|
||
$GoodsModel::MERCHANT_ID => self::$merchant_id,
|
||
$GoodsModel::ONLINE_STATE => 1,
|
||
$GoodsModel::STATUS => 0,
|
||
$GoodsModel::ID => $goods_id
|
||
);
|
||
$goods = $GoodsModel->getFind($map);
|
||
if (!empty($goods)) {
|
||
if ($goods[$GoodsModel::ATTRIBUTE_STATE] != 2) {
|
||
$result['status'] = 2;
|
||
$result['msg'] = '该商品未启用规格';
|
||
return $result;
|
||
}
|
||
|
||
$data = $this->getGoodsSku($goods_id);
|
||
$result['goods_img'] = $this->getGoodsImage($goods[$GoodsModel::GOODS_IMG_ID]);
|
||
$result['goods_name'] = $goods['goods_name'];
|
||
$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);
|
||
}
|
||
|
||
|
||
/**
|
||
* 修改选择的商品规格
|
||
*/
|
||
public function changeSelectSku_v1()
|
||
{
|
||
$platform_type = self::$merchant['platform_type']; //商户平台类型 1默认系统 2微礼平台
|
||
$id = I('post.id');
|
||
$sku_id = I('post.sku_id');
|
||
if (empty($id) || empty($sku_id)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '缺少参数';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
$uid = self::$uid;
|
||
$ShoppingModel = new RetailShoppingModel();
|
||
$sMap = array(
|
||
$ShoppingModel::ID => $id,
|
||
$ShoppingModel::STORE_ID => self::$store_id,
|
||
$ShoppingModel::STATE => 1,
|
||
$ShoppingModel::TYPE => 1,
|
||
);
|
||
$shopping = $ShoppingModel->getFind($sMap);
|
||
if (empty($shopping)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '请求购物车信息不存在';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
$GoodsModel = new RetailGoodsModel();
|
||
$map = array(
|
||
$GoodsModel::ID => $shopping[$ShoppingModel::GOODS_ID],
|
||
$GoodsModel::STORE_ID => self::$store_id,
|
||
$GoodsModel::STATUS => 0,
|
||
$GoodsModel::ONLINE_STATE => 1,
|
||
);
|
||
$goods = $GoodsModel->getFind($map);
|
||
if (empty($goods)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '商品不存在或已下架';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
if ($goods[$GoodsModel::ATTRIBUTE_STATE] == 1) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '商品规格已关闭';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
$SkuModel = D('RetailSkuGoods');
|
||
$skuInfo = $SkuModel->getFind(array($SkuModel::ID => $sku_id, $SkuModel::STATE => 0));
|
||
if (empty($skuInfo)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '规格不存在';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
$skuInfo['goods_num'] = 0;
|
||
if ($platform_type == 2) {
|
||
$LittleClass = new Goods();
|
||
$thirdResult = $LittleClass->goodsNumQuery([
|
||
'merchant_id'=>self::$merchant_id,
|
||
'type' => 2,
|
||
'code_arr' => [$skuInfo['third_goods_code']],
|
||
'Customer_Codes' => self::$store['third_code']
|
||
]);
|
||
if ($thirdResult['status'] == 1 && !empty($thirdResult['data'])) {
|
||
$skuInfo['goods_num'] = $thirdResult['data'][0];
|
||
}
|
||
} else {
|
||
$skuInfo['goods_num'] = A('Api/Inventory')->goods_num(1, self::$store_id, $skuInfo[$SkuModel::GOODS_ID], $sku_id);
|
||
}
|
||
if ($sku_id == $shopping[$ShoppingModel::SKU_ID]) {
|
||
$result['status'] = 1;
|
||
$result['msg'] = '修改成功';
|
||
} else {
|
||
$otherMap = array(
|
||
$ShoppingModel::SKU_ID => $sku_id,
|
||
$ShoppingModel::UID => $uid,
|
||
$ShoppingModel::TYPE => 1,
|
||
$ShoppingModel::STATE => 1,
|
||
$ShoppingModel::ID => array('neq', $id)
|
||
);
|
||
$otherShop = $ShoppingModel->getFind($otherMap);
|
||
if (!empty($otherShop)) {
|
||
//购物车里有相同规格的商品
|
||
if (round($shopping[$ShoppingModel::NUM] + $otherShop[$ShoppingModel::NUM], 3) <= round($skuInfo['goods_num'], 3)) {
|
||
$num = round($shopping[$ShoppingModel::NUM] + $otherShop[$ShoppingModel::NUM]);
|
||
} else {
|
||
$num = round($skuInfo['goods_num'], 3);
|
||
}
|
||
} else {
|
||
if (round($skuInfo['goods_num'], 3) >= $shopping[$ShoppingModel::NUM]) {
|
||
$num = $shopping[$ShoppingModel::NUM];
|
||
} else {
|
||
$num = round($skuInfo['goods_num'], 3);
|
||
}
|
||
}
|
||
if ($num > 0) {
|
||
$update = $ShoppingModel->updateOrder($sMap, array($ShoppingModel::SKU_ID => $sku_id, $ShoppingModel::NUM => $num));
|
||
} else {
|
||
$update = false;
|
||
}
|
||
if ($update) {
|
||
$ShoppingModel->deleteOrder($otherMap);//删除旧数据
|
||
$result['num'] = $num;
|
||
$result['status'] = 2;
|
||
$result['msg'] = '修改成功';
|
||
} else {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '修改失败 ';
|
||
}
|
||
}
|
||
$this->ajaxReturn($result);
|
||
}
|
||
|
||
/**
|
||
* 修改购物车数量
|
||
*/
|
||
public function changeCartNum_v1()
|
||
{
|
||
$platform_type = self::$merchant['platform_type']; //商户平台类型 1默认系统 2微礼平台
|
||
$id = I('post.id');
|
||
$num = I('post.num');
|
||
if (empty($id) || empty($num) || $num < 0) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '参数有误';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
$uid = self::$uid;
|
||
$merchant_id = self::$merchant_id;
|
||
$ShoppingModel = D('RetailShopping');
|
||
$sMap = array(
|
||
$ShoppingModel::UID => $uid,
|
||
$ShoppingModel::MERCHANT_ID => $merchant_id,
|
||
$ShoppingModel::ID => $id,
|
||
$ShoppingModel::STATE => 1
|
||
);
|
||
$order = $ShoppingModel->getFind($sMap);
|
||
if (empty($order)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '信息有误';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
$GoodsModel = D('RetailGoods');
|
||
$map = array(
|
||
$GoodsModel::ID => $order[$ShoppingModel::GOODS_ID],
|
||
$GoodsModel::STORE_ID => self::$store_id,
|
||
$GoodsModel::STATUS => 0,
|
||
$GoodsModel::ONLINE_STATE => 1
|
||
);
|
||
$goods = $GoodsModel->getFind($map);
|
||
if (empty($goods)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '商品已下架';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
if (!empty($order[$ShoppingModel::SKU_ID])) {
|
||
if ($goods[$GoodsModel::ATTRIBUTE_STATE] == 1) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '商品已失效';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
$SkuModel = D('RetailSkuGoods');
|
||
$map = array(
|
||
$SkuModel::GOODS_ID => $order[$ShoppingModel::GOODS_ID],
|
||
$SkuModel::ID => $order[$ShoppingModel::SKU_ID],
|
||
$SkuModel::STATE => 0
|
||
);
|
||
$sku = $SkuModel->getFind($map);
|
||
if (empty($sku)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '商品规格已失效';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
if ($platform_type == 2) {
|
||
$third_code = $sku['third_goods_code'];
|
||
} else {
|
||
$goods['goods_num'] = A('Api/Inventory')->goods_num(1, self::$store_id, $order[$ShoppingModel::GOODS_ID], $order[$ShoppingModel::SKU_ID]);
|
||
}
|
||
} else {
|
||
if ($platform_type == 2) {
|
||
$third_code = $goods['third_goods_code'];
|
||
} else {
|
||
$goods['goods_num'] = A('Api/Inventory')->goods_num(1, self::$store_id, $order[$ShoppingModel::GOODS_ID]);
|
||
}
|
||
}
|
||
if ($platform_type == 2) {
|
||
//第三方平台
|
||
$goods['goods_num'] = 0;
|
||
$ThirdGoodsClass = new Goods();
|
||
$thirdResult = $ThirdGoodsClass->goodsNumQuery([
|
||
'merchant_id' => self::$merchant_id,
|
||
'type' => 2,
|
||
'code_arr' => [$third_code],
|
||
'Customer_Codes' => self::$store['third_code']
|
||
]);
|
||
if ($thirdResult['status'] == 1 && !empty($thirdResult['data'])) {
|
||
$goods['goods_num'] = $thirdResult['data'][0];
|
||
}
|
||
}
|
||
if (round($goods['goods_num'] - $num, 3) < 0) {
|
||
$num = floor($goods['goods_num']);
|
||
}
|
||
$update = $ShoppingModel->updateOrder($sMap, array($ShoppingModel::NUM => $num));
|
||
if ($update !== false) {
|
||
$result['num'] = $num;
|
||
$result['status'] = 1;
|
||
$result['msg'] = '修改成功';
|
||
} else {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '修改失败';
|
||
}
|
||
$this->ajaxReturn($result);
|
||
}
|
||
|
||
/**
|
||
* 删除购物车商品
|
||
*/
|
||
public function deleteShopping_v1()
|
||
{
|
||
$id = I('post.id');
|
||
if (empty($id) || !is_string($id)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '参数值有误';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
$id = htmlspecialchars_decode($id);
|
||
$id = json_decode($id, true);
|
||
if (empty($id)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '参数值有误';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
foreach ($id as $value) {
|
||
if (!is_numeric($value)) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '参数值有误';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
}
|
||
$ShoppingModel = new RetailShoppingModel();
|
||
$map = array(
|
||
$ShoppingModel::MERCHANT_ID => self::$merchant_id,
|
||
$ShoppingModel::UID => self::$uid,
|
||
$ShoppingModel::ID => array('in', $id)
|
||
);
|
||
$delete = $ShoppingModel->updateOrder($map, array($ShoppingModel::STATE => 0));
|
||
if ($delete) {
|
||
$res['status'] = 1;
|
||
$res['msg'] = '删除成功';
|
||
} else {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '删除失败';
|
||
}
|
||
$this->ajaxReturn($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 = new RetailGoodsModel();
|
||
|
||
$map = array(
|
||
'store_id' => $store_id,
|
||
'merchant_id' => $merchant_id,
|
||
'status' => 0,
|
||
'online_state' => 1,
|
||
'advance_sale_status' => 0,
|
||
);
|
||
$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(
|
||
$GoodsModel::ID,
|
||
$GoodsModel::ID . ' as goods_id',
|
||
$GoodsModel::GOODS_NAME,
|
||
$GoodsModel::SELL_NUM,
|
||
$GoodsModel::FICTITIOUS_NUM,
|
||
$GoodsModel::COMPANY,
|
||
$GoodsModel::SPECIFICATIONS,
|
||
$GoodsModel::SHOP_MEM_STATUS,
|
||
$GoodsModel::SHOP_MEM_PRICE,
|
||
$GoodsModel::PLUS_MEM_STATUS,
|
||
$GoodsModel::PLUS_PRICE,
|
||
$GoodsModel::ATTRIBUTE_STATE,
|
||
$GoodsModel::GOODS_IMG_ID,
|
||
$GoodsModel::RETAIL_PRICE,
|
||
$GoodsModel::ONLINE_PRICE,
|
||
);
|
||
$goods = $GoodsModel->getFind($map, $goodsFields);
|
||
$promotion_status = 0;
|
||
$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[$GoodsModel::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[$GoodsModel::SHOP_MEM_STATUS] == 1 && !$goods[$GoodsModel::SHOP_MEM_PRICE] || $goods[$GoodsModel::SHOP_MEM_STATUS] == 2) {
|
||
$goods[$GoodsModel::SHOP_MEM_PRICE] = 0;
|
||
$goods[$GoodsModel::SHOP_MEM_STATUS] = 2;
|
||
}
|
||
if ($goods[$GoodsModel::ATTRIBUTE_STATE] == 2) {
|
||
$goodsSku = $SkuGoodsModel->getFind(array($SkuGoodsModel::STATE => 0, $SkuGoodsModel::GOODS_ID => $goods[$GoodsModel::ID]));
|
||
if (empty($goodsSku)) {
|
||
$goods[$GoodsModel::ATTRIBUTE_STATE] = 1;
|
||
}
|
||
}
|
||
$goods['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $goods[$GoodsModel::ID]);
|
||
$redis_key = 'retail_goods_' . $goods[$GoodsModel::ID] . '_*';
|
||
$wait_pay_num = $this->getWaitNum($redis_key);
|
||
$value['goods_num'] = round($goods['goods_num'] - $wait_pay_num, 3);
|
||
$goods['goods_img'] = $this->getGoodsImage($goods[$GoodsModel::GOODS_IMG_ID]);
|
||
$res['status'] = 1;
|
||
$res['msg'] = '查找成功';
|
||
$res['goods'] = $goods;
|
||
} else {
|
||
//规格条码
|
||
$map = array(
|
||
$SkuGoodsModel::STATE => 0,
|
||
$SkuGoodsModel::STORE_ID => $store_id,
|
||
$SkuGoodsModel::SKU_CODE => $code
|
||
);
|
||
$skuGoods = $SkuGoodsModel->getFind($map);
|
||
if (!empty($skuGoods)) {
|
||
$map = array(
|
||
$GoodsModel::ID => $skuGoods[$SkuGoodsModel::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'] = $this->getGoodsImage($goods[$GoodsModel::GOODS_IMG_ID]);
|
||
$goods['goods_id'] = $goods[$GoodsModel::ID];
|
||
$goods['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $goods[$GoodsModel::ID]);
|
||
$redis_key = 'retail_goods_' . $goods[$GoodsModel::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'] = '暂无该商品';
|
||
}
|
||
}
|
||
$res['canChangeCarNum'] = $canChangeCarNum;
|
||
$res['num'] = $num;
|
||
$res['act_price'] = $promotion_price;
|
||
$res['promotion_status'] = $promotion_status;
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 套餐加入购物车
|
||
*/
|
||
public function addMealShopping()
|
||
{
|
||
$groupId = I('post.groupId');
|
||
$merchant_id = self::$merchant_id;
|
||
$store_id = self::$store_id;
|
||
$uid = self::$uid;
|
||
$time = time();
|
||
$MealPlusGoodsModel = D('RetailMealPlusGoods');
|
||
$where[$MealPlusGoodsModel::GROUP_ID] = $groupId;
|
||
$where[$MealPlusGoodsModel::STATUS] = 1;
|
||
$groupGoodsIds = $MealPlusGoodsModel->getFindField($where, $MealPlusGoodsModel::GOODS_ID, true);
|
||
$groupGoodsIds = $groupGoodsIds ? $groupGoodsIds : array(0);
|
||
$GoodsModel = D('RetailGoods');
|
||
$map['g.' . $GoodsModel::ID] = array('in', $groupGoodsIds);
|
||
$map['g.' . $GoodsModel::ONLINE_STATE] = 1;
|
||
$map['g.' . $GoodsModel::STATUS] = 0;
|
||
$map['s.goods_num'] = array('gt', 0);
|
||
$field = "g.id,g.attribute_state";
|
||
$goodsInfo = $GoodsModel->getGoodsList($map, $field);
|
||
if (count($goodsInfo) != count($groupGoodsIds)) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '该套餐已下架,请选择其他商品';
|
||
$this->ajaxReturn($res);
|
||
exit;
|
||
}
|
||
//判断条件
|
||
foreach ($goodsInfo as $key => &$val) {
|
||
if ($val[$GoodsModel::ATTRIBUTE_STATE] == 2) {
|
||
$SkuGoodsModel = D('RetailSkuGoods');
|
||
$wap['k.' . $SkuGoodsModel::GOODS_ID] = $val[$GoodsModel::ID];
|
||
$wap['k.' . $SkuGoodsModel::STATUS] = 1;
|
||
$wap['k.' . $SkuGoodsModel::STATE] = 0;
|
||
$wap['s.goods_num'] = array('gt', 0);
|
||
$field = 'k.' . $SkuGoodsModel::ID;
|
||
$order = 'k.' . $SkuGoodsModel::ID . ' asc';
|
||
$skuId = $SkuGoodsModel->getSkuGoodsFields($wap, $field, $order);
|
||
if (!$skuId) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '该套餐已下架,请选择其他商品';
|
||
$this->ajaxReturn($res);
|
||
exit;
|
||
}
|
||
$val['sku_id'] = $skuId;
|
||
}
|
||
}
|
||
$ShoppingModel = D('RetailShopping');
|
||
|
||
$tap[$ShoppingModel::UID] = $uid;
|
||
$tap[$ShoppingModel::MERCHANT_ID] = $merchant_id;
|
||
$tap[$ShoppingModel::STORE_ID] = $store_id;
|
||
$tap[$ShoppingModel::TYPE] = 1;
|
||
$tap[$ShoppingModel::STATE] = 1;
|
||
|
||
$shopGoodsIds = $ShoppingModel->getFindField($tap, $ShoppingModel::GOODS_ID, true); //当前购物车存在的商品
|
||
|
||
$content[$ShoppingModel::UID] = $uid;
|
||
$content[$ShoppingModel::NUM] = 1;
|
||
$content[$ShoppingModel::MERCHANT_ID] = $merchant_id;
|
||
$content[$ShoppingModel::STORE_ID] = $store_id;
|
||
$content[$ShoppingModel::ADD_TIME] = $time;
|
||
$content[$ShoppingModel::TYPE] = 1;
|
||
$content[$ShoppingModel::CHANGE_STATE] = 1;
|
||
foreach ($goodsInfo as $key => &$val) {
|
||
if ($shopGoodsIds) {
|
||
if (in_array($val[$GoodsModel::ID], $shopGoodsIds)) {
|
||
continue;
|
||
}
|
||
}
|
||
$content[$ShoppingModel::GOODS_ID] = $val[$GoodsModel::ID];
|
||
$content[$ShoppingModel::NUM] = 1;
|
||
if ($val[$GoodsModel::ATTRIBUTE_STATE] == 2) {
|
||
$content[$ShoppingModel::SKU_ID] = $val['sku_id'];
|
||
}
|
||
$ShoppingModel->addOrder($content);
|
||
}
|
||
$res['status'] = 1;
|
||
$res['msg'] = '添加成功';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 获取购物车列表
|
||
*/
|
||
public function getShoppingGoods_v2()
|
||
{
|
||
$uid = self::$uid;
|
||
$store_id = self::$store_id;
|
||
$XcxConfigModel = D('RetailStoreXcxConfig');
|
||
$promotion_status = $XcxConfigModel->getFindField(array($XcxConfigModel::STORE_ID => $store_id), $XcxConfigModel::PROMOTION_STATUS);
|
||
|
||
$ShoppingModel = D('RetailShopping');
|
||
$GoodsModel = D('RetailGoods');
|
||
$SkuGoodsModel = D('RetailSkuGoods');
|
||
$SkuListModel = D('RetailSkuList');
|
||
$skuFields = array(
|
||
$SkuGoodsModel::ID,
|
||
$SkuGoodsModel::RETAIL_PRICE,
|
||
$SkuGoodsModel::ONLINE_PRICE,
|
||
$SkuGoodsModel::SHOP_MEM_PRICE,
|
||
$SkuGoodsModel::SKU_ID_LIST,
|
||
$SkuGoodsModel::STATE,
|
||
$SkuGoodsModel::SKU_NUM,
|
||
$SkuGoodsModel::GOODS_IMG_ID,
|
||
$SkuGoodsModel::PLUS_PRICE,
|
||
);
|
||
$goods_list = $ShoppingModel->getShoppingGoods_v1($uid, $store_id, '', '', '1');
|
||
foreach ($goods_list as &$val) {
|
||
// 普通购买
|
||
if (!$val[$GoodsModel::ONLINE_PRICE] || floatval($val[$GoodsModel::ONLINE_PRICE]) < 0.01) {
|
||
$val[$GoodsModel::ONLINE_PRICE] = $val[$GoodsModel::RETAIL_PRICE];
|
||
}
|
||
if (!$promotion_status) {
|
||
$val['promotion_status'] = 0;
|
||
}
|
||
if ($val['promotion_status'] == 1) {
|
||
$val[$GoodsModel::VIP_ONLINE_STATE] = 0; // 促销商品 不打折
|
||
}
|
||
$val['goods_img'] = $this->getGoodsImage($val[$GoodsModel::GOODS_IMG_ID]);
|
||
|
||
if ($val[$GoodsModel::SHOP_MEM_STATUS] == 1 && (!$val[$GoodsModel::SHOP_MEM_PRICE] || $val[$GoodsModel::SHOP_MEM_PRICE] < 0.01) && !$val[$ShoppingModel::SKU_ID]) {
|
||
$val[$GoodsModel::SHOP_MEM_STATUS] = 2;
|
||
}
|
||
if ($val[$GoodsModel::PLUS_MEM_STATUS] == 1 && (!$val[$GoodsModel::PLUS_PRICE] || $val[$GoodsModel::PLUS_PRICE] < 0.01) && !$val[$ShoppingModel::SKU_ID]) {
|
||
$val[$GoodsModel::PLUS_MEM_STATUS] = 2;
|
||
}
|
||
$val['checked'] = true;
|
||
$val['error'] = 0;
|
||
if (!empty($val[$ShoppingModel::SKU_ID])) {
|
||
$val[$ShoppingModel::NUM] = round($val[$ShoppingModel::NUM], 3);
|
||
if ($val[$GoodsModel::ATTRIBUTE_STATE] == 1) {
|
||
$val[$GoodsModel::GOODS_NUM] = 0;
|
||
$val['msg'] = '商品失效';
|
||
$val['error'] = 1;
|
||
$val['checked'] = false;
|
||
} else {
|
||
$sku = $SkuGoodsModel->getFind(array($SkuGoodsModel::ID => $val[$ShoppingModel::SKU_ID]), $skuFields);
|
||
if (empty($sku) || $sku[$SkuGoodsModel::STATE] == 1) {
|
||
$val[$GoodsModel::GOODS_NUM] = 0;
|
||
$val[$ShoppingModel::NUM] = 0;
|
||
$val['msg'] = '商品失效';
|
||
$val['error'] = 1;
|
||
$val['checked'] = false;
|
||
}
|
||
$sku_num = A('Api/Inventory')->goods_num(1, self::$store_id, $val[$ShoppingModel::GOODS_ID], $val[$ShoppingModel::SKU_ID]);
|
||
$sku['goods_num'] = $sku_num;
|
||
$name = $SkuListModel->getFindField(array($SkuListModel::ID => array('in', $sku[$SkuGoodsModel::SKU_ID_LIST])), $SkuListModel::NAME, true);
|
||
$sku['name'] = implode(',', $name);
|
||
$sku['goods_img'] = $this->getGoodsImage($sku[$SkuGoodsModel::GOODS_IMG_ID]);
|
||
$val['goods_img'] = $sku['goods_img'];
|
||
$val[$GoodsModel::ONLINE_PRICE] = $sku[$SkuGoodsModel::ONLINE_PRICE];
|
||
if ($sku[$SkuGoodsModel::STATE] == 0) {
|
||
$val['goods_num'] = $sku_num;
|
||
if (!$val['promotion_status']) {
|
||
if (!$sku[$SkuGoodsModel::ONLINE_PRICE] || floatval($sku[$SkuGoodsModel::ONLINE_PRICE]) < 0.01) {
|
||
$sku[$SkuGoodsModel::ONLINE_PRICE] = $sku[$SkuGoodsModel::RETAIL_PRICE];
|
||
}
|
||
$val[$GoodsModel::ONLINE_PRICE] = $sku[$SkuGoodsModel::ONLINE_PRICE];
|
||
}
|
||
} else {
|
||
$val['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $val[$ShoppingModel::GOODS_ID]);
|
||
}
|
||
if (!empty($sku[$SkuGoodsModel::SHOP_MEM_PRICE]) && $sku[$SkuGoodsModel::SHOP_MEM_PRICE] > 0) {
|
||
$val[$GoodsModel::SHOP_MEM_PRICE] = $sku[$SkuGoodsModel::SHOP_MEM_PRICE];
|
||
}
|
||
if (!empty($sku[$SkuGoodsModel::PLUS_PRICE]) && $sku[$SkuGoodsModel::PLUS_PRICE] > 0) {
|
||
$val[$GoodsModel::PLUS_PRICE] = $sku[$SkuGoodsModel::PLUS_PRICE];
|
||
}
|
||
$val['sku'] = $sku;
|
||
}
|
||
} else {
|
||
if (($val[$GoodsModel::SHOP_MEM_STATUS] == 1 && (!$val[$GoodsModel::SHOP_MEM_PRICE] || $val[$GoodsModel::SHOP_MEM_PRICE] < 0.01)) || !$val[$GoodsModel::ONLINE_PRICE] || $val[$GoodsModel::ONLINE_PRICE] < 0.01) {
|
||
$val[$GoodsModel::GOODS_NUM] = 0;
|
||
$val[$ShoppingModel::NUM] = 0;
|
||
$val['msg'] = '商品失效';
|
||
$val['error'] = 1;
|
||
$val['checked'] = false;
|
||
} else {
|
||
$val['goods_num'] = A('Api/Inventory')->goods_num(1, $store_id, $val[$ShoppingModel::GOODS_ID]);
|
||
$val[$ShoppingModel::NUM] = round($val[$ShoppingModel::NUM], 3);
|
||
}
|
||
}
|
||
$redis_key = 'retail_goods_' . $val[$ShoppingModel::GOODS_ID] . '_*';
|
||
$wait_pay_num = $this->getWaitNum($redis_key);
|
||
$val['wait_pay_num'] = $wait_pay_num;
|
||
$val['goods_num'] = round($val['goods_num'] - $wait_pay_num, 3);
|
||
if ($val['goods_num'] < $val[$ShoppingModel::NUM]) {
|
||
$val['msg'] = '库存不足';
|
||
$val['error'] = 1;
|
||
$val['checked'] = false;
|
||
}
|
||
$val['maxBuyNum'] = $val['goods_num'];
|
||
if ($val[$GoodsModel::ATTRIBUTE_STATE] == 2 && empty($val[$ShoppingModel::SKU_ID]) || $val[$GoodsModel::ATTRIBUTE_STATE] == 1 && !empty($val[$ShoppingModel::SKU_ID])) {
|
||
$val['msg'] = '商品失效';
|
||
$val['error'] = 1;
|
||
$val['checked'] = false;
|
||
}
|
||
}
|
||
$res['status'] = 1;
|
||
$res['msg'] = '查询成功';
|
||
$res['goods_list'] = $goods_list;
|
||
$vipInfo = $this->getVipInfo();
|
||
if (empty($vipInfo)) {
|
||
$vipInfo = self::$user;
|
||
$vipInfo['discount'] = 1;
|
||
}
|
||
$res['user_info'] = $vipInfo;
|
||
$this->ajaxBack($res);
|
||
}
|
||
|
||
/**
|
||
* 获取用户购物车商品数量
|
||
*/
|
||
public function getShopCarGoodsCount()
|
||
{
|
||
$uid = self::$uid;
|
||
$store_id = self::$store_id;
|
||
$ShoppingModel = D('RetailShopping');
|
||
$GoodsModel = D('RetailGoods');
|
||
$map = array(
|
||
's.' . $ShoppingModel::UID => $uid,
|
||
's.' . $ShoppingModel::TYPE => 1,
|
||
's.' . $ShoppingModel::STORE_ID => $store_id,
|
||
's.' . $ShoppingModel::STATE => 1,
|
||
'g.' . $GoodsModel::STATUS => 0,
|
||
'g.' . $GoodsModel::ONLINE_STATE => 1,
|
||
);
|
||
$count = M('retail_shopping as s')
|
||
->join('ls_retail_goods as g on g.id=s.goods_id')
|
||
->where($map)
|
||
->count();
|
||
$res['status'] = 1;
|
||
$res['msg'] = '获取成功';
|
||
$res['count'] = intval($count);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 获取购物车列表 快递发货版
|
||
*/
|
||
public function getShoppingGoods_v3()
|
||
{
|
||
$platform_type = self::$merchant['platform_type'] ? self::$merchant['platform_type'] : 1;
|
||
$page = I('post.page') ? I('post.page') : 1;
|
||
$limit = I('post.limit') ? I('post.limit') : 10;
|
||
$uid = self::$uid;
|
||
$store_id = self::$store_id;
|
||
$XcxConfigModel = D('RetailStoreXcxConfig');
|
||
$promotion_status = $XcxConfigModel->getFindField(array($XcxConfigModel::STORE_ID => $store_id), $XcxConfigModel::PROMOTION_STATUS);
|
||
|
||
$ShoppingModel = D('RetailShopping');
|
||
$GoodsModel = D('RetailGoods');
|
||
$SkuGoodsModel = D('RetailSkuGoods');
|
||
$SkuListModel = D('RetailSkuList');
|
||
|
||
//免配送费门槛金额
|
||
$delivery_cost = self::$store['delivery_cost'];
|
||
$delivery_status = self::$store['delivery_status'];
|
||
|
||
$skuFields = array(
|
||
$SkuGoodsModel::ID,
|
||
$SkuGoodsModel::RETAIL_PRICE,
|
||
$SkuGoodsModel::ONLINE_PRICE,
|
||
$SkuGoodsModel::SHOP_MEM_PRICE,
|
||
$SkuGoodsModel::SKU_ID_LIST,
|
||
$SkuGoodsModel::STATE,
|
||
$SkuGoodsModel::SKU_NUM,
|
||
$SkuGoodsModel::GOODS_IMG_ID,
|
||
$SkuGoodsModel::PLUS_PRICE,
|
||
);
|
||
if ($platform_type == 2) {
|
||
$skuFields[] = 'third_goods_code';
|
||
}
|
||
$goods_list = $ShoppingModel->getShoppingGoods_v2($uid, $store_id, '', $page, $limit);
|
||
if ($platform_type == 2) {
|
||
//第三平台
|
||
$code_arr = [];
|
||
}
|
||
foreach ($goods_list as &$val) {
|
||
//处理配送方式
|
||
$val['delivery_set'] = $this->handleDelivery($val['delivery_type']);
|
||
// 普通购买
|
||
if (!$val[$GoodsModel::ONLINE_PRICE] || floatval($val[$GoodsModel::ONLINE_PRICE]) < 0.01) {
|
||
$val[$GoodsModel::ONLINE_PRICE] = $val[$GoodsModel::RETAIL_PRICE];
|
||
}
|
||
if (!$promotion_status) {
|
||
$val['promotion_status'] = 0;
|
||
}
|
||
if ($val['promotion_status'] == 1) {
|
||
$val[$GoodsModel::VIP_ONLINE_STATE] = 0; // 促销商品 不打折
|
||
}
|
||
$val['goods_img'] = $this->getGoodsImage($val[$GoodsModel::GOODS_IMG_ID]);
|
||
|
||
if ($val[$GoodsModel::SHOP_MEM_STATUS] == 1 && (!$val[$GoodsModel::SHOP_MEM_PRICE] || $val[$GoodsModel::SHOP_MEM_PRICE] < 0.01) && !$val[$ShoppingModel::SKU_ID]) {
|
||
$val[$GoodsModel::SHOP_MEM_STATUS] = 2;
|
||
}
|
||
if ($val[$GoodsModel::PLUS_MEM_STATUS] == 1 && (!$val[$GoodsModel::PLUS_PRICE] || $val[$GoodsModel::PLUS_PRICE] < 0.01) && !$val[$ShoppingModel::SKU_ID]) {
|
||
$val[$GoodsModel::PLUS_MEM_STATUS] = 2;
|
||
}
|
||
$val['checked'] = false;
|
||
$val['error'] = 0;
|
||
if (!empty($val[$ShoppingModel::SKU_ID])) {
|
||
$val[$ShoppingModel::NUM] = round($val[$ShoppingModel::NUM], 3);
|
||
if ($val[$GoodsModel::ATTRIBUTE_STATE] == 1) {
|
||
$val[$GoodsModel::GOODS_NUM] = 0;
|
||
$val['msg'] = '商品失效';
|
||
$val['error'] = 1;
|
||
} else {
|
||
$sku = $SkuGoodsModel->getFind(array($SkuGoodsModel::ID => $val[$ShoppingModel::SKU_ID]), $skuFields);
|
||
if (empty($sku) || $sku[$SkuGoodsModel::STATE] == 1) {
|
||
$val[$GoodsModel::GOODS_NUM] = 0;
|
||
$val[$ShoppingModel::NUM] = 0;
|
||
$val['msg'] = '商品失效';
|
||
$val['error'] = 1;
|
||
}
|
||
if ($platform_type == 2) {
|
||
//第三方平台
|
||
$sku_num = 0;
|
||
$code_arr[$val['id']] = $sku['third_goods_code'];
|
||
} else {
|
||
$sku_num = A('Api/Inventory')->goods_num(1, self::$store_id, $val[$ShoppingModel::GOODS_ID], $val[$ShoppingModel::SKU_ID]);
|
||
}
|
||
$sku['goods_num'] = $sku_num;
|
||
$name = $SkuListModel->getFindField(array($SkuListModel::ID => array('in', $sku[$SkuGoodsModel::SKU_ID_LIST])), $SkuListModel::NAME, true);
|
||
$sku['name'] = implode(',', $name);
|
||
$sku['goods_img'] = $this->getGoodsImage($sku[$SkuGoodsModel::GOODS_IMG_ID]);
|
||
$val['goods_img'] = $sku['goods_img'];
|
||
$val[$GoodsModel::ONLINE_PRICE] = $sku[$SkuGoodsModel::ONLINE_PRICE];
|
||
if ($sku[$SkuGoodsModel::STATE] == 0) {
|
||
$val['goods_num'] = $sku_num;
|
||
if (!$val['promotion_status']) {
|
||
if (!$sku[$SkuGoodsModel::ONLINE_PRICE] || floatval($sku[$SkuGoodsModel::ONLINE_PRICE]) < 0.01) {
|
||
$sku[$SkuGoodsModel::ONLINE_PRICE] = $sku[$SkuGoodsModel::RETAIL_PRICE];
|
||
}
|
||
$val[$GoodsModel::ONLINE_PRICE] = $sku[$SkuGoodsModel::ONLINE_PRICE];
|
||
}
|
||
}
|
||
if (!empty($sku[$SkuGoodsModel::SHOP_MEM_PRICE]) && $sku[$SkuGoodsModel::SHOP_MEM_PRICE] > 0) {
|
||
$val[$GoodsModel::SHOP_MEM_PRICE] = $sku[$SkuGoodsModel::SHOP_MEM_PRICE];
|
||
}
|
||
if (!empty($sku[$SkuGoodsModel::PLUS_PRICE]) && $sku[$SkuGoodsModel::PLUS_PRICE] > 0) {
|
||
$val[$GoodsModel::PLUS_PRICE] = $sku[$SkuGoodsModel::PLUS_PRICE];
|
||
}
|
||
$val['sku'] = $sku;
|
||
}
|
||
} else {
|
||
if (($val[$GoodsModel::SHOP_MEM_STATUS] == 1 && (!$val[$GoodsModel::SHOP_MEM_PRICE] || $val[$GoodsModel::SHOP_MEM_PRICE] < 0.01)) || !$val[$GoodsModel::ONLINE_PRICE] || $val[$GoodsModel::ONLINE_PRICE] < 0.01) {
|
||
$val[$GoodsModel::GOODS_NUM] = 0;
|
||
$val[$ShoppingModel::NUM] = 0;
|
||
$val['msg'] = '商品失效';
|
||
$val['error'] = 1;
|
||
} else {
|
||
if ($platform_type == 2) {
|
||
$code_arr[$val['id']] = $val['third_goods_code'];
|
||
$val['goods_num'] = 0;
|
||
$val['wait_pay_num'] = 0;
|
||
$val['maxBuyNum'] = 0;
|
||
} else {
|
||
$val['goods_num'] = A('Api/Inventory')->goods_num(1, $store_id, $val[$ShoppingModel::GOODS_ID]);
|
||
}
|
||
$val[$ShoppingModel::NUM] = round($val[$ShoppingModel::NUM], 3);
|
||
}
|
||
}
|
||
if ($platform_type == 1) {
|
||
$redis_key = 'retail_goods_' . $val[$ShoppingModel::GOODS_ID] . '_*';
|
||
$wait_pay_num = $this->getWaitNum($redis_key);
|
||
$val['wait_pay_num'] = $wait_pay_num;
|
||
$val['goods_num'] = round($val['goods_num'] - $wait_pay_num, 3);
|
||
if ($val['goods_num'] < $val[$ShoppingModel::NUM]) {
|
||
$val['msg'] = '库存不足';
|
||
$val['error'] = 1;
|
||
}
|
||
$val['maxBuyNum'] = $val['goods_num'];
|
||
}
|
||
if ($val[$GoodsModel::ATTRIBUTE_STATE] == 2 && empty($val[$ShoppingModel::SKU_ID]) || $val[$GoodsModel::ATTRIBUTE_STATE] == 1 && !empty($val[$ShoppingModel::SKU_ID])) {
|
||
$val['msg'] = '商品失效';
|
||
$val['error'] = 1;
|
||
}
|
||
}
|
||
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'];
|
||
foreach ($goods_list as &$val) {
|
||
if (!empty($goods_stock[$val['id']])) {
|
||
if (!empty($val[$ShoppingModel::SKU_ID])) {
|
||
$val['goods_num'] = $goods_stock[$val['id']];
|
||
$val['sku']['goods_num'] = $goods_stock[$val['id']];
|
||
} else {
|
||
$val['goods_num'] = $goods_stock[$val['id']];
|
||
}
|
||
if ($val['goods_num'] < $val[$ShoppingModel::NUM]) {
|
||
$val['msg'] = '库存不足';
|
||
$val['error'] = 1;
|
||
}
|
||
} else {
|
||
$val['msg'] = '库存不足';
|
||
$val['error'] = 1;
|
||
}
|
||
}
|
||
} else {
|
||
$this->ajaxReturn([
|
||
'status' => 0,
|
||
'msg' => $thirdResult['message']
|
||
]);
|
||
}
|
||
}
|
||
$res['status'] = 1;
|
||
$res['msg'] = '查询成功';
|
||
$res['data'] = $goods_list;
|
||
$res['vip'] = $this->getVipInfo();
|
||
$res['delivery_cost'] = $delivery_cost;
|
||
$res['delivery_status'] = $delivery_status;
|
||
$this->ajaxReturn($res);
|
||
}
|
||
} |