3875 行
164 KiB
PHP
可执行文件
3875 行
164 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace SmallProgramApi\Controller;
|
||
|
||
use Api\Controller\CostCalculationController;
|
||
use Common\Model\RetailGroupOrderViewModel;
|
||
use Common\Model\RetailGroupSkuViewModel;
|
||
use Common\Model\RetailGroupViewModel;
|
||
use Common\Model\RetailSkuListModel;
|
||
use LittleGift\Business\Goods;
|
||
use LittleGift\Business\Order;
|
||
|
||
//[1.8.71]
|
||
|
||
class GroupController extends BaseController
|
||
{
|
||
/**
|
||
* 判断门店id
|
||
*/
|
||
public function _initialize()
|
||
{
|
||
parent::_initialize();
|
||
if (!self::$store_id || self::$store_id == 0) {
|
||
$res = array('status' => 0, 'msg' => '缺少必要的store_id参数');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取拼团活动
|
||
* @return array $res
|
||
*/
|
||
public function getAllGroupList()
|
||
{
|
||
// 实例化模型
|
||
$StoreXcxConfig = D('RetailStoreXcxConfig');
|
||
$GroupViewModel = D('RetailGroupView');
|
||
// 查询活动
|
||
$map = array(
|
||
'RetailGroup.storeid' => self::$store_id,
|
||
'RetailGroup.merchantid' => self::$merchant_id,
|
||
'RetailGroup.acttype' => 1,
|
||
'RetailGroup.endtime' => array('gt', time()),
|
||
'RetailGoods.status' => 0,
|
||
'RetailGoods.online_state' => 1
|
||
);
|
||
$field = array('id', 'act_name', 'act_price', 'sell_number', 'online_price', 'goods_img_id', 'is_recommend', 'number');
|
||
// 查询拼团活动
|
||
$all_group_list = $GroupViewModel->getSelect($map, $field);
|
||
if (!$all_group_list) {
|
||
$res = array('status' => 0, 'msg' => '暂无拼团活动');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 处理数据
|
||
foreach ($all_group_list as &$val) {
|
||
$val['act_price'] = $val['act_price'] ? floatval($val['act_price']) : 0;
|
||
$val['act_price'] = number_format($val['act_price'], 2);
|
||
$val['online_price'] = $val['online_price'] ? floatval($val['online_price']) : 0;
|
||
$val['online_price'] = number_format($val['online_price'], 2);
|
||
// 商品图片
|
||
$val['image'] = $this->getGoodsImage($val['goods_img_id']);
|
||
}
|
||
// 首页图片
|
||
$i_map = array($StoreXcxConfig::STORE_ID => self::$store_id);
|
||
$i_field = array($StoreXcxConfig::XCX_GROUP_COVER, $StoreXcxConfig::XCX_GROUP_COVER_ID);
|
||
$image = $StoreXcxConfig->getFind($i_map, $i_field);
|
||
$IGModel = D('ImageGallery');
|
||
$show_image = $IGModel->getImagePath($image[$StoreXcxConfig::XCX_GROUP_COVER_ID]);
|
||
$res = array('status' => 1, 'all_group_list' => $all_group_list, 'show_image' => $show_image);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 获取拼团活动详情
|
||
* @param int $group_id 拼团活动id
|
||
* @return array $res
|
||
*/
|
||
public function getGroupDetails2()
|
||
{
|
||
// 实例化模型
|
||
$GroupViewModel = D('RetailGroupView');
|
||
$res = array();
|
||
// 接收数据
|
||
$group_id = I('post.group_id');
|
||
if (!$group_id) {
|
||
$res = array('status' => 0, 'msg' => '缺少必要的group_id参数');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 拼团查询条件
|
||
$map = array(
|
||
'RetailGroup.id' => $group_id,
|
||
'RetailGroup.storeid' => self::$store_id,
|
||
'RetailGroup.merchantid' => self::$merchant_id,
|
||
'RetailGroup.acttype' => 1,
|
||
'RetailGroup.endtime' => array('gt', time()),
|
||
'RetailGoods.status' => 0,
|
||
'RetailGoods.online_state' => 1
|
||
);
|
||
$field = array(
|
||
'id', 'gid', 'group_sku_id', 'act_name', 'act_num', 'number', 'item', 'act_price', 'act_type',
|
||
'sell_number', 'start_time', 'end_time', 'goods_name', 'online_price', 'details',
|
||
'company', 'attribute_state', 'goods_img_id', 'send_type', 'delivery_template_id'
|
||
);
|
||
// 查询拼团活动
|
||
$group_data = $GroupViewModel->getFind($map, $field);
|
||
if (!$group_data) {
|
||
$res = array('status' => 0, 'msg' => '该活动存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 获取redis数据库记录
|
||
$str = 'retail_group_' . $group_data['id'] . '_*';
|
||
$wait_num = $this->getWaitNum($str);
|
||
// 判断金额
|
||
if (floatval($group_data['act_price']) <= 0 || floatval($group_data['online_price']) <= 0) {
|
||
$res = array('status' => 0, 'msg' => '该活动商品存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
} else {
|
||
$group_data['act_price'] = floatval($group_data['act_price']);
|
||
$group_data['online_price'] = floatval($group_data['online_price']);
|
||
}
|
||
// 处理数据
|
||
$group_data['startTime'] = date('Y-m-d H:i:s', $group_data['start_time']);
|
||
$group_data['endTime'] = date('Y-m-d H:i:s', $group_data['end_time']);
|
||
$group_data['act_num'] = round($group_data['act_num'] - $wait_num) > 0 ? round($group_data['act_num'] - $wait_num) : 0;
|
||
$group_data['goods_num'] = A('Api/Inventory')->goods_num(2, self::$store_id, $group_data['gid']);
|
||
$group_data['province'] = floatval(round($group_data['online_price'] - $group_data['act_price'], 2));
|
||
// 商品图片
|
||
$group_data['goods_image'] = $this->getGoodsImage($group_data['goods_img_id']);
|
||
// 判断规格
|
||
if ($group_data['attribute_state'] && $group_data['attribute_state'] == 2) {
|
||
// 判断活动规格
|
||
if (!$group_data['group_sku_id']) {
|
||
$res = array('status' => 0, 'msg' => '该活动商品规格存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 拼团活动规格
|
||
$sku_result = $this->getSkuGroup($group_data['gid'], $group_data['group_sku_id'], $group_data['id']);
|
||
if ($sku_result['status'] == 0) {
|
||
$this->ajaxReturn($sku_result);
|
||
} else {
|
||
$res['skuDetailList'] = $sku_result['group_sku'];
|
||
}
|
||
// 普通规格
|
||
$goods_sku = $this->getGoodsSku($group_data['gid']);
|
||
$res['mySkuDetailList'] = $goods_sku['skuDetailList'];
|
||
$res['skuList'] = $goods_sku['skuList'];
|
||
}
|
||
// 判断商品详情
|
||
if ($group_data['details']) {
|
||
$group_data['details'] = str_replace("img src="/", "img src="" . $this->REQUEST_URL . '/', $group_data['details']);
|
||
$group_data['details'] = str_replace('img src="/', 'img src="' . $this->REQUEST_URL . '/', $group_data['details']);
|
||
$group_data['details'] = str_replace("style=''", "", $group_data['details']);
|
||
$group_data['details'] = str_replace('style=""', "", $group_data['details']);
|
||
$group_data['details'] = str_replace('src="/Uploads/', 'src="' . $this->REQUEST_URL . '/Uploads/', $group_data['details']);
|
||
}
|
||
// 商品轮播图
|
||
$retailGoodsBannerModel = D('RetailGoodsBanner');
|
||
$banner = array();
|
||
$b_map = array($retailGoodsBannerModel::GOODS_ID => $group_data['gid']);
|
||
$b_field = array($retailGoodsBannerModel::IMAGE, $retailGoodsBannerModel::IMAGE_ID);
|
||
$goods_banner = $retailGoodsBannerModel->getSelect($b_map, $b_field);
|
||
if ($goods_banner) {
|
||
// 处理图片
|
||
foreach ($goods_banner as &$val) {
|
||
$image = $this->getGoodsImage($val[$retailGoodsBannerModel::IMAGE_ID], $val[$retailGoodsBannerModel::IMAGE]);
|
||
array_push($banner, $image);
|
||
}
|
||
} else {
|
||
// 无商品轮播图
|
||
$banner = array();
|
||
array_push($banner, $group_data['goods_image']);
|
||
}
|
||
// 返回值
|
||
$res['delivery_set'] = $this->handleDelivery($group_data['send_type']);
|
||
if ($res['delivery_set'][2]['data'] == 1) {
|
||
$res['delivery_rule'] = $this->handleDeliveryRule($group_data['delivery_template_id']);
|
||
} else {
|
||
$res['delivery_rule'] = false;
|
||
}
|
||
$res['status'] = 1;
|
||
$res['details_data'] = $group_data;
|
||
$res['banner'] = $banner;
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 获取拼团活动详情
|
||
* @param int $group_id 拼团活动id
|
||
* @return array $res
|
||
*/
|
||
public function getGroupDetails()
|
||
{
|
||
// 实例化模型
|
||
$GroupViewModel = D('RetailGroupView');
|
||
$res = array();
|
||
// 接收数据
|
||
$group_id = I('post.group_id');
|
||
if (!$group_id) {
|
||
$res = array('status' => 0, 'msg' => '缺少必要的group_id参数');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 拼团查询条件
|
||
$map = array(
|
||
'RetailGroup.id' => $group_id,
|
||
'RetailGroup.storeid' => self::$store_id,
|
||
'RetailGroup.merchantid' => self::$merchant_id,
|
||
'RetailGroup.acttype' => 1,
|
||
'RetailGroup.endtime' => array('gt', time()),
|
||
'RetailGoods.status' => 0,
|
||
'RetailGoods.online_state' => 1
|
||
);
|
||
$field = array(
|
||
'id', 'gid', 'group_sku_id', 'act_name', 'act_num', 'number', 'item', 'act_price', 'act_type',
|
||
'sell_number', 'start_time', 'end_time', 'goods_name', 'online_price', 'details',
|
||
'company', 'attribute_state', 'goods_img_id', 'send_type', 'delivery_template_id'
|
||
);
|
||
// 查询拼团活动
|
||
$group_data = $GroupViewModel->getFind($map, $field);
|
||
if (!$group_data) {
|
||
$res = array('status' => 0, 'msg' => '该活动存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 获取redis数据库记录
|
||
$str = 'retail_group_' . $group_data['id'] . '_*';
|
||
$wait_num = $this->getWaitNum($str);
|
||
// 判断金额
|
||
if (floatval($group_data['act_price']) <= 0 || floatval($group_data['online_price']) <= 0) {
|
||
$res = array('status' => 0, 'msg' => '该活动商品存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
} else {
|
||
$group_data['act_price'] = floatval($group_data['act_price']);
|
||
$group_data['online_price'] = floatval($group_data['online_price']);
|
||
}
|
||
// 处理数据
|
||
$group_data['startTime'] = date('Y-m-d H:i:s', $group_data['start_time']);
|
||
$group_data['endTime'] = date('Y-m-d H:i:s', $group_data['end_time']);
|
||
$group_data['act_num'] = round($group_data['act_num'] - $wait_num) > 0 ? round($group_data['act_num'] - $wait_num) : 0;
|
||
$group_data['goods_num'] = A('Api/Inventory')->goods_num(2, self::$store_id, $group_data['gid']);
|
||
$group_data['province'] = floatval(round($group_data['online_price'] - $group_data['act_price'], 2));
|
||
// 商品图片
|
||
$group_data['goods_image'] = $this->getGoodsImage($group_data['goods_img_id']);
|
||
// 判断规格
|
||
if ($group_data['attribute_state'] && $group_data['attribute_state'] == 2) {
|
||
// 判断活动规格
|
||
if (!$group_data['group_sku_id']) {
|
||
$res = array('status' => 0, 'msg' => '该活动商品规格存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 拼团活动规格
|
||
$sku_result = $this->getSkuGroup($group_data['gid'], $group_data['group_sku_id'], $group_data['id']);
|
||
if ($sku_result['status'] == 0) {
|
||
$this->ajaxReturn($sku_result);
|
||
} else {
|
||
$res['skuDetailList'] = $sku_result['group_sku'];
|
||
}
|
||
// 普通规格
|
||
$goods_sku = $this->getGoodsSku($group_data['gid']);
|
||
$res['mySkuDetailList'] = $goods_sku['skuDetailList'];
|
||
$res['skuList'] = $goods_sku['skuList'];
|
||
}
|
||
// 判断商品详情
|
||
if ($group_data['details']) {
|
||
$group_data['details'] = str_replace("img src="/", "img src="" . $this->REQUEST_URL . '/', $group_data['details']);
|
||
$group_data['details'] = str_replace('img src="/', 'img src="' . $this->REQUEST_URL . '/', $group_data['details']);
|
||
$group_data['details'] = str_replace("style=''", "", $group_data['details']);
|
||
$group_data['details'] = str_replace('style=""', "", $group_data['details']);
|
||
$group_data['details'] = str_replace('src="/Uploads/', 'src="' . $this->REQUEST_URL . '/Uploads/', $group_data['details']);
|
||
}
|
||
// 商品轮播图
|
||
$retailGoodsBannerModel = D('RetailGoodsBanner');
|
||
$banner = array();
|
||
$b_map = array($retailGoodsBannerModel::GOODS_ID => $group_data['gid']);
|
||
$b_field = array($retailGoodsBannerModel::IMAGE, $retailGoodsBannerModel::IMAGE_ID);
|
||
$goods_banner = $retailGoodsBannerModel->getSelect($b_map, $b_field);
|
||
if ($goods_banner) {
|
||
// 处理图片
|
||
foreach ($goods_banner as &$val) {
|
||
$image = $this->getGoodsImage($val[$retailGoodsBannerModel::IMAGE_ID], $val[$retailGoodsBannerModel::IMAGE]);
|
||
array_push($banner, $image);
|
||
}
|
||
} else {
|
||
// 无商品轮播图
|
||
$banner = array();
|
||
array_push($banner, $group_data['goods_image']);
|
||
}
|
||
// 返回值
|
||
$res['delivery_set'] = $this->handleDelivery($group_data['send_type']);
|
||
if ($res['delivery_set'][2]['data'] == 1) {
|
||
$res['delivery_rule'] = $this->handleDeliveryRule($group_data['delivery_template_id']);
|
||
} else {
|
||
$res['delivery_rule'] = false;
|
||
}
|
||
$res['status'] = 1;
|
||
$res['details_data'] = $group_data;
|
||
$res['banner'] = $banner;
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 获取拼团活动详情
|
||
* @param int $group_id 拼团活动id 2020-4-20
|
||
* @return array $res
|
||
*/
|
||
public function getGroupDetails_v1()
|
||
{
|
||
// 实例化模型
|
||
$platform_type = self::$merchant['platform_type'];//商户平台类型 1默认系统 2微礼平台
|
||
$GroupViewModel = new RetailGroupViewModel();
|
||
$ImageGallery = new \Common\Model\ImageGalleryModel();
|
||
$res = array();
|
||
// 接收数据
|
||
$group_id = I('post.group_id');
|
||
if (!$group_id) {
|
||
$res = array('status' => 0, 'msg' => '缺少必要的group_id参数');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 拼团查询条件
|
||
$map = array(
|
||
'RetailGroup.id' => $group_id,
|
||
'RetailGroup.storeid' => self::$store_id,
|
||
'RetailGroup.merchantid' => self::$merchant_id,
|
||
'RetailGroup.acttype' => 1,
|
||
'RetailGroup.endtime' => array('gt', time()),
|
||
'RetailGoods.status' => 0,
|
||
'RetailGoods.online_state' => 1
|
||
);
|
||
$field = array(
|
||
'id', 'gid', 'group_sku_id', 'act_name', 'act_num', 'number', 'item', 'rise_num', 'act_price', 'act_type',
|
||
'sell_number', 'start_time', 'end_time', 'goods_name', 'online_price', 'details',
|
||
'company', 'attribute_state', 'goods_img_id', 'send_type', 'delivery_template_id', 'video_id'
|
||
);
|
||
if ($platform_type == 2) {
|
||
//第三方平台
|
||
$field[] = 'third_goods_code';
|
||
}
|
||
// 查询拼团活动
|
||
$group_data = $GroupViewModel->getFind($map, $field);
|
||
if (!$group_data) {
|
||
$res = array('status' => 0, 'msg' => '该活动存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断金额
|
||
if (floatval($group_data['act_price']) <= 0 || floatval($group_data['online_price']) <= 0) {
|
||
$res = array('status' => 0, 'msg' => '该活动商品存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
} else {
|
||
$group_data['act_price'] = floatval($group_data['act_price']);
|
||
$group_data['online_price'] = floatval($group_data['online_price']);
|
||
}
|
||
// 获取redis数据库记录
|
||
if ($platform_type == 2) {
|
||
//第三放平台
|
||
$wait_num = 0;
|
||
} else {
|
||
$str = 'retail_group_' . $group_data['id'] . '_*';
|
||
$wait_num = $this->getWaitNum($str);
|
||
}
|
||
// 处理数据
|
||
$group_data['video_url'] = $ImageGallery->getFieldPath(['id' => $group_data['video_id']]);
|
||
$group_data['startTime'] = date('Y-m-d H:i:s', $group_data['start_time']);
|
||
$group_data['endTime'] = date('Y-m-d H:i:s', $group_data['end_time']);
|
||
$group_data['act_num'] = round($group_data['act_num'] - $wait_num) > 0 ? round($group_data['act_num'] - $wait_num) : 0;
|
||
$group_data['province'] = floatval(round($group_data['online_price'] - $group_data['act_price'], 2));
|
||
$group_data['rise_num'] = $group_data['rise_num'] ? floatval($group_data['rise_num']) : 0;
|
||
// 商品图片
|
||
$group_data['goods_image'] = $this->getGoodsImage($group_data['goods_img_id']);
|
||
// 判断规格
|
||
if ($group_data['attribute_state'] && $group_data['attribute_state'] == 2) {
|
||
// 判断活动规格
|
||
if (!$group_data['group_sku_id']) {
|
||
$res = array('status' => 0, 'msg' => '该活动商品规格存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 拼团活动规格
|
||
$sku_result = $this->getSkuGroup($group_data['gid'], $group_data['group_sku_id'], $group_data['id'], $platform_type);
|
||
if ($sku_result['status'] == 0) {
|
||
$this->ajaxReturn($sku_result);
|
||
} else {
|
||
$res['skuDetailList'] = $sku_result['group_sku'];
|
||
}
|
||
// 普通规格
|
||
$goods_sku = $this->getGoodsSku($group_data['gid'], null, $platform_type);
|
||
$group_data['goods_num'] = $goods_sku['goods_num'];
|
||
$res['mySkuDetailList'] = $goods_sku['skuDetailList'];
|
||
$res['skuList'] = $goods_sku['skuList'];
|
||
} else {
|
||
if ($platform_type == 2) {
|
||
//第三方平台
|
||
$ThirdGoodsClass = new Goods();
|
||
$thirdResult = $ThirdGoodsClass->goodsNumQuery([
|
||
'merchant_id' => self::$merchant_id,
|
||
'type' => 2,
|
||
'code_arr' => [$group_data['third_goods_code']],
|
||
'Customer_Codes' => self::$store['third_code']
|
||
]);
|
||
if ($thirdResult['status'] == 1 && !empty($thirdResult['data'])) {
|
||
$goods_stock = $thirdResult['data'];
|
||
if ($goods_stock <= 0) {
|
||
$group_data['act_num'] = 0;
|
||
//取消活动
|
||
$ThirdGoodsClass->activityOff([
|
||
'id' => $group_id,
|
||
'type' => 2
|
||
]);
|
||
} else if ($goods_stock < $group_data['act_num']) {
|
||
$group_data['act_num'] = $goods_stock;
|
||
}
|
||
$group_data['goods_num'] = $goods_stock;
|
||
} else {
|
||
$group_data['act_num'] = 0;
|
||
}
|
||
} else {
|
||
$group_data['goods_num'] = A('Api/Inventory')->goods_num(1, self::$store_id, $group_data['gid']);
|
||
}
|
||
}
|
||
// 判断商品详情
|
||
if ($group_data['details']) {
|
||
$group_data['details'] = str_replace("img src="/", "img src="" . $this->REQUEST_URL . '/', $group_data['details']);
|
||
$group_data['details'] = str_replace('img src="/', 'img src="' . $this->REQUEST_URL . '/', $group_data['details']);
|
||
$group_data['details'] = str_replace("style=''", "", $group_data['details']);
|
||
$group_data['details'] = str_replace('style=""', "", $group_data['details']);
|
||
$group_data['details'] = str_replace('src="/Uploads/', 'src="' . $this->REQUEST_URL . '/Uploads/', $group_data['details']);
|
||
}
|
||
// 商品轮播图
|
||
$retailGoodsBannerModel = D('RetailGoodsBanner');
|
||
$banner = array();
|
||
$b_map = array($retailGoodsBannerModel::GOODS_ID => $group_data['gid']);
|
||
$b_field = array($retailGoodsBannerModel::IMAGE, $retailGoodsBannerModel::IMAGE_ID);
|
||
$goods_banner = $retailGoodsBannerModel->getSelect($b_map, $b_field);
|
||
if ($goods_banner) {
|
||
// 处理图片
|
||
foreach ($goods_banner as &$val) {
|
||
$image = $this->getGoodsImage($val[$retailGoodsBannerModel::IMAGE_ID], $val[$retailGoodsBannerModel::IMAGE]);
|
||
array_push($banner, $image);
|
||
}
|
||
} else {
|
||
// 无商品轮播图
|
||
$banner = array();
|
||
array_push($banner, $group_data['goods_image']);
|
||
}
|
||
// 返回值
|
||
$res['delivery_set'] = $this->handleDelivery($group_data['send_type']);
|
||
if ($res['delivery_set'][2]['data'] == 1) {
|
||
$res['delivery_rule'] = $this->handleDeliveryRule($group_data['delivery_template_id']);
|
||
} else {
|
||
$res['delivery_rule'] = false;
|
||
}
|
||
|
||
//免配送费门槛金额
|
||
$delivery_cost = self::$store['delivery_cost'];
|
||
$delivery_status = self::$store['delivery_status'];
|
||
|
||
$res['status'] = 1;
|
||
$res['banner'] = $banner;
|
||
$res['details_data'] = $group_data;
|
||
$res['delivery_cost'] = $delivery_cost;
|
||
$res['delivery_status'] = $delivery_status;
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取拼团活动规格
|
||
* @param int $goods_id 商品id
|
||
* @param string $sku_ids 规格id ,拼接
|
||
* @param int $group_id 拼团活动id
|
||
* @param int $platform_type 商户平台类型 1默认系统 2微礼平台
|
||
* @return array $res
|
||
*/
|
||
protected function getSkuGroup($goods_id, $sku_ids, $group_id, $platform_type = 1)
|
||
{
|
||
// 实例化模型
|
||
$GSVModel = D('RetailGroupSkuView');
|
||
$RSLModel = D('RetailSkuList');
|
||
// 查询条件
|
||
$map = array(
|
||
'RetailSkuGoods.goods_id' => $goods_id,
|
||
'RetailSkuGoods.store_id' => self::$store_id,
|
||
'RetailSkuGoods.status' => 1,
|
||
'RetailSkuGoods.state' => 0,
|
||
'RetailSkuGroup.id' => array('in', $sku_ids)
|
||
);
|
||
$field = array('id', 'sku_id', 'sku_id_list', 'online_price', 'goods_num', 'goods_img', 'goods_img_id', 'id', 'act_num', 'act_price');
|
||
if ($platform_type == 2) {
|
||
$field[] = 'third_goods_code';
|
||
$code_arr = [];
|
||
}
|
||
// 查询规格
|
||
$group_sku = $GSVModel->getSelect($map, $field);
|
||
if (!$group_sku) {
|
||
$res = array('status' => 0, 'msg' => '该活动商品规格存在异常,请联系商家');
|
||
return $res;
|
||
}
|
||
// 处理数据
|
||
foreach ($group_sku as &$val) {
|
||
// 获取redis数据库记录
|
||
if ($platform_type == 2) {
|
||
$code_arr[$val['id']] = $val['third_goods_code'];
|
||
$wait_num = 0;
|
||
} else {
|
||
$str = 'retail_group_' . $group_id . '_' . $val['id'] . '_*';
|
||
$wait_num = $this->getWaitNum($str);
|
||
}
|
||
$val['online_price'] = floatval($val['online_price']);
|
||
$val['online_price'] = floatval($val['online_price']);
|
||
$val['act_num'] = round($val['act_num'] - $wait_num) > 0 ? round($val['act_num'] - $wait_num) : 0;
|
||
$val['act_price'] = floatval($val['act_price']);
|
||
// 获取图片
|
||
$val['image'] = $this->getGoodsImage($val['goods_img_id'], $val['goods_img']);
|
||
// 处理规格名称
|
||
$sku_name = $RSLModel->getFindField(array($RSLModel::ID => array('in', $val['sku_id_list'])), $RSLModel::NAME, true);
|
||
$val['sku_name'] = implode(',', $sku_name);
|
||
unset($str);
|
||
unset($wait_num);
|
||
}
|
||
if ($platform_type == 2) {
|
||
//第三方平台
|
||
$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'];
|
||
$act_num = 0;
|
||
foreach ($group_sku as &$val) {
|
||
if (!empty($goods_stock[$val['id']])) {
|
||
if ($goods_stock[$val['id']] <= 0) {
|
||
$val['act_num'] = 0;
|
||
} else if ($goods_stock[$val['id']] < $val['act_num']) {
|
||
$val['act_num'] = $goods_stock[$val['id']];
|
||
}
|
||
} else {
|
||
$val['act_num'] = 0;
|
||
}
|
||
$act_num += $val['act_num'];
|
||
}
|
||
if ($act_num <= 0) {
|
||
//取消活动
|
||
$ThirdGoodsClass->activityOff([
|
||
'id' => $group_id,
|
||
'type' => 2
|
||
]);
|
||
}
|
||
} else {
|
||
foreach ($group_sku as &$val) {
|
||
$val['act_num'] = 0;
|
||
}
|
||
//取消活动
|
||
$ThirdGoodsClass->activityOff([
|
||
'id' => $group_id,
|
||
'type' => 2
|
||
]);
|
||
}
|
||
}
|
||
$res = array('status' => 1, 'group_sku' => $group_sku);
|
||
return $res;
|
||
}
|
||
|
||
/**
|
||
* 获取购买数据
|
||
* @param int $group_id 活动id
|
||
* @param int $sku_id 规格id
|
||
* @param int $buy_number 购买数量
|
||
* @return array $res
|
||
*/
|
||
public function getBuyData()
|
||
{
|
||
if (empty(self::$uid)) {
|
||
$res['status'] = -1;
|
||
$res['msg'] = '用户未登录';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 实例化模型
|
||
$RGVModel = D('RetailGroupView');
|
||
$GSVModel = D('RetailGroupSkuView');
|
||
$RSLModel = D('RetailSkuList');
|
||
// 接收数据
|
||
$group_id = I('post.group_id');
|
||
$sku_id = I('post.sku_id');
|
||
$buy_number = I('post.buy_number');
|
||
// 判断接受参数
|
||
if (!$group_id || !$buy_number) {
|
||
$res = array('status' => 0, 'msg' => '参数缺失');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 拼团查询条件
|
||
$map = array(
|
||
'RetailGroup.id' => $group_id,
|
||
'RetailGroup.storeid' => self::$store_id,
|
||
'RetailGroup.merchantid' => self::$merchant_id,
|
||
'RetailGroup.acttype' => 1,
|
||
'RetailGroup.starttime' => array('elt', time()),
|
||
'RetailGroup.endtime' => array('gt', time()),
|
||
'RetailGoods.status' => 0,
|
||
'RetailGoods.online_state' => 1
|
||
);
|
||
// 拼团查询字段
|
||
if ($sku_id && $sku_id != 0) {
|
||
$field = array('id', 'gid', 'act_name', 'send_type', 'company');
|
||
} else {
|
||
$field = array('id', 'gid', 'act_name', 'act_price', 'send_type', 'company', 'goods_img_id');
|
||
}
|
||
// 查询拼团活动
|
||
$buy_data = $RGVModel->getFind($map, $field);
|
||
if (!$buy_data) {
|
||
$res = array('status' => 0, 'msg' => '该活动存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 查询规格
|
||
if ($sku_id && $sku_id != 0) {
|
||
// 规格查询条件
|
||
$map2 = array(
|
||
'RetailSkuGoods.goods_id' => $buy_data['gid'],
|
||
'RetailSkuGoods.store_id' => self::$store_id,
|
||
'RetailSkuGoods.status' => 1,
|
||
'RetailSkuGoods.state' => 0,
|
||
'RetailSkuGroup.id' => $sku_id,
|
||
);
|
||
$field2 = array('sku_id_list', 'goods_img', 'goods_img_id', 'act_price');
|
||
$group_sku = $GSVModel->getFind($map2, $field2);
|
||
if (!$group_sku) {
|
||
$res = array('status' => 0, 'msg' => '该活动规格存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 合并数据
|
||
$buy_data['image'] = $this->getGoodsImage($group_sku['goods_img_id'], $group_sku['goods_img']);
|
||
$buy_data['act_price'] = $group_sku['act_price'];
|
||
// 规格名称
|
||
$sku_name = $RSLModel->getFindField(array($RSLModel::ID => array('in', $group_sku['sku_id_list'])), $RSLModel::NAME, true);
|
||
$buy_data['sku_name'] = implode(',', $sku_name);
|
||
} else {
|
||
$buy_data['image'] = $this->getGoodsImage($buy_data['goods_img_id']);
|
||
$buy_data['sku_name'] = '标配';
|
||
}
|
||
// 判断金额
|
||
if (!$buy_data['act_price'] || floatval($buy_data['act_price']) <= 0) {
|
||
$res = array('status' => 0, 'msg' => '该商品价格存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
} else {
|
||
$buy_data['act_price'] = floatval($buy_data['act_price']);
|
||
}
|
||
// 处理数据
|
||
$buy_data['all_money'] = floatval(round($buy_data['act_price'] * $buy_number, 2));
|
||
// 返回值
|
||
$send_type = explode(',', $buy_data['send_type']);
|
||
if (in_array('1', $send_type) && (in_array('2', $send_type || in_array('3', $send_type)))) {
|
||
//自提配送都开启
|
||
$buy_data['send_type'] = 0;
|
||
} else if (in_array('2', $send_type)) {
|
||
//配送
|
||
$buy_data['send_type'] = 2;
|
||
} else if (in_array('3', $send_type)) {
|
||
//快递发货
|
||
$buy_data['send_type'] = 2;
|
||
}
|
||
$SmallProgramModel = D('RetailSmallProgramUser');
|
||
$res['status'] = 1;
|
||
$res['buy_data'] = $buy_data;
|
||
$res['link_name'] = self::$user[$SmallProgramModel::LINK_NAME];
|
||
$res['mobile_phone'] = self::$user[$SmallProgramModel::MOBILE_PHONE];
|
||
$res['storeSet'] = $this->getStoreSet_v1(); //基本设置
|
||
$res['address'] = $this->getDefaultAddress_v1(); //默认地址
|
||
$res['vip_info'] = $this->getVipInfo();
|
||
$res['template_list'] = A('SmallProgramApi/Pay')->getTemplateInfo(); //小程序模板推送
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 拼团下单
|
||
* @param int $group_id 活动id
|
||
* @param int $sku_id 规格id
|
||
* @param int $buy_number 购买数量
|
||
* @param int $pay_type 支付类型
|
||
* @param int $parent_id 团长id
|
||
* @param int $pickup_type 配送方式 1.自提 2.配送
|
||
* @param int $address_id 地址id
|
||
* @param string $user_name 提货人
|
||
* @param int $user_phone 手机号
|
||
* @return array $res
|
||
*/
|
||
public function placeOrder()
|
||
{
|
||
$RPOModel = D('RetailPayOrder'); // 订单表视图模型(pay_order)
|
||
$time = time();
|
||
$cr = array();
|
||
// 接受数据
|
||
$group_id = I('post.group_id');
|
||
$sku_id = I('post.sku_id');
|
||
$buy_number = I('post.buy_number');
|
||
$pay_type = I('post.pay_type');
|
||
$parent_id = I('post.parent_id');
|
||
$pickup_type = I('post.pickup_type');
|
||
$address_id = I('post.address_id');
|
||
$user_name = I('post.user_name');
|
||
$user_phone = I('post.user_phone');
|
||
$remark = I('post.remark');
|
||
$delivery_fee = I('post.delivery_fee'); // 定义配送费
|
||
if (empty(self::$uid)) {
|
||
$res['status'] = -1;
|
||
$res['msg'] = '用户未登录';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断参数
|
||
if (!$group_id || !$buy_number || !$pay_type || !$pickup_type) {
|
||
$res = array('status' => 0, 'msg' => '参数缺失');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断自提配送
|
||
switch ($pickup_type) {
|
||
case 1:
|
||
// 判断自提人
|
||
if (!$user_name) {
|
||
$res = array('status' => 0, 'msg' => '请填写提货人姓名');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断手机号
|
||
if (!$user_phone) {
|
||
$res = array('status' => 0, 'msg' => '请填写手机号');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
break;
|
||
case 2:
|
||
// 判断地址id
|
||
if (!$address_id) {
|
||
$res = array('status' => 0, 'msg' => '请选择收货地址');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$RAModel = D('RetailAddress'); // 实例化用户地址模型
|
||
$result = $this->getLngLatAndFee($address_id);
|
||
if ($result['status'] == 0) {
|
||
$this->ajaxReturn($result);
|
||
}
|
||
// 判断配送费
|
||
if (floatval($delivery_fee) != floatval($result['fee'])) {
|
||
$res = array('status' => 0, 'msg' => '商家更新配送费,请重新下单');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$address = $result['address'];
|
||
$user_name = $address[$RAModel::NAME];
|
||
$user_phone = $address[$RAModel::PHONE];
|
||
$user_address = $address[$RAModel::ADDRESS];
|
||
break;
|
||
default:
|
||
$res = array('status' => 0, 'msg' => '未知的配送方式');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$RGVModel = D('RetailGroupView'); // 拼团商品视图模型
|
||
// 活动查询条件
|
||
$map = array(
|
||
'RetailGroup.id' => $group_id,
|
||
'RetailGroup.storeid' => self::$store_id,
|
||
'RetailGroup.merchantid' => self::$merchant_id,
|
||
'RetailGroup.acttype' => 1,
|
||
'RetailGroup.starttime' => array('elt', $time),
|
||
'RetailGroup.endtime' => array('gt', $time),
|
||
'RetailGoods.status' => 0,
|
||
'RetailGoods.online_state' => 1
|
||
);
|
||
// 字段查询
|
||
if ($sku_id && $sku_id != 0) {
|
||
$field = array('id', 'gid', 'number', 'day', 'hour', 'min', 'join_time', 'goods_name', 'goods_class_id', 'attribute_state', 'shop_mem_status', 'plus_mem_status', 'goods_img_id', 'integral_mem_status', 'integral', 'pricing_method',);
|
||
} else {
|
||
$field = array('id', 'gid', 'number', 'act_price', 'act_num', 'day', 'hour', 'min', 'join_time', 'online_price', 'goods_name', 'goods_class_id', 'purchase_price', 'attribute_state', 'shop_mem_status', 'shop_mem_price', 'plus_mem_status', 'plus_price', 'goods_img_id', 'integral_mem_status', 'integral', 'pricing_method',);
|
||
}
|
||
// 查询拼团活动
|
||
$group_data = $RGVModel->getFind($map, $field);
|
||
if (!$group_data) {
|
||
$res = array('status' => 0, 'msg' => '该活动存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断参与次数
|
||
if ($group_data['join_time'] && $group_data['join_time'] != 0) {
|
||
// 查询用户订单
|
||
$RGOViewModel = D('RetailGroupOrderView');
|
||
$map2 = array(
|
||
'RetailBillOrder.pay_state' => 1,
|
||
'RetailBillOrder.refund_status' => 0,
|
||
'RetailBillOrder.type' => 1,
|
||
'RetailBillOrder.uid' => self::$uid,
|
||
'RetailBillOrder.store_id' => self::$store_id,
|
||
'RetailBillOrder.merchant_id' => self::$merchant_id,
|
||
'RetailBillGroup.group_id' => $group_id,
|
||
'RetailBillGroup.state' => array('in', array(1, 2)),
|
||
);
|
||
$count = $RGOViewModel->getCount($map2);
|
||
// 判断限购
|
||
if ($count && $count >= intval($group_data['join_time'])) {
|
||
$res = array('status' => 0, 'msg' => '你已经达到限购数量,请选择其他商品');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
}
|
||
// 判断规格
|
||
if ($sku_id && $sku_id != 0) {
|
||
$GSVModel = D('RetailGroupSkuView'); // 拼团规格视图模型
|
||
// 规格查询条件
|
||
$map3 = array(
|
||
'RetailSkuGoods.goods_id' => $group_data['gid'],
|
||
'RetailSkuGoods.store_id' => self::$store_id,
|
||
'RetailSkuGoods.status' => 1,
|
||
'RetailSkuGoods.state' => 0,
|
||
'RetailSkuGroup.id' => $sku_id,
|
||
);
|
||
$field2 = array('sku_id', 'act_price', 'act_num', 'purchase_price', 'online_price', 'shop_mem_price', 'plus_price');
|
||
$group_sku = $GSVModel->getFind($map3, $field2);
|
||
if (!$group_sku) {
|
||
$res = array('status' => 0, 'msg' => '该活动规格存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$group_data['act_price'] = $group_sku['act_price'];
|
||
$group_data['purchase_price'] = $group_sku['purchase_price'];
|
||
$group_data['online_price'] = $group_sku['online_price'];
|
||
$group_data['shop_mem_price'] = $group_sku['shop_mem_price'];
|
||
$group_data['plus_price'] = $group_sku['plus_price'];
|
||
$group_data['act_num'] = $group_sku['act_num'];
|
||
// 获取商品原规格
|
||
$RSGModel = D('RetailSkuGoods');
|
||
$goods_sku = $RSGModel->getFind(array($RSGModel::ID => $group_sku['sku_id']));
|
||
}
|
||
// 判断金额
|
||
if (!$group_data['act_price'] || floatval($group_data['act_price']) <= 0) {
|
||
$res = array('status' => 0, 'msg' => '该活动商品存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 计算金额
|
||
if ($pickup_type == 2) { // 配送
|
||
$money = floatval(round($group_data['act_price'] * $buy_number, 2) + $delivery_fee);
|
||
} else { // 自提
|
||
$money = floatval(round($group_data['act_price'] * $buy_number, 2));
|
||
}
|
||
// 判断库存
|
||
if ($buy_number > floatval($group_data['act_num'])) {
|
||
$res = array('status' => 0, 'msg' => '商品库存不足');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 获取用户信息
|
||
$vip_info = $this->getVipInfo();
|
||
switch ($pay_type) {
|
||
case 1: // 会员卡支付
|
||
// 判断会员卡
|
||
if (!$vip_info['vid']) {
|
||
$res = array('status' => 0, 'msg' => '请先绑定会员');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断余额
|
||
if (!$vip_info['balance'] || floatval($vip_info['balance']) < $money) {
|
||
$res = array('status' => 0, 'msg' => '余额不足,请先充值');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
break;
|
||
case 2: // 微信支付
|
||
$RPSModel = D('RetailPaySet'); // 支付设置模型
|
||
$config_result = $RPSModel->getFindMerchantConfig(self::$merchant_id, 3);
|
||
if ($config_result['status'] != 1) {
|
||
$res = array('status' => 0, 'msg' => $config_result['msg'] ? $config_result['msg'] : '暂无可用的支付模式');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$cr['m_pay_type'] = $config_result['m_pay_type'];
|
||
break;
|
||
default:
|
||
$res = array('status' => 0, 'msg' => '支付方式错误');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$RBOModel = D('RetailBillOrder'); // 实例化模型(bill_order)
|
||
// 判断开团,参团
|
||
if ($parent_id && intval($parent_id) != 0) { // 参团
|
||
$parent_result = $this->publicJudgeGroup($parent_id);
|
||
if ($parent_result['status'] == 0) {
|
||
$this->ajaxReturn($parent_result);
|
||
}
|
||
$end_time = $parent_result['end_time'];
|
||
} else { // 开团
|
||
// 计算时间
|
||
$day = $group_data['day'] ? intval($group_data['day']) * 86400 : 0;
|
||
$hour = $group_data['hour'] ? intval($group_data['hour']) * 3600 : 0;
|
||
$min = $group_data['min'] ? intval($group_data['min']) * 60 : 0;
|
||
$end_time = $time + $day + $hour + $min;
|
||
}
|
||
// 下单信息(pay_order)
|
||
$cr[$RPOModel::ORDER_TYPE] = 1;
|
||
$cr[$RPOModel::PAY_TYPE] = $pay_type == 1 ? 6 : 4;
|
||
$cr[$RPOModel::TRADE_AMOUNT] = $money;
|
||
$cr[$RPOModel::STORE_ID] = self::$store_id;
|
||
$cr[$RPOModel::MERCHANT_ID] = self::$merchant_id;
|
||
$cr[$RPOModel::ORDER_STATE] = 'WAIT_BUYER_PAY';
|
||
$cr[$RPOModel::ADD_TIME] = $time;
|
||
$cr[$RPOModel::VID] = $vip_info['vid'] ? $vip_info['vid'] : 0;
|
||
$cr[$RPOModel::UID] = self::$uid;
|
||
// bill下单(bill_order)
|
||
$cr2 = array(
|
||
$RBOModel::ALL_MONEY => $cr[$RPOModel::TRADE_AMOUNT],
|
||
$RBOModel::PAY_STATE => 0,
|
||
$RBOModel::PAY_TYPE => $pay_type == 1 ? 5 : 6,
|
||
$RBOModel::REFUND_STATUS => 0,
|
||
$RBOModel::TYPE => 1,
|
||
$RBOModel::ORDER_TYPE => 1,
|
||
$RBOModel::ADD_TIME => $time,
|
||
$RBOModel::VID => $cr[$RPOModel::VID],
|
||
$RBOModel::STORE_ID => self::$store_id,
|
||
$RBOModel::MERCHANT_ID => self::$merchant_id,
|
||
$RBOModel::UID => self::$uid,
|
||
);
|
||
$add_result2 = $RBOModel->addBillOrder($cr2);
|
||
if (!$add_result2) {
|
||
$res = array('status' => 0, 'msg' => '下单失败');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// bill下单(bill_online)
|
||
$RBOnModel = D('RetailBillOnline'); // 实例化模型(bill_online)
|
||
$cr3 = array(
|
||
$RBOnModel::BILL_ID => $add_result2[$RBOModel::ID],
|
||
$RBOnModel::PICKUP_TYPE => $pickup_type,
|
||
$RBOnModel::USER_NAME => $user_name,
|
||
$RBOnModel::USER_PHONE => $user_phone,
|
||
$RBOnModel::USER_ADDRESS => $user_address ? $user_address : '',
|
||
$RBOnModel::DELIVERY_FEE => $delivery_fee,
|
||
$RBOnModel::ORDER_GENRE => 2,
|
||
$RBOnModel::REMARK => $remark,
|
||
);
|
||
$add_result3 = $RBOnModel->addOrder($cr3);
|
||
if (!$add_result3) {
|
||
$res = array('status' => 0, 'msg' => '下单失败');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// bill 下单(bill_discount)
|
||
if ($vip_info) { // 判断是否为会员
|
||
// 获取会员类型
|
||
$vip_type = A('PayApi/Recharge')->getVipType($vip_info['vid']);
|
||
// 获取商户会员设置
|
||
$RVCModel = D('RetailVipConfig');
|
||
$field2 = array(
|
||
$RVCModel::PERCENT_STATE, $RVCModel::PERCENT, $RVCModel::PLUS_PERCENT_STATE, $RVCModel::PLUS_PERCENT,
|
||
$RVCModel::GOODS_INTEGRAL_STATE, $RVCModel::GOODS_INTEGRAL_PLUS_STATE, $RVCModel::GOODS_INTEGRAL_MULTIPLE,
|
||
);
|
||
// 商户会员设置
|
||
$vip_config = $RVCModel->getFind(array($RVCModel::MERCHANT_ID => self::$merchant_id), $field2);
|
||
// 商户开启消费送积分
|
||
if ($vip_config && $vip_config[$RVCModel::PERCENT_STATE] == 1 && $vip_config[$RVCModel::PERCENT] > 0) {
|
||
// plus是普通比例的倍数
|
||
$rate = $vip_type == 3 && $vip_config[$RVCModel::PLUS_PERCENT_STATE] == 1 && $vip_config[$RVCModel::PLUS_PERCENT] ? $vip_config[$RVCModel::PLUS_PERCENT] : 1;
|
||
// 判断商品送积分,商品单送,与整单送
|
||
if ($group_data['integral_mem_status'] == 1 && $group_data['integral'] > 0) {
|
||
// 商品单送
|
||
$integral = intval($group_data['integral'] * $buy_number * $rate);
|
||
} else {
|
||
// 整单送
|
||
$integral = intval(($money - $delivery_fee) * $vip_config[$RVCModel::PERCENT] * $rate);
|
||
}
|
||
}
|
||
}
|
||
$RBDModel = D('RetailBillDiscount'); // 实例化模型(bill_discount)
|
||
$cr4 = array(
|
||
$RBDModel::BILL_ID => $add_result2[$RBOModel::ID],
|
||
$RBDModel::GET_INTEGRAL => $vip_info['vid'] && $integral ? $integral : 0,
|
||
);
|
||
$add_result4 = $RBDModel->addOrder($cr4);
|
||
if (!$add_result4) {
|
||
$res = array('status' => 0, 'msg' => '下单失败');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// bill 下单(bill_group)
|
||
$RBGModel = D('RetailBillGroup'); // 拼团关联订单模型
|
||
$cr5 = array(
|
||
$RBGModel::BILL_ID => $add_result2[$RBOModel::ID],
|
||
$RBGModel::GROUP_ID => $group_id,
|
||
$RBGModel::SKU_ID => $sku_id ? $sku_id : 0,
|
||
$RBGModel::STATE => 1,
|
||
$RBGModel::PARENT_ID => $parent_id && intval($parent_id) != 0 ? $parent_id : $add_result2[$RBOModel::ID],
|
||
$RBGModel::BUY_NUMBER => $buy_number,
|
||
$RBGModel::END_TIME => $end_time,
|
||
);
|
||
$add_result5 = $RBGModel->addOrder($cr5);
|
||
if (!$add_result5) {
|
||
$res = array('status' => 0, 'msg' => '下单失败');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 生成销售记录(sell)
|
||
$RSModel = D('RetailSell'); // 销售记录模型
|
||
$cr6 = array(
|
||
$RSModel::BILL_ID => $add_result2[$RBOModel::ID],
|
||
$RSModel::GOODS_ID => $group_data['gid'],
|
||
$RSModel::PAY_TYPE => $cr2[$RBOModel::PAY_TYPE],
|
||
$RSModel::PRICE => $group_data['act_price'],
|
||
$RSModel::NUM => $buy_number,
|
||
$RSModel::ALL_MONEY => $money,
|
||
$RSModel::ADD_TIME => $time,
|
||
$RSModel::TYPE => 1,
|
||
$RSModel::STORE_ID => self::$store_id,
|
||
$RSModel::MERCHANT_ID => self::$merchant_id,
|
||
$RSModel::GOODS_CLASS_ID => $group_data['goods_class_id'],
|
||
$RSModel::GOODS_NAME => $group_data['goods_name'],
|
||
$RSModel::PRICING_METHOD => $group_data['pricing_method'],
|
||
$RSModel::PURCHASE_PRICE => $group_data['purchase_price'],
|
||
$RSModel::ORIGINAL_PRICE => $group_data['online_price'],
|
||
$RSModel::GOODS_IMG_ID => $group_data['goods_img_id'],
|
||
$RSModel::ATTRIBUTE_STATE => $group_data['attribute_state'],
|
||
$RSModel::SELL_TYPE => 1,
|
||
$RSModel::GOODS_TYPE => 1,
|
||
$RSModel::VID => $cr[$RPOModel::VID],
|
||
$RSModel::VIP_PRICE => $group_data['shop_mem_status'] == 1 && $group_data['shop_mem_price'] ? $group_data['shop_mem_price'] : 0,
|
||
$RSModel::PLUS_VIP_PRICE => $group_data['plus_mem_status'] == 1 && $group_data['plus_price'] ? $group_data['plus_price'] : 0,
|
||
$RSModel::UID => self::$uid,
|
||
$RSModel::SELL_NUMBER => $goods_sku['sku_num'] ? $goods_sku['sku_num'] * $buy_number : $buy_number,
|
||
$RSModel::PAY_STATE => 0,
|
||
$RSModel::GET_INTEGRAL => $cr4[$RBDModel::GET_INTEGRAL],
|
||
);
|
||
if ($goods_sku) {
|
||
$cr6[$RSModel::SKU_JSON_INFO] = json_encode($goods_sku);
|
||
}
|
||
$add_result6 = $RSModel->addOrder($cr6);
|
||
if (!$add_result6) {
|
||
$res = array('status' => 0, 'msg' => '下单失败');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// pay_order下单
|
||
$cr[$RPOModel::BILL_ID] = $add_result2[$RBOModel::ID];
|
||
$add_result = $RPOModel->addPayOrder($cr);
|
||
if (!$add_result) {
|
||
$res = array('status' => 0, 'msg' => '下单失败');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if ($pay_type == 2) { // 微信支付
|
||
$notify_url = $this->REQUEST_URL . '/index.php/SmallProgramApi/WxPay/group_notify_url';
|
||
$notify_func = "PayApi/ActivityOrder/groupOrderContinentPay";
|
||
$wei_xin_result = A('SmallProgramApi/Pay')->getWxPayData_v1($add_result, $notify_url, $notify_func);
|
||
if ($wei_xin_result['status'] == 0) {
|
||
$this->ajaxReturn($wei_xin_result);
|
||
}
|
||
$res['pay_data'] = $wei_xin_result;
|
||
}
|
||
$res['status'] = 1;
|
||
$res['bill_id'] = $add_result2[$RBOModel::ID];
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 拼团下单
|
||
* @param int $group_id 活动id
|
||
* @param int $sku_id 规格id
|
||
* @param int $buy_number 购买数量
|
||
* @param int $pay_type 支付类型
|
||
* @param int $parent_id 团长id
|
||
* @param int $pickup_type 配送方式 1.自提 2.配送
|
||
* @param int $address_id 地址id
|
||
* @param string $user_name 提货人
|
||
* @param int $user_phone 手机号
|
||
* @return array $res
|
||
*/
|
||
public function placeOrder_v1()
|
||
{
|
||
$RPOModel = D('RetailPayOrder'); // 订单表视图模型(pay_order)
|
||
$time = time();
|
||
$cr = array();
|
||
// 接受数据
|
||
$group_id = I('post.group_id');
|
||
$sku_id = I('post.sku_id');
|
||
$buy_number = I('post.buy_number');
|
||
$pay_type = I('post.pay_type');
|
||
$parent_id = I('post.parent_id');
|
||
$pickup_type = I('post.pickup_type');
|
||
$address_id = I('post.address_id');
|
||
$user_name = I('post.user_name');
|
||
$user_phone = I('post.user_phone');
|
||
$remark = I('post.remark');
|
||
$delivery_fee = I('post.delivery_fee'); // 定义配送费
|
||
$form_id = I('post.formId');//用户点击事件id
|
||
if (empty(self::$uid)) {
|
||
$res['status'] = -1;
|
||
$res['msg'] = '用户未登录';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断参数
|
||
if (!$group_id || !$buy_number || !$pay_type || !$pickup_type) {
|
||
$res = array('status' => 0, 'msg' => '参数缺失');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$ver = $this->verifyPlaceOrder();
|
||
if (!$ver) {
|
||
$this->ajaxReturn(array('status' => 0, 'msg' => '当前时间未在商家营业时间内'));
|
||
}
|
||
// 判断自提配送
|
||
switch ($pickup_type) {
|
||
case 1:
|
||
// 判断自提人
|
||
if (!$user_name) {
|
||
$res = array('status' => 0, 'msg' => '请填写提货人姓名');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断手机号
|
||
if (!$user_phone) {
|
||
$res = array('status' => 0, 'msg' => '请填写手机号');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
break;
|
||
case 2:
|
||
// 判断地址id
|
||
if (!$address_id) {
|
||
$res = array('status' => 0, 'msg' => '请选择收货地址');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$RAModel = D('RetailAddress'); // 实例化用户地址模型
|
||
$result = $this->getLngLatAndFee($address_id);
|
||
if ($result['status'] == 0) {
|
||
$this->ajaxReturn($result);
|
||
}
|
||
// 判断配送费
|
||
if (floatval($delivery_fee) != floatval($result['fee'])) {
|
||
$res = array('status' => 0, 'msg' => '商家更新配送费,请重新下单');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$address = $result['address'];
|
||
$user_name = $address[$RAModel::NAME];
|
||
$user_phone = $address[$RAModel::PHONE];
|
||
$user_address = $address[$RAModel::ADDRESS];
|
||
break;
|
||
default:
|
||
$res = array('status' => 0, 'msg' => '未知的配送方式');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$RGVModel = D('RetailGroupView'); // 拼团商品视图模型
|
||
// 活动查询条件
|
||
$map = array(
|
||
'RetailGroup.id' => $group_id,
|
||
'RetailGroup.storeid' => self::$store_id,
|
||
'RetailGroup.merchantid' => self::$merchant_id,
|
||
'RetailGroup.acttype' => 1,
|
||
'RetailGroup.starttime' => array('elt', $time),
|
||
'RetailGroup.endtime' => array('gt', $time),
|
||
'RetailGoods.status' => 0,
|
||
'RetailGoods.online_state' => 1
|
||
);
|
||
// 字段查询
|
||
if ($sku_id && $sku_id != 0) {
|
||
$field = array(
|
||
'id', 'gid', 'number', 'day', 'hour', 'min', 'join_time', 'goods_name', 'goods_class_id', 'attribute_state',
|
||
'shop_mem_status', 'plus_mem_status', 'goods_img_id', 'integral_mem_status', 'integral', 'pricing_method',
|
||
);
|
||
} else {
|
||
$field = array(
|
||
'id', 'gid', 'number', 'act_price', 'act_num', 'day', 'hour', 'min', 'join_time', 'online_price', 'goods_name',
|
||
'goods_class_id', 'purchase_price', 'attribute_state', 'shop_mem_status', 'shop_mem_price', 'plus_mem_status',
|
||
'plus_price', 'goods_img_id', 'integral_mem_status', 'integral', 'pricing_method',
|
||
);
|
||
}
|
||
// 查询拼团活动
|
||
$group_data = $RGVModel->getFind($map, $field);
|
||
if (!$group_data) {
|
||
$res = array('status' => 0, 'msg' => '该活动存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断参与次数
|
||
if ($group_data['join_time'] && $group_data['join_time'] != 0) {
|
||
// 查询用户订单
|
||
$RGOViewModel = D('RetailGroupOrderView');
|
||
$map2 = array(
|
||
'RetailBillOrder.pay_state' => 1,
|
||
'RetailBillOrder.refund_status' => 0,
|
||
'RetailBillOrder.type' => 1,
|
||
'RetailBillOrder.uid' => self::$uid,
|
||
'RetailBillOrder.store_id' => self::$store_id,
|
||
'RetailBillOrder.merchant_id' => self::$merchant_id,
|
||
'RetailBillGroup.group_id' => $group_id,
|
||
'RetailBillGroup.state' => array('in', array(1, 2)),
|
||
);
|
||
$count = $RGOViewModel->getCount($map2);
|
||
// 判断限购
|
||
if ($count && $count >= intval($group_data['join_time'])) {
|
||
$res = array('status' => 0, 'msg' => '你已经达到限购数量,请选择其他商品');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
}
|
||
// 判断规格
|
||
$sku_id = $sku_id && $sku_id != 0 ? $sku_id : 0;
|
||
if ($sku_id != 0) {
|
||
$GSVModel = D('RetailGroupSkuView'); // 拼团规格视图模型
|
||
// 规格查询条件
|
||
$map3 = array(
|
||
'RetailSkuGoods.goods_id' => $group_data['gid'],
|
||
'RetailSkuGoods.store_id' => self::$store_id,
|
||
'RetailSkuGoods.status' => 1,
|
||
'RetailSkuGoods.state' => 0,
|
||
'RetailSkuGroup.id' => $sku_id,
|
||
);
|
||
$field2 = array(
|
||
'sku_id',
|
||
'act_price',
|
||
'act_num',
|
||
'purchase_price',
|
||
'online_price',
|
||
'shop_mem_price',
|
||
'plus_price'
|
||
);
|
||
$group_sku = $GSVModel->getFind($map3, $field2);
|
||
if (!$group_sku) {
|
||
$res = array('status' => 0, 'msg' => '该活动规格存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$group_data['act_price'] = $group_sku['act_price'];
|
||
$group_data['purchase_price'] = $group_sku['purchase_price'];
|
||
$group_data['online_price'] = $group_sku['online_price'];
|
||
$group_data['shop_mem_price'] = $group_sku['shop_mem_price'];
|
||
$group_data['plus_price'] = $group_sku['plus_price'];
|
||
$group_data['act_num'] = $group_sku['act_num'];
|
||
// 获取商品原规格
|
||
$RSGModel = D('RetailSkuGoods');
|
||
$goods_sku = $RSGModel->getFind(array($RSGModel::ID => $group_sku['sku_id']));
|
||
}
|
||
// 判断金额
|
||
if (!$group_data['act_price'] || floatval($group_data['act_price']) <= 0) {
|
||
$res = array('status' => 0, 'msg' => '该活动商品存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 计算金额
|
||
if ($pickup_type == 2) { // 配送
|
||
$money = floatval(round($group_data['act_price'] * $buy_number, 2) + $delivery_fee);
|
||
} else { // 自提
|
||
$money = floatval(round($group_data['act_price'] * $buy_number, 2));
|
||
}
|
||
$ApiRedis = new \Addons\Api\RedisController();
|
||
// 移除该用户当前购买商品的其他订单,无论是否下单成功
|
||
$str = 'retail_group_' . $group_id . '_' . $sku_id . '_' . self::$uid . '_*';
|
||
$ApiRedis::$redis->delete($ApiRedis::$redis->keys($str));
|
||
// 获取待支付库存
|
||
$str2 = 'retail_group_' . $group_id . '_' . $sku_id . '_*';
|
||
$wait_num = $this->getWaitNum($str2);
|
||
// 判断库存
|
||
if (round($group_data['act_num'] - $wait_num - $buy_number) < 0) {
|
||
$res = array('status' => 0, 'msg' => '活动库存不足');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 获取用户信息
|
||
$vip_info = $this->getVipInfo();
|
||
switch ($pay_type) {
|
||
case 1: // 会员卡支付
|
||
// 判断会员卡
|
||
if (!$vip_info['vid']) {
|
||
$res = array('status' => 0, 'msg' => '请先绑定会员');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断余额
|
||
if (!$vip_info['balance'] || floatval($vip_info['balance']) < $money) {
|
||
$res = array('status' => 0, 'msg' => '余额不足,请先充值');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
break;
|
||
case 2: // 微信支付
|
||
$RPSModel = D('RetailPaySet'); // 支付设置模型
|
||
$config_result = $RPSModel->getFindMerchantConfig(self::$merchant_id, 3);
|
||
if ($config_result['status'] != 1) {
|
||
$res = array('status' => 0, 'msg' => $config_result['msg'] ? $config_result['msg'] : '暂无可用的支付模式');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$cr['m_pay_type'] = $config_result['m_pay_type'];
|
||
break;
|
||
default:
|
||
$res = array('status' => 0, 'msg' => '支付方式错误');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$RBOModel = D('RetailBillOrder'); // 实例化模型(bill_order)
|
||
// 判断开团,参团
|
||
if ($parent_id && intval($parent_id) != 0) { // 参团
|
||
$parent_result = $this->publicJudgeGroup($parent_id);
|
||
if ($parent_result['status'] == 0) {
|
||
$this->ajaxReturn($parent_result);
|
||
}
|
||
$end_time = $parent_result['end_time'];
|
||
} else { // 开团
|
||
// 计算时间
|
||
$day = $group_data['day'] ? intval($group_data['day']) * 86400 : 0;
|
||
$hour = $group_data['hour'] ? intval($group_data['hour']) * 3600 : 0;
|
||
$min = $group_data['min'] ? intval($group_data['min']) * 60 : 0;
|
||
$end_time = $time + $day + $hour + $min;
|
||
}
|
||
// 下单信息(pay_order)
|
||
$cr[$RPOModel::ORDER_TYPE] = 1;
|
||
$cr[$RPOModel::PAY_TYPE] = $pay_type == 1 ? 6 : 4;
|
||
$cr[$RPOModel::TRADE_AMOUNT] = $money;
|
||
$cr[$RPOModel::STORE_ID] = self::$store_id;
|
||
$cr[$RPOModel::MERCHANT_ID] = self::$merchant_id;
|
||
$cr[$RPOModel::ORDER_STATE] = 'WAIT_BUYER_PAY';
|
||
$cr[$RPOModel::ADD_TIME] = $time;
|
||
$cr[$RPOModel::VID] = $vip_info['vid'] ? $vip_info['vid'] : 0;
|
||
$cr[$RPOModel::UID] = self::$uid;
|
||
// bill下单(bill_order)
|
||
$cr2 = array(
|
||
$RBOModel::ALL_MONEY => $cr[$RPOModel::TRADE_AMOUNT],
|
||
$RBOModel::PAY_STATE => 0,
|
||
$RBOModel::PAY_TYPE => $pay_type == 1 ? 5 : 6,
|
||
$RBOModel::REFUND_STATUS => 0,
|
||
$RBOModel::TYPE => 1,
|
||
$RBOModel::ORDER_TYPE => 1,
|
||
$RBOModel::ADD_TIME => $time,
|
||
$RBOModel::VID => $cr[$RPOModel::VID],
|
||
$RBOModel::STORE_ID => self::$store_id,
|
||
$RBOModel::MERCHANT_ID => self::$merchant_id,
|
||
$RBOModel::UID => self::$uid,
|
||
$RBOModel::AMOUNT_RECEIVED => $cr[$RPOModel::TRADE_AMOUNT],//实收金额
|
||
);
|
||
$add_result2 = $RBOModel->addBillOrder($cr2);
|
||
if (!$add_result2) {
|
||
$res = array('status' => 0, 'msg' => '下单失败');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// bill下单(bill_online)
|
||
$RBOnModel = D('RetailBillOnline'); // 实例化模型(bill_online)
|
||
$cr3 = array(
|
||
$RBOnModel::BILL_ID => $add_result2[$RBOModel::ID],
|
||
$RBOnModel::PICKUP_TYPE => $pickup_type,
|
||
$RBOnModel::USER_NAME => $user_name,
|
||
$RBOnModel::USER_PHONE => $user_phone,
|
||
$RBOnModel::USER_ADDRESS => $user_address ? $user_address : '',
|
||
$RBOnModel::DELIVERY_FEE => $delivery_fee,
|
||
$RBOnModel::ORDER_GENRE => 2,
|
||
$RBOnModel::REMARK => $remark,
|
||
);
|
||
|
||
if (!empty($form_id)) {
|
||
$cr3[$RBOnModel::FORM_ID] = $form_id;
|
||
}
|
||
$add_result3 = $RBOnModel->addOrder($cr3);
|
||
if (!$add_result3) {
|
||
$res = array('status' => 0, 'msg' => '下单失败');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断是否为会员
|
||
if (!empty($vip_info)) {
|
||
// 获取会员类型
|
||
$vip_type = A('PayApi/Recharge')->getVipType($vip_info['vid']);
|
||
// 获取商户会员设置
|
||
$RVCModel = D('RetailVipConfig');
|
||
$field2 = array(
|
||
$RVCModel::PERCENT_STATE, $RVCModel::PERCENT, $RVCModel::PLUS_PERCENT_STATE, $RVCModel::PLUS_PERCENT,
|
||
$RVCModel::GOODS_INTEGRAL_STATE, $RVCModel::GOODS_INTEGRAL_PLUS_STATE, $RVCModel::GOODS_INTEGRAL_MULTIPLE,
|
||
);
|
||
// 商户会员设置
|
||
$vip_config = $RVCModel->getFind(array($RVCModel::MERCHANT_ID => self::$merchant_id), $field2);
|
||
// 商户开启消费送积分
|
||
if ($vip_config && $vip_config[$RVCModel::PERCENT_STATE] == 1 && $vip_config[$RVCModel::PERCENT] > 0) {
|
||
// plus是普通比例的倍数
|
||
$rate = $vip_type == 3 && $vip_config[$RVCModel::PLUS_PERCENT_STATE] == 1 && $vip_config[$RVCModel::PLUS_PERCENT] ? $vip_config[$RVCModel::PLUS_PERCENT] : 1;
|
||
// 判断商品送积分,商品单送,与整单送
|
||
if ($group_data['integral_mem_status'] == 1 && $group_data['integral'] > 0) {
|
||
// 商品单送
|
||
$integral = intval($group_data['integral'] * $buy_number * $rate);
|
||
} else {
|
||
// 整单送
|
||
$integral = intval(($money - $delivery_fee) * $vip_config[$RVCModel::PERCENT] * $rate);
|
||
}
|
||
}
|
||
}
|
||
// bill 下单(bill_discount)
|
||
$RBDModel = D('RetailBillDiscount'); // 实例化模型(bill_discount)
|
||
$cr4 = array(
|
||
$RBDModel::BILL_ID => $add_result2[$RBOModel::ID],
|
||
$RBDModel::GET_INTEGRAL => $vip_info['vid'] && $integral ? $integral : 0,
|
||
);
|
||
$add_result4 = $RBDModel->addOrder($cr4);
|
||
if (!$add_result4) {
|
||
$res = array('status' => 0, 'msg' => '下单失败');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// bill 下单(bill_group)
|
||
$RBGModel = D('RetailBillGroup'); // 拼团关联订单模型
|
||
$cr5 = array(
|
||
$RBGModel::BILL_ID => $add_result2[$RBOModel::ID],
|
||
$RBGModel::GROUP_ID => $group_id,
|
||
$RBGModel::SKU_ID => $sku_id ? $sku_id : 0,
|
||
$RBGModel::STATE => 1,
|
||
$RBGModel::PARENT_ID => $parent_id && intval($parent_id) != 0 ? $parent_id : $add_result2[$RBOModel::ID],
|
||
$RBGModel::BUY_NUMBER => $buy_number,
|
||
$RBGModel::END_TIME => $end_time,
|
||
);
|
||
$add_result5 = $RBGModel->addOrder($cr5);
|
||
if (!$add_result5) {
|
||
$res = array('status' => 0, 'msg' => '下单失败');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 生成销售记录(sell)
|
||
$RSModel = D('RetailSell'); // 销售记录模型
|
||
$cr6 = array(
|
||
$RSModel::BILL_ID => $add_result2[$RBOModel::ID],
|
||
$RSModel::GOODS_ID => $group_data['gid'],
|
||
$RSModel::PAY_TYPE => $cr2[$RBOModel::PAY_TYPE],
|
||
$RSModel::PRICE => $group_data['act_price'],
|
||
$RSModel::NUM => $buy_number,
|
||
$RSModel::ALL_MONEY => $money,
|
||
$RSModel::ADD_TIME => $time,
|
||
$RSModel::TYPE => 1,
|
||
$RSModel::STORE_ID => self::$store_id,
|
||
$RSModel::MERCHANT_ID => self::$merchant_id,
|
||
$RSModel::GOODS_CLASS_ID => $group_data['goods_class_id'],
|
||
$RSModel::GOODS_NAME => $group_data['goods_name'],
|
||
$RSModel::PRICING_METHOD => $group_data['pricing_method'],
|
||
$RSModel::PURCHASE_PRICE => $group_data['purchase_price'],
|
||
$RSModel::ORIGINAL_PRICE => $group_data['online_price'],
|
||
$RSModel::GOODS_IMG_ID => $group_data['goods_img_id'],
|
||
$RSModel::ATTRIBUTE_STATE => $group_data['attribute_state'],
|
||
$RSModel::SELL_TYPE => 1,
|
||
$RSModel::GOODS_TYPE => 1,
|
||
$RSModel::VID => $cr[$RPOModel::VID],
|
||
$RSModel::VIP_PRICE => $group_data['shop_mem_status'] == 1 && $group_data['shop_mem_price'] ? $group_data['shop_mem_price'] : 0,
|
||
$RSModel::PLUS_VIP_PRICE => $group_data['plus_mem_status'] == 1 && $group_data['plus_price'] ? $group_data['plus_price'] : 0,
|
||
$RSModel::UID => self::$uid,
|
||
$RSModel::SELL_NUMBER => $goods_sku['sku_num'] ? $goods_sku['sku_num'] * $buy_number : $buy_number,
|
||
$RSModel::PAY_STATE => 0,
|
||
$RSModel::GET_INTEGRAL => $cr4[$RBDModel::GET_INTEGRAL],
|
||
);
|
||
if ($goods_sku) {
|
||
$cr6[$RSModel::SKU_JSON_INFO] = json_encode($goods_sku);
|
||
}
|
||
$add_result6 = $RSModel->addOrder($cr6);
|
||
if (!$add_result6) {
|
||
$res = array('status' => 0, 'msg' => '下单失败');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// pay_order下单
|
||
$cr[$RPOModel::BILL_ID] = $add_result2[$RBOModel::ID];
|
||
$add_result = $RPOModel->addPayOrder($cr);
|
||
if (!$add_result) {
|
||
$res = array('status' => 0, 'msg' => '下单失败');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 微信支付,回调地址
|
||
if ($pay_type == 2) {
|
||
$notify_url = $this->REQUEST_URL . '/index.php/SmallProgramApi/WxPay/group_notify_url';
|
||
$notify_func = "PayApi/ActivityOrder/groupOrderContinentPay";
|
||
$wei_xin_result = A('SmallProgramApi/Pay')->getWxPayData_v1($add_result, $notify_url, $notify_func);
|
||
if ($wei_xin_result['status'] == 0) {
|
||
$this->ajaxReturn($wei_xin_result);
|
||
}
|
||
$res['pay_data'] = $wei_xin_result;
|
||
}
|
||
// 下单成功,添加redis数据库记录
|
||
$key = 'retail_group_' . $group_id . '_' . $sku_id . '_' . self::$uid . '_' . $add_result2[$RBOModel::ID];
|
||
$val_arr = array(
|
||
'bill_id' => $add_result2[$RBOModel::ID],
|
||
'num' => $buy_number,
|
||
'expiration_time' => time() + 602,
|
||
'key' => $key
|
||
);
|
||
// 添加 设置数据类型
|
||
$set_result = $ApiRedis::$redis->setex($key, 602, json_encode($val_arr));
|
||
if (!$set_result) {
|
||
$res = array('status' => 0, 'msg' => '下单失败');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 再次判断库存,获取待支付库存
|
||
$wait_num2 = $this->getWaitNum($str2);
|
||
// 判断规格,获取现有现有库存
|
||
if ($sku_id && $sku_id != 0) {
|
||
// 规格
|
||
$RSGModel = D('RetailSkuGroup');
|
||
$act_num = $RSGModel->getFindField(array($RSGModel::ID => $sku_id), $RSGModel::ACT_NUM);
|
||
} else {
|
||
// 非规格
|
||
$RGModel = D('RetailGroup');
|
||
$act_num = $RGModel->getFindField(array($RGModel::ID => $group_id), $RGModel::ACT_NUM);
|
||
}
|
||
// 再次对比
|
||
if (floatval($wait_num2) > floatval($act_num)) {
|
||
// 移除当前订单
|
||
$ApiRedis::$redis->delete($key);
|
||
$res = array('status' => 0, 'msg' => '库存不足,下单失败');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 下单成功
|
||
$res['status'] = 1;
|
||
$res['bill_id'] = $add_result2[$RBOModel::ID];
|
||
$res['order_no'] = $add_result2[$RBOModel::ORDER_NO];
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 会员卡支付
|
||
* @param int $order_id 订单id
|
||
* @param string $password 会员密码
|
||
* @return array $res
|
||
*/
|
||
public function vipPay()
|
||
{
|
||
// 判断订单id
|
||
$bill_id = I('post.bill_id');
|
||
$password = I('post.password');
|
||
if (!$bill_id || !$password) {
|
||
$res = array('status' => 0, 'msg' => '参数缺失');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 查询订单
|
||
$BillModel = D('RetailBillOrder');
|
||
$map = array(
|
||
'b.' . $BillModel::ID => $bill_id,
|
||
'b.' . $BillModel::STORE_ID => self::$store_id,
|
||
'b.' . $BillModel::MERCHANT_ID => self::$merchant_id,
|
||
'b.' . $BillModel::PAY_STATE => 0,
|
||
'b.' . $BillModel::TYPE => 1,
|
||
'b.' . $BillModel::PAY_TYPE => 5,
|
||
'o.order_genre' => 2
|
||
);
|
||
$bill_order = $BillModel->getFindGroup($map);
|
||
if (!$bill_order) {
|
||
$res = array('status' => 0, 'msg' => '支付出现异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 余额支付
|
||
$pay_result = A('PayApi/VipPay')->pay($bill_order[$BillModel::ID], 4, 2, $password);
|
||
if ($pay_result['status'] == 0) {
|
||
$this->ajaxReturn($pay_result);
|
||
}
|
||
// 修改bill
|
||
$update_order = A('PayApi/ActivityOrder')->paySuccess($bill_order[$BillModel::ID]);
|
||
if ($update_order['status'] == 0) {
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断拼团状态
|
||
$result = A('PayApi/Group')->updateGroupState($bill_order['group_id'], $bill_order['parent_id'], self::$store_id);
|
||
if ($result['status'] == 0) {
|
||
$res = $result;
|
||
} else {
|
||
$res = array('status' => 1, 'msg' => '支付成功');
|
||
}
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 会员卡支付
|
||
* @param int $order_id 订单id
|
||
* @param string $password 会员密码
|
||
* @return array $res
|
||
*/
|
||
public function vipPay_v1()
|
||
{
|
||
// 判断订单id
|
||
$bill_id = I('post.bill_id');
|
||
$password = I('post.password');
|
||
if (!$bill_id || !$password) {
|
||
$res = array('status' => 0, 'msg' => '参数缺失');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 查询订单
|
||
$BillModel = D('RetailBillOrder');
|
||
$map = array(
|
||
'b.' . $BillModel::ID => $bill_id,
|
||
'b.' . $BillModel::STORE_ID => self::$store_id,
|
||
'b.' . $BillModel::MERCHANT_ID => self::$merchant_id,
|
||
'b.' . $BillModel::PAY_STATE => 0,
|
||
'b.' . $BillModel::TYPE => 1,
|
||
'b.' . $BillModel::PAY_TYPE => 5,
|
||
'o.order_genre' => 2
|
||
);
|
||
$bill_order = $BillModel->getFindGroup($map);
|
||
if (!$bill_order) {
|
||
$res = array('status' => 0, 'msg' => '订单异常,请重新下单');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 查询redis数据库订单是否过期
|
||
$sku_id = $bill_order['sku_id'] && $bill_order['sku_id'] != 0 ? $bill_order['sku_id'] : 0;
|
||
$ApiRedis = new \Addons\Api\RedisController();
|
||
$key = 'retail_group_' . $bill_order['group_id'] . '_' . $sku_id . '_' . self::$uid . '_' . $bill_id;
|
||
// 判断可以是否过期
|
||
$redis_key = $ApiRedis::$redis->exists($key);
|
||
if (!$redis_key) {
|
||
// 订单超时
|
||
$res = array('status' => 0, 'msg' => '支付超时,请重新下单');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 余额支付
|
||
$pay_result = A('PayApi/VipPay')->pay($bill_order[$BillModel::ID], 4, 2, $password);
|
||
if ($pay_result['status'] == 0) {
|
||
$this->ajaxReturn($pay_result);
|
||
}
|
||
// 修改bill
|
||
$update_order = A('PayApi/ActivityOrder')->paySuccess($bill_order[$BillModel::ID]);
|
||
if ($update_order['status'] == 0) {
|
||
$this->ajaxReturn($update_order);
|
||
}
|
||
// 判断拼团状态
|
||
$result = A('PayApi/Group')->updateGroupState($bill_order['group_id'], $bill_order['parent_id'], self::$store_id);
|
||
if ($result['status'] == 0) {
|
||
$res = $result;
|
||
} else {
|
||
$res = array('status' => 1, 'msg' => '支付成功');
|
||
}
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 查询,修改拼团状态
|
||
* $param int $group_id 活动id
|
||
* @param int $parent_id
|
||
* @return array $res
|
||
*/
|
||
public function updateGroupState($group_id, $parent_id)
|
||
{
|
||
// 查询活动(拼团人数)
|
||
$RGModel = D('RetailGroup');
|
||
$number = $RGModel->getFindField(array($RGModel::ID => $group_id), $RGModel::NUMBER);
|
||
if (!$number) {
|
||
$res = array('status' => 0, 'msg' => '拼团出现异常,请联系商家');
|
||
return $res;
|
||
}
|
||
// 查询订单
|
||
$RGOViewModel = D('RetailGroupOrderView');
|
||
$map = array(
|
||
'RetailBillOrder.pay_state' => 1,
|
||
'RetailBillGroup.parent_id' => $parent_id,
|
||
'RetailBillGroup.state' => 1
|
||
);
|
||
$ids = $RGOViewModel->getSelect($map, array('id'));
|
||
if (!$ids) {
|
||
$res = array('status' => 0, 'msg' => '拼团查询出现异常,请联系商家');
|
||
return $res;
|
||
}
|
||
$ids = array_column($ids, 'id');
|
||
// 处理数据
|
||
$RBGModel = D('RetailBillGroup');
|
||
if (intval(count($ids)) == intval($number)) { // 拼团成功
|
||
$save_result = $RBGModel->updateOrder(array($RBGModel::BILL_ID => array('in', $ids), $RBGModel::STATE => 1), array($RBGModel::STATE => 2));
|
||
if ($save_result) {
|
||
$res = array('status' => 1, 'msg' => '拼团成功');
|
||
} else {
|
||
$res = array('status' => 0, 'msg' => '拼团出现异常,请联系商家');
|
||
}
|
||
} else if (intval(count($ids)) > intval($number)) { // 拼团人数超出
|
||
$RBGModel->updateOrder(array($RBGModel::BILL_ID => array('in', $ids), $RBGModel::STATE => 1), array($RBGModel::STATE => 3));
|
||
$res = array('status' => 0, 'msg' => '拼团出现异常,请联系商家');
|
||
} else {
|
||
$res = array('status' => 2, 'msg' => '拼团中');
|
||
}
|
||
return $res;
|
||
}
|
||
|
||
/**
|
||
* 微信支付查询订单是否成功
|
||
* @param int $bill_id
|
||
* @return array $res
|
||
*/
|
||
public function queryOrder()
|
||
{
|
||
// 判断订单id
|
||
$bill_id = I('post.bill_id');
|
||
if (!$bill_id) {
|
||
$res = array('status' => 0, 'msg' => '参数缺失');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 查询订单
|
||
$BillModel = D('RetailBillOrder');
|
||
$map = array(
|
||
$BillModel::ID => $bill_id,
|
||
$BillModel::STORE_ID => self::$store_id,
|
||
$BillModel::MERCHANT_ID => self::$merchant_id,
|
||
$BillModel::PAY_STATE => 1,
|
||
$BillModel::TYPE => 1,
|
||
);
|
||
$bill_order = $BillModel->getFind($map);
|
||
if ($bill_order) {
|
||
$res = array('status' => 1, 'msg' => '支付成功');
|
||
} else {
|
||
$res = array('status' => 0, 'msg' => '正在支付');
|
||
}
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 获取拼团页面展示数据
|
||
* @param int $bill_id 订单id
|
||
* @param array $res
|
||
*/
|
||
public function getShowGroup()
|
||
{
|
||
// 判断订单id
|
||
$bill_id = I('post.bill_id');
|
||
if (!$bill_id) {
|
||
$res = array('status' => 0, 'msg' => '参数缺失');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 查询订单
|
||
$BillModel = D('RetailBillOrder');
|
||
$map = array(
|
||
'b.' . $BillModel::ID => $bill_id,
|
||
'b.' . $BillModel::STORE_ID => self::$store_id,
|
||
'b.' . $BillModel::MERCHANT_ID => self::$merchant_id,
|
||
'b.' . $BillModel::PAY_STATE => 1,
|
||
'b.' . $BillModel::TYPE => 1,
|
||
'o.order_genre' => 2,
|
||
'g.state' => array('in', array(1, 2, 3))
|
||
);
|
||
$bill_order = $BillModel->getFindGroup($map);
|
||
if (!$bill_order) {
|
||
$res = array('status' => 0, 'msg' => '订单出现异常,请联系商家退款');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if ($bill_order['state'] == 3) {
|
||
$res = array('status' => 0, 'msg' => '拼团失败');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 处理数据
|
||
$bill_order['end_date'] = $bill_order['end_time'] * 1000;
|
||
// 拼团查询条件
|
||
$RGVModel = D('RetailGroupView');
|
||
$map2 = array(
|
||
'RetailGroup.id' => $bill_order['group_id'],
|
||
'RetailGroup.storeid' => self::$store_id,
|
||
'RetailGroup.merchantid' => self::$merchant_id,
|
||
// 'RetailGroup.acttype' => 1,
|
||
'RetailGroup.starttime' => array('elt', time()),
|
||
// 'RetailGroup.endtime' => array('gt', time()),
|
||
// 'RetailGoods.status' => 0,
|
||
// 'RetailGoods.online_state' => 1
|
||
);
|
||
// 拼团查询字段
|
||
if ($bill_order['sku_id'] && $bill_order['sku_id'] != 0) {
|
||
$field = array('id', 'gid', 'act_name', 'number', 'goods_name',
|
||
'act_type', 'end_time', 'online_state', 'status');
|
||
} else {
|
||
$field = array('id', 'gid', 'act_name', 'act_price', 'number', 'goods_name',
|
||
'online_price', 'goods_img_id', 'act_type', 'end_time', 'online_state', 'status');
|
||
}
|
||
// 查询拼团活动
|
||
$group_data = $RGVModel->getFind($map2, $field);
|
||
if (!$group_data) {
|
||
$res = array('status' => 0, 'msg' => '该活动存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if ($bill_order['uid'] != self::$uid && $group_data['act_type'] != 1) {
|
||
$res = array('status' => 0, 'msg' => '该活动已关闭');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if ($bill_order['uid'] != self::$uid && $group_data['end_time'] < time()) {
|
||
$res = array('status' => 0, 'msg' => '该活动已关闭');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if ($bill_order['uid'] != self::$uid && ($group_data['online_state'] != 1 || $group_data['status'] != 0)) {
|
||
$res = array('status' => 0, 'msg' => '该活动已关闭');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 查询规格
|
||
if ($bill_order['sku_id'] && $bill_order['sku_id'] != 0) {
|
||
// 规格查询条件
|
||
$GSVModel = D('RetailGroupSkuView');
|
||
$map3 = array(
|
||
'RetailSkuGoods.goods_id' => $group_data['gid'],
|
||
'RetailSkuGoods.store_id' => self::$store_id,
|
||
'RetailSkuGoods.status' => 1,
|
||
'RetailSkuGoods.state' => 0,
|
||
'RetailSkuGroup.id' => $bill_order['sku_id'],
|
||
);
|
||
$field2 = array('sku_id_list', 'goods_img', 'goods_img_id', 'act_price', 'online_price');
|
||
$group_sku = $GSVModel->getFind($map3, $field2);
|
||
if (!$group_sku) {
|
||
$res = array('status' => 0, 'msg' => '该活动规格存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 合并数据
|
||
$group_data['image'] = $this->getGoodsImage($group_sku['goods_img_id'], $group_sku['goods_img']);
|
||
$group_data['act_price'] = $group_sku['act_price'];
|
||
$group_data['online_price'] = $group_sku['online_price'];
|
||
// 规格名称
|
||
$RSLModel = D('RetailSkuList'); // 规格模型
|
||
$sku_name = $RSLModel->getFindField(array($RSLModel::ID => array('in', $group_sku['sku_id_list'])), $RSLModel::NAME, true);
|
||
$group_data['sku_name'] = implode(',', $sku_name);
|
||
} else {
|
||
$group_data['image'] = $this->getGoodsImage($group_data['goods_img_id']);
|
||
$group_data['sku_name'] = '标配';
|
||
}
|
||
$group_data['province'] = round($group_data['online_price'] - $group_data['act_price'], 2);
|
||
// 成员查询
|
||
$map4 = array(
|
||
'b.' . $BillModel::STORE_ID => self::$store_id,
|
||
'b.' . $BillModel::MERCHANT_ID => self::$merchant_id,
|
||
'b.' . $BillModel::ORDER_TYPE => 1,
|
||
'b.' . $BillModel::PAY_STATE => 1,
|
||
'b.' . $BillModel::TYPE => 1,
|
||
'o.order_genre' => 2,
|
||
'g.parent_id' => $bill_order['parent_id'],
|
||
);
|
||
$field3 = array('b.id', 'b.uid', 'g.parent_id');
|
||
$group_user = $BillModel->getSelectGroup($map4, $field3);
|
||
if (!$group_user) {
|
||
$res = array('status' => 0, 'msg' => '拼团出现异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 处理数据
|
||
$RSPUserModel = D('RetailSmallProgramUser'); // 小程序用户模型
|
||
foreach ($group_user as &$val) {
|
||
$val['avatar'] = $RSPUserModel->getFindField(array($RSPUserModel::ID => $val['uid']), $RSPUserModel::AVATAR);
|
||
}
|
||
if ($bill_order['state'] == 2 && intval(count($group_user)) < intval($group_data['number'])) { // 拼团成功 ,人数未满
|
||
for ($i = 0; $i < (intval($group_data['number']) - intval(count($group_user))); $i++) {
|
||
array_push($group_user, array('avatar' => $this->REQUEST_URL . '/Public/images/xcx_default_avatar.png'));
|
||
}
|
||
}
|
||
$res = array(
|
||
'status' => 1,
|
||
'bill_order' => $bill_order,
|
||
'group_data' => $group_data,
|
||
'group_user' => $group_user,
|
||
'join_number' => count($group_user),
|
||
'number_s' => $group_data['number'] - count($group_user)
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 获取用户拼团订单
|
||
* @param int $type 类型 1.所有 2.拼团中 3.拼团成功 3.拼团失败
|
||
* @return array $res
|
||
*/
|
||
public function getUserGroupOrder()
|
||
{
|
||
// 接收数据
|
||
$type = I('post.type') ? I('post.type') : 1;
|
||
// 修改订单状态
|
||
A('PayApi/Group')->updateOrderState(self::$store_id, self::$merchant_id);
|
||
// 查询订单
|
||
$RGOViewModel = D('RetailGroupOrderView');
|
||
$map = array(
|
||
'RetailBillOrder.uid' => self::$uid,
|
||
'RetailBillOrder.store_id' => self::$store_id,
|
||
'RetailBillOrder.pay_state' => 1,
|
||
'RetailBillOrder.type' => 1,
|
||
'RetailBillOnline.order_genre' => 2
|
||
);
|
||
// 判断类型
|
||
switch ($type) {
|
||
case 1:
|
||
$map['RetailBillGroup.state'] = array('in', array(1, 2, 3));
|
||
break;
|
||
case 2:
|
||
$map['RetailBillGroup.state'] = 1;
|
||
break;
|
||
case 3:
|
||
$map['RetailBillGroup.state'] = 2;
|
||
break;
|
||
case 4:
|
||
$map['RetailBillGroup.state'] = 3;
|
||
break;
|
||
default:
|
||
$map['RetailBillGroup.state'] = array('in', array(1, 2, 3));
|
||
}
|
||
$field = array(
|
||
'id',
|
||
'all_money',
|
||
'order_no',
|
||
'add_time',
|
||
'delivery_fee',
|
||
'status',
|
||
'eval_status',
|
||
'remind_state',
|
||
'refund_status',
|
||
'pickup_type',
|
||
'pick_code',
|
||
'delivery_type',
|
||
'delivery_record_id',
|
||
'delivery_fee',
|
||
'group_id',
|
||
'sku_id',
|
||
'parent_id',
|
||
'state',
|
||
'end_time',
|
||
'buy_number',
|
||
'remark',
|
||
);
|
||
$user_group = $RGOViewModel->getSelect($map, $field);
|
||
if (!$user_group) {
|
||
$res = array('status' => 0, 'msg' => '暂无拼团订单');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 处理数据
|
||
$RSLModel = D('RetailSkuList');
|
||
$RGVModel = D('RetailGroupView');
|
||
$GSVModel = D('RetailGroupSkuView');
|
||
$RDCModel = D('RetailDaClerk');
|
||
$RUOModel = D('RetailUuOrder');
|
||
foreach ($user_group as &$val) {
|
||
$val['add_time'] = date('Y-m-d H:i:s', $val['add_time']);
|
||
$val['endDate'] = date('Y-m-d H:i:s', $val['end_time']);
|
||
if ($val['state'] == 1) {
|
||
// 拼团中
|
||
$val['status_g'] = '拼团中';
|
||
$val['key_id'] = 1;
|
||
} else if ($val['state'] == 2 && $val['status'] == 1 && $val['remind_state'] != 1 && $val['pickup_type'] == 2) {
|
||
// 拼团成功,未发货,未提醒发货
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 2;
|
||
} else if ($val['state'] == 2 && $val['status'] == 1 && $val['remind_state'] == 1 && $val['pickup_type'] == 2) {
|
||
// 拼团成功,未发货,已提醒发货
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 3;
|
||
} else if ($val['state'] == 2 && $val['status'] == 2 && $val['pickup_type'] == 2) {
|
||
// 拼团成功,已发货
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 4;
|
||
} else if ($val['state'] == 2 && $val['status'] == 3 && $val['eval_status'] != 1 && $val['pickup_type'] == 2) {
|
||
// 拼团成功,已收货,未评价
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 5;
|
||
} else if ($val['state'] == 2 && $val['status'] == 3 && $val['eval_status'] == 1 && $val['pickup_type'] == 2) {
|
||
// 拼团成功,已收货,已评价
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 6;
|
||
} else if ($val['state'] == 2 && $val['pickup_type'] == 1 && $val['status'] == 1) {
|
||
// 拼团成功,待自提
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 7;
|
||
} else if ($val['state'] == 2 && $val['pickup_type'] == 1 && $val['status'] == 3 && $val['eval_status'] != 1) {
|
||
// 拼团成功,已自提,未评价
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 8;
|
||
} else if ($val['state'] == 2 && $val['pickup_type'] == 1 && $val['status'] == 3 && $val['eval_status'] == 1) {
|
||
// 拼团成功,已自提,已评价
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 9;
|
||
} else if ($val['state'] == 3 && $val['refund_status'] == 1) {
|
||
// 拼团失败,待退款
|
||
$val['status_g'] = '拼团失败';
|
||
$val['key_id'] = 10;
|
||
} else if ($val['state'] == 3 && $val['refund_status'] == 2) {
|
||
// 拼团失败,已退款
|
||
$val['status_g'] = '拼团失败';
|
||
$val['key_id'] = 11;
|
||
}
|
||
// 获取活动
|
||
$map2 = array(
|
||
'RetailGroup.id' => $val['group_id'],
|
||
'RetailGroup.storeid' => self::$store_id,
|
||
'RetailGroup.merchantid' => self::$merchant_id,
|
||
);
|
||
// 拼团查询字段
|
||
if ($val['sku_id'] && $val['sku_id'] != 0) {
|
||
$field2 = array('id', 'gid', 'act_name',);
|
||
} else {
|
||
$field2 = array('id', 'gid', 'act_name', 'act_price', 'goods_name', 'goods_img_id');
|
||
}
|
||
// 查询拼团活动
|
||
$group_data = $RGVModel->getFind($map2, $field2);
|
||
if (!$group_data) {
|
||
$res = array('status' => 0, 'msg' => '活动出现异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 处理数据
|
||
$val['act_name'] = $group_data['act_name'];
|
||
$val['goods_name'] = $group_data['goods_name'];
|
||
// 查询规格
|
||
if ($val['sku_id'] && $val['sku_id'] != 0) {
|
||
// 规格查询条件
|
||
$map3 = array(
|
||
'RetailSkuGoods.goods_id' => $group_data['gid'],
|
||
'RetailSkuGoods.store_id' => self::$store_id,
|
||
'RetailSkuGoods.status' => 1,
|
||
'RetailSkuGoods.state' => 0,
|
||
'RetailSkuGroup.id' => $val['sku_id'],
|
||
);
|
||
$field3 = array('sku_id_list', 'goods_img', 'goods_img_id', 'act_price');
|
||
$group_sku = $GSVModel->getFind($map3, $field3);
|
||
if (!$group_sku) {
|
||
$res = array('status' => 0, 'msg' => '订单出现异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 处理数据
|
||
$val['image'] = $this->getGoodsImage($group_sku['goods_img_id'], $group_sku['goods_img']);
|
||
$val['act_price'] = $group_sku['act_price'];
|
||
// 规格名称
|
||
$sku_name = $RSLModel->getFindField(array($RSLModel::ID => array('in', $group_sku['sku_id_list'])), $RSLModel::NAME, true);
|
||
$val['sku_name'] = implode(',', $sku_name);
|
||
} else {
|
||
$val['image'] = $this->getGoodsImage($group_data['goods_img_id']);
|
||
$val['act_price'] = $group_data['act_price'];
|
||
$val['sku_name'] = '标配';
|
||
}
|
||
// 配送方式
|
||
if ($val['pickup_type'] == 2) {
|
||
// 判断达达、uu配送
|
||
if ($val['delivery_type'] == 2) { // 达达配送
|
||
$val['order_status'] = $RDCModel->getFindField(array($RDCModel::ID => $val['delivery_record_id']), $RDCModel::ORDER_STATUS);
|
||
}
|
||
if ($val['delivery_type'] == 3) { // uu配送
|
||
$state = $RUOModel->getFindField(array($RUOModel::ID => $val['delivery_record_id']), $RUOModel::STATE);
|
||
if ($state == 1) {
|
||
$val['order_status'] = 1;
|
||
} else if ($state == 3 || $state == 4) {
|
||
$val['order_status'] = 2;
|
||
} else if ($state == 5 || $state == 6) {
|
||
$val['order_status'] = 3;
|
||
}
|
||
$val['delivery_type'] = 2;
|
||
}
|
||
}
|
||
}
|
||
$res = array('status' => 1, 'user_group' => $user_group);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 获取正在拼团的订单
|
||
* @param int $group_id
|
||
* @return array $res
|
||
*/
|
||
public function getAllGroupOrder()
|
||
{
|
||
// 接收数据
|
||
$group_id = I('post.group_id');
|
||
if (!$group_id) {
|
||
$res = array('status' => 0, 'msg' => '参数缺失');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 修改订单状态
|
||
A('PayApi/Group')->updateOrderState(self::$store_id, self::$merchant_id);
|
||
// 查询活动参团人数
|
||
$RGModel = D('RetailGroup');
|
||
$group_number = $RGModel->getFindField(array($RGModel::ID => $group_id), $RGModel::NUMBER);
|
||
if (!$group_number) {
|
||
$res = array('status' => 0, 'msg' => '活动存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 查询正在拼团订单
|
||
$RBOModel = D('RetailBillOrder');
|
||
$map = array(
|
||
'b.' . $RBOModel::STORE_ID => self::$store_id,
|
||
'b.' . $RBOModel::MERCHANT_ID => self::$merchant_id,
|
||
'b.' . $RBOModel::PAY_STATE => 1,
|
||
'b.' . $RBOModel::TYPE => 1,
|
||
'b.' . $RBOModel::UID => array('neq', self::$uid),
|
||
'o.order_genre' => 2,
|
||
'g.group_id' => $group_id,
|
||
'g.state' => 1
|
||
);
|
||
$field = array('b.id', 'g.parent_id', 'x.nickname', 'x.avatar');
|
||
$group_order = $RBOModel->getUserSelectGroup($map, $field, $RBOModel::ID . ' asc', 'g.parent_id');
|
||
if (!$group_order) {
|
||
$res = array('status' => 0, 'msg' => '暂无正在拼团订单');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 处理数据
|
||
foreach ($group_order as &$val) {
|
||
$map1 = $map;
|
||
$map1['g.parent_id'] = $val['parent_id'];
|
||
$val['count'] = $RBOModel->countGroupUser($map1);
|
||
$val['lack_number'] = $group_number - $val['count'];
|
||
unset($map1);
|
||
}
|
||
$res = array('status' => 1, 'group_order' => $group_order, 'count' => count($group_order));
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 确认参团,判断拼团状态
|
||
* @param int $parent_id
|
||
* @return array $res
|
||
*/
|
||
public function judgeGroup()
|
||
{
|
||
// 接受参数
|
||
$parent_id = I('post.parent_id');
|
||
if (!$parent_id) {
|
||
$res = array('status' => 0, 'msg' => '参数缺失');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$res = $this->publicJudgeGroup($parent_id);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 判断团长,用户
|
||
* @param int $parent_id
|
||
* @return array $res
|
||
*/
|
||
protected function publicJudgeGroup($parent_id)
|
||
{
|
||
// 查询团长订单
|
||
$RBOModel = D('RetailBillOrder'); // bill_order表模型
|
||
$map = array(
|
||
'b.' . $RBOModel::ID => $parent_id,
|
||
'b.' . $RBOModel::STORE_ID => self::$store_id,
|
||
'b.' . $RBOModel::MERCHANT_ID => self::$merchant_id,
|
||
'b.' . $RBOModel::ORDER_TYPE => 1,
|
||
'b.' . $RBOModel::PAY_STATE => 1,
|
||
'b.' . $RBOModel::TYPE => 1,
|
||
'o.order_genre' => 2,
|
||
'g.parent_id' => $parent_id
|
||
);
|
||
$find_order = $RBOModel->getFindGroup($map);
|
||
// 判断订单
|
||
if (!$find_order) {
|
||
$res = array('status' => 0, 'msg' => '该订单存在异常,请联系商家');
|
||
return $res;
|
||
}
|
||
// 判断拼团状态
|
||
if ($find_order['state'] != 1) {
|
||
$res = array('status' => 0, 'msg' => '该团购已无法参加');
|
||
return $res;
|
||
}
|
||
// 判断时间
|
||
if ($find_order['end_time'] <= time()) {
|
||
$res = array('status' => 0, 'msg' => '该团购已经截止');
|
||
return $res;
|
||
}
|
||
// 查询活动
|
||
$RGViewModel = D('RetailGroupView');
|
||
// 查询活动
|
||
$map2 = array(
|
||
'RetailGroup.id' => $find_order['group_id'],
|
||
'RetailGroup.storeid' => self::$store_id,
|
||
'RetailGroup.merchantid' => self::$merchant_id,
|
||
'RetailGroup.acttype' => 1,
|
||
'RetailGroup.starttime' => array('elt', time()),
|
||
'RetailGroup.endtime' => array('gt', time()),
|
||
'RetailGoods.status' => 0,
|
||
'RetailGoods.online_state' => 1
|
||
);
|
||
// 查询拼团活动
|
||
$group_info = $RGViewModel->getFind($map2, array('id', 'number', 'item', 'join_time'));
|
||
if (!$group_info) {
|
||
$res = array('status' => 0, 'msg' => '该活动已结束');
|
||
return $res;
|
||
}
|
||
// 二次判断人数
|
||
$map3 = array(
|
||
'b.' . $RBOModel::STORE_ID => self::$store_id,
|
||
'b.' . $RBOModel::MERCHANT_ID => self::$merchant_id,
|
||
'b.' . $RBOModel::ORDER_TYPE => 1,
|
||
'b.' . $RBOModel::PAY_STATE => 1,
|
||
'b.' . $RBOModel::TYPE => 1,
|
||
'o.order_genre' => 2,
|
||
'g.parent_id' => $parent_id
|
||
);
|
||
$count = $RBOModel->countGroupUser($map3);
|
||
// 判断人数
|
||
if (!$count) {
|
||
$res = array('status' => 0, 'msg' => '该团购存在异常,请联系商家');
|
||
return $res;
|
||
}
|
||
if (intval($count) >= intval($group_info['number'])) {
|
||
$res = array('status' => 0, 'msg' => '人数已满足,无法参加');
|
||
return $res;
|
||
}
|
||
// 判断用户是否参加
|
||
$map4 = array(
|
||
'b.' . $RBOModel::STORE_ID => self::$store_id,
|
||
'b.' . $RBOModel::MERCHANT_ID => self::$merchant_id,
|
||
'b.' . $RBOModel::ORDER_TYPE => 1,
|
||
'b.' . $RBOModel::PAY_STATE => 1,
|
||
'b.' . $RBOModel::TYPE => 1,
|
||
'b.' . $RBOModel::UID => self::$uid,
|
||
'o.order_genre' => 2,
|
||
'g.parent_id' => $parent_id
|
||
);
|
||
$find_order2 = $RBOModel->getFindGroup($map4);
|
||
if ($find_order2) {
|
||
$res = array('status' => 0, 'msg' => '已经参加过该团购,无法重复参加');
|
||
} else {
|
||
$res = array('status' => 1, 'msg' => '可以参加', 'end_time' => $find_order['end_time']);
|
||
}
|
||
return $res;
|
||
}
|
||
|
||
/**
|
||
* 玩法详情,获取图片
|
||
* @return array $res
|
||
*/
|
||
public function getRulesDetailsImg()
|
||
{
|
||
$res['status'] = 1;
|
||
$res['img'] = $this->REQUEST_URL . '/Public/images/xcx/groupRulesImg.jpg';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
|
||
/**
|
||
* 2019-12-29
|
||
* 获取用户拼团订单 分页版
|
||
* $type 类型 1.所有 2.拼团中 3.拼团成功 3.拼团失败
|
||
*/
|
||
public function getUserGroupOrder_v1()
|
||
{
|
||
// 接收数据
|
||
$type = I('post.type') ? I('post.type') : 1;
|
||
$page = I('post.page') ? I('post.page') : 1;//分页
|
||
// 修改订单状态
|
||
A('PayApi/Group')->updateOrderState(self::$store_id, self::$merchant_id);
|
||
// 查询订单
|
||
$RGOViewModel = D('RetailGroupOrderView');
|
||
$map = array(
|
||
'RetailBillOrder.uid' => self::$uid,
|
||
'RetailBillOrder.store_id' => self::$store_id,
|
||
'RetailBillOrder.pay_state' => 1,
|
||
'RetailBillOrder.type' => 1,
|
||
'RetailBillOnline.order_genre' => 2,
|
||
'RetailBillOrder.order_type' => 1
|
||
);
|
||
// 判断类型
|
||
switch ($type) {
|
||
case 1:
|
||
$map['RetailBillGroup.state'] = array('in', array(1, 2, 3));
|
||
break;
|
||
case 2:
|
||
$map['RetailBillGroup.state'] = 1;
|
||
break;
|
||
case 3:
|
||
$map['RetailBillGroup.state'] = 2;
|
||
break;
|
||
case 4:
|
||
$map['RetailBillGroup.state'] = 3;
|
||
break;
|
||
default:
|
||
$map['RetailBillGroup.state'] = array('in', array(1, 2, 3));
|
||
}
|
||
$field = array(
|
||
'id',
|
||
'all_money',
|
||
'order_no',
|
||
'add_time',
|
||
'delivery_fee',
|
||
'status',
|
||
'eval_status',
|
||
'remind_state',
|
||
'refund_status',
|
||
'pickup_type',
|
||
'pick_code',
|
||
'delivery_type',
|
||
'delivery_record_id',
|
||
'delivery_fee',
|
||
'group_id',
|
||
'sku_id',
|
||
'parent_id',
|
||
'state',
|
||
'end_time',
|
||
'buy_number',
|
||
'remark',
|
||
);
|
||
$limit = 10;
|
||
$user_group = $RGOViewModel->getSelect($map, $field, $page, $limit);
|
||
if (!$user_group) {
|
||
$res = array(
|
||
'status' => 1,
|
||
'msg' => '暂无拼团订单',
|
||
'data' => array(),
|
||
'limit' => $limit,
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 处理数据
|
||
$RSLModel = D('RetailSkuList');
|
||
$RGVModel = D('RetailGroupView');
|
||
$GSVModel = D('RetailGroupSkuView');
|
||
$RDCModel = D('RetailDaClerk');
|
||
$RUOModel = D('RetailUuOrder');
|
||
foreach ($user_group as &$val) {
|
||
$val['add_time'] = date('Y-m-d H:i:s', $val['add_time']);
|
||
$val['endDate'] = date('Y-m-d H:i:s', $val['end_time']);
|
||
if ($val['state'] == 1) {
|
||
// 拼团中
|
||
$val['status_g'] = '拼团中';
|
||
$val['key_id'] = 1;
|
||
} else if ($val['state'] == 2 && $val['status'] == 1 && $val['remind_state'] != 1 && $val['pickup_type'] == 2) {
|
||
// 拼团成功,未发货,未提醒发货
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 2;
|
||
} else if ($val['state'] == 2 && $val['status'] == 1 && $val['remind_state'] == 1 && $val['pickup_type'] == 2) {
|
||
// 拼团成功,未发货,已提醒发货
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 3;
|
||
} else if ($val['state'] == 2 && $val['status'] == 2 && $val['pickup_type'] == 2) {
|
||
// 拼团成功,已发货
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 4;
|
||
} else if ($val['state'] == 2 && $val['status'] == 3 && $val['eval_status'] != 1 && $val['pickup_type'] == 2) {
|
||
// 拼团成功,已收货,未评价
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 5;
|
||
} else if ($val['state'] == 2 && $val['status'] == 3 && $val['eval_status'] == 1 && $val['pickup_type'] == 2) {
|
||
// 拼团成功,已收货,已评价
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 6;
|
||
} else if ($val['state'] == 2 && $val['pickup_type'] == 1 && $val['status'] == 1) {
|
||
// 拼团成功,待自提
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 7;
|
||
} else if ($val['state'] == 2 && $val['pickup_type'] == 1 && $val['status'] == 3 && $val['eval_status'] != 1) {
|
||
// 拼团成功,已自提,未评价
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 8;
|
||
} else if ($val['state'] == 2 && $val['pickup_type'] == 1 && $val['status'] == 3 && $val['eval_status'] == 1) {
|
||
// 拼团成功,已自提,已评价
|
||
$val['status_g'] = '拼团成功';
|
||
$val['key_id'] = 9;
|
||
} else if ($val['state'] == 3 && $val['refund_status'] == 1) {
|
||
// 拼团失败,待退款
|
||
$val['status_g'] = '拼团失败';
|
||
$val['key_id'] = 10;
|
||
} else if ($val['state'] == 3 && $val['refund_status'] == 2) {
|
||
// 拼团失败,已退款
|
||
$val['status_g'] = '拼团失败';
|
||
$val['key_id'] = 11;
|
||
}
|
||
// 获取活动
|
||
$map2 = array(
|
||
'RetailGroup.id' => $val['group_id'],
|
||
'RetailGroup.storeid' => self::$store_id,
|
||
'RetailGroup.merchantid' => self::$merchant_id,
|
||
);
|
||
// 拼团查询字段
|
||
if ($val['sku_id'] && $val['sku_id'] != 0) {
|
||
$field2 = array('id', 'gid', 'act_name',);
|
||
} else {
|
||
$field2 = array('id', 'gid', 'act_name', 'act_price', 'goods_name', 'goods_img_id');
|
||
}
|
||
// 查询拼团活动
|
||
$group_data = $RGVModel->getFind($map2, $field2);
|
||
if (!$group_data) {
|
||
$res = array('status' => 0, 'msg' => '活动出现异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 处理数据
|
||
$val['act_name'] = $group_data['act_name'];
|
||
$val['goods_name'] = $group_data['goods_name'];
|
||
// 查询规格
|
||
if ($val['sku_id'] && $val['sku_id'] != 0) {
|
||
// 规格查询条件
|
||
$map3 = array(
|
||
'RetailSkuGoods.goods_id' => $group_data['gid'],
|
||
'RetailSkuGoods.store_id' => self::$store_id,
|
||
'RetailSkuGoods.status' => 1,
|
||
'RetailSkuGoods.state' => 0,
|
||
'RetailSkuGroup.id' => $val['sku_id'],
|
||
);
|
||
$field3 = array('sku_id_list', 'goods_img', 'goods_img_id', 'act_price');
|
||
$group_sku = $GSVModel->getFind($map3, $field3);
|
||
if (!$group_sku) {
|
||
$res = array('status' => 0, 'msg' => '订单出现异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 处理数据
|
||
$val['image'] = $this->getGoodsImage($group_sku['goods_img_id'], $group_sku['goods_img']);
|
||
$val['act_price'] = $group_sku['act_price'];
|
||
// 规格名称
|
||
$sku_name = $RSLModel->getFindField(array($RSLModel::ID => array('in', $group_sku['sku_id_list'])), $RSLModel::NAME, true);
|
||
$val['sku_name'] = implode(',', $sku_name);
|
||
} else {
|
||
$val['image'] = $this->getGoodsImage($group_data['goods_img_id']);
|
||
$val['act_price'] = $group_data['act_price'];
|
||
$val['sku_name'] = '标配';
|
||
}
|
||
// 配送方式
|
||
if ($val['pickup_type'] == 2) {
|
||
// 判断达达、uu配送
|
||
if ($val['delivery_type'] == 2) { // 达达配送
|
||
$val['order_status'] = $RDCModel->getFindField(array($RDCModel::ID => $val['delivery_record_id']), $RDCModel::ORDER_STATUS);
|
||
}
|
||
if ($val['delivery_type'] == 3) { // uu配送
|
||
$state = $RUOModel->getFindField(array($RUOModel::ID => $val['delivery_record_id']), $RUOModel::STATE);
|
||
if ($state == 1) {
|
||
$val['order_status'] = 1;
|
||
} else if ($state == 3 || $state == 4) {
|
||
$val['order_status'] = 2;
|
||
} else if ($state == 5 || $state == 6) {
|
||
$val['order_status'] = 3;
|
||
}
|
||
$val['delivery_type'] = 2;
|
||
}
|
||
}
|
||
}
|
||
$res = array(
|
||
'status' => 1,
|
||
'data' => $user_group,
|
||
'msg' => '查询成功',
|
||
'limit' => $limit,
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
|
||
/*********************** 2020-03-30 快递发货下单 *******************************/
|
||
|
||
/**
|
||
* 2020-03-30 获取购买数据 快递发货
|
||
*/
|
||
public function getBuyData_v1()
|
||
{
|
||
if (empty(self::$uid)) {
|
||
$res['status'] = -1;
|
||
$res['msg'] = '用户未登录';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 实例化模型
|
||
$RGVModel = new RetailGroupViewModel();
|
||
$GSVModel = new RetailGroupSkuViewModel();
|
||
$RSLModel = new RetailSkuListModel();
|
||
// 接收数据
|
||
$group_id = I('post.group_id');
|
||
$sku_id = I('post.sku_id');
|
||
$buy_number = I('post.buy_number');
|
||
// 判断接受参数
|
||
if (!$group_id || !$buy_number) {
|
||
$res = array('status' => 0, 'msg' => '参数缺失');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 拼团查询条件
|
||
$map = array(
|
||
'RetailGroup.id' => $group_id,
|
||
'RetailGroup.storeid' => self::$store_id,
|
||
'RetailGroup.merchantid' => self::$merchant_id,
|
||
'RetailGroup.acttype' => 1,
|
||
'RetailGroup.starttime' => array('elt', time()),
|
||
'RetailGroup.endtime' => array('gt', time()),
|
||
'RetailGoods.status' => 0,
|
||
'RetailGoods.online_state' => 1
|
||
);
|
||
// 拼团查询字段
|
||
if ($sku_id && $sku_id != 0) {
|
||
$field = array(
|
||
'id',
|
||
'gid',
|
||
'act_name',
|
||
'send_type',
|
||
'company',
|
||
'day',
|
||
'hour',
|
||
'min',
|
||
);
|
||
} else {
|
||
$field = array(
|
||
'id',
|
||
'gid',
|
||
'act_name',
|
||
'act_price',
|
||
'send_type',
|
||
'company',
|
||
'goods_img_id',
|
||
'day',
|
||
'hour',
|
||
'min',
|
||
);
|
||
}
|
||
// 查询拼团活动
|
||
$buy_data = $RGVModel->getFind($map, $field);
|
||
if (!$buy_data) {
|
||
$res = array('status' => 0, 'msg' => '该活动存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
//计算成团结束时间与下单时间差
|
||
$buy_data['difference_time'] = $buy_data['day'] * 86400 + $buy_data['hour'] * 3600 + $buy_data['min'] * 60;
|
||
// unset($buy_data['day']);
|
||
// unset($buy_data['hour']);
|
||
// unset($buy_data['min']);
|
||
// 查询规格
|
||
if ($sku_id && $sku_id != 0) {
|
||
// 规格查询条件
|
||
$map2 = array(
|
||
'RetailSkuGoods.goods_id' => $buy_data['gid'],
|
||
'RetailSkuGoods.store_id' => self::$store_id,
|
||
'RetailSkuGoods.status' => 1,
|
||
'RetailSkuGoods.state' => 0,
|
||
'RetailSkuGroup.id' => $sku_id,
|
||
);
|
||
$field2 = array('sku_id_list', 'goods_img', 'goods_img_id', 'act_price');
|
||
$group_sku = $GSVModel->getFind($map2, $field2);
|
||
if (!$group_sku) {
|
||
$res = array('status' => 0, 'msg' => '该活动规格存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 合并数据
|
||
$buy_data['image'] = $this->getGoodsImage($group_sku['goods_img_id'], $group_sku['goods_img']);
|
||
$buy_data['act_price'] = $group_sku['act_price'];
|
||
// 规格名称
|
||
$sku_name = $RSLModel->getFindField(array($RSLModel::ID => array('in', $group_sku['sku_id_list'])), $RSLModel::NAME, true);
|
||
$buy_data['sku_name'] = implode(',', $sku_name);
|
||
} else {
|
||
$buy_data['image'] = $this->getGoodsImage($buy_data['goods_img_id']);
|
||
$buy_data['sku_name'] = '标配';
|
||
}
|
||
// 判断金额
|
||
if (!$buy_data['act_price'] || floatval($buy_data['act_price']) <= 0) {
|
||
$res = array('status' => 0, 'msg' => '该商品价格存在异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
} else {
|
||
$buy_data['act_price'] = floatval($buy_data['act_price']);
|
||
}
|
||
// 处理数据
|
||
$buy_data['all_money'] = floatval(round($buy_data['act_price'] * $buy_number, 2));
|
||
// 返回值
|
||
$SmallProgramModel = D('RetailSmallProgramUser');
|
||
$storeSet = $this->getStoreSet_v2();//门店基本设置
|
||
$delivery_set = $storeSet['delivery_set'];//配送设置
|
||
$send_type = explode(',', $buy_data['send_type']);
|
||
if (!in_array('1', $send_type)) {
|
||
//自提
|
||
$delivery_set[0] = 0;
|
||
}
|
||
if (!in_array('2', $send_type)) {
|
||
//配送
|
||
$delivery_set[1] = 0;
|
||
}
|
||
if (!in_array('3', $send_type)) {
|
||
//快递发货
|
||
$delivery_set[2] = 0;
|
||
}
|
||
|
||
//免配送费门槛金额
|
||
$delivery_cost = self::$store['delivery_cost'];
|
||
$delivery_status = self::$store['delivery_status'];
|
||
$res = array(
|
||
'status' => 1,
|
||
'msg' => '数据获取成功',
|
||
'data' => array(
|
||
'buy_data' => $buy_data,
|
||
'link_name' => self::$user[$SmallProgramModel::LINK_NAME],
|
||
'mobile_phone' => self::$user[$SmallProgramModel::MOBILE_PHONE],
|
||
'storeSet' => $storeSet, //基本设置
|
||
'address' => $this->getDefaultAddress_v1(), //默认地址
|
||
'vip_info' => $this->getVipInfo(),
|
||
'delivery_set' => $delivery_set,
|
||
),
|
||
'delivery_cost' => $delivery_cost,
|
||
'delivery_status' => $delivery_status,
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 2020-03-30 拼团下单
|
||
*/
|
||
public function placeOrder_v2()
|
||
{
|
||
if (empty(self::$uid)) {
|
||
$res['status'] = -1;
|
||
$res['msg'] = '用户未登录';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
//验证参数列表及规则
|
||
$verifyItem = array(
|
||
'pickup_type' => array('in' => array(1, 2, 3), 'require_link' => array(
|
||
array('require_data' => 1, 'link_key' => array('user_name', 'user_phone', 'start_date')),
|
||
array('require_data' => 2, 'link_key' => array('address_id', 'start_date')),
|
||
array('require_data' => 3, 'link_key' => array('address_id')),
|
||
)),
|
||
'group_id' => array('type' => 'number', 'min' => 1),
|
||
'sku_id' => array('type' => 'number', 'min' => 0, 'require' => false),
|
||
'buy_number' => array('type' => 'number', 'min' => 0),
|
||
'parent_id' => array('type' => 'number', 'min' => 0, 'require' => false),
|
||
'address_id' => array('type' => 'number', 'min' => 0, 'require' => false),
|
||
'user_name' => array('type' => 'name', 'require' => false),
|
||
'user_phone' => array('type' => 'mobile', 'require' => false),
|
||
'delivery_fee' => array('type' => 'money', 'min' => 0, 'require' => false),
|
||
'remark' => array('type' => 'string', 'maxLen' => 255, 'require' => false),
|
||
'start_date' => array('type' => 'string', 'maxLen' => 20, 'require' => false),
|
||
);
|
||
$post = I('post.');
|
||
$verify = verifyRequestParam($post, $verifyItem);//验证参数是否正确
|
||
if ($verify['error'] == 1) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = $verify['key'] . $verify['message'];
|
||
$this->ajaxReturn($result);
|
||
}
|
||
$pickup_type = $post['pickup_type'];
|
||
$group_id = $post['group_id'];
|
||
$sku_id = $post['sku_id'];
|
||
$buy_number = $post['buy_number'];
|
||
$parent_id = $post['parent_id'];
|
||
$address_id = $post['address_id'];
|
||
$user_name = $post['user_name'];
|
||
$user_phone = $post['user_phone'];
|
||
$delivery_fee = $post['delivery_fee'];
|
||
$remark = $post['remark'];
|
||
$start_date = $post['start_date'];
|
||
|
||
$time = time();
|
||
|
||
$ver = $this->verifyPlaceOrder();
|
||
if (!$ver) {
|
||
$this->ajaxReturn(array('status' => 0, 'msg' => '当前时间未在商家营业时间内'));
|
||
}
|
||
|
||
$GroupViewModel = new RetailGroupViewModel(); // 拼团商品视图模型
|
||
// 活动查询条件
|
||
$map = array(
|
||
'RetailGroup.id' => $group_id,
|
||
'RetailGroup.storeid' => self::$store_id,
|
||
'RetailGroup.merchantid' => self::$merchant_id,
|
||
'RetailGroup.acttype' => 1,
|
||
'RetailGroup.starttime' => array('elt', $time),
|
||
'RetailGroup.endtime' => array('gt', $time),
|
||
'RetailGoods.status' => 0,
|
||
'RetailGoods.online_state' => 1
|
||
);
|
||
// 字段查询
|
||
if ($sku_id && $sku_id != 0) {
|
||
$field = array(
|
||
'id',
|
||
'gid',
|
||
'number',
|
||
'day',
|
||
'hour',
|
||
'min',
|
||
'join_time',
|
||
'goods_name',
|
||
'goods_class_id',
|
||
'attribute_state',
|
||
'goods_img_id',
|
||
'integral_mem_status',
|
||
'integral',
|
||
'send_type',
|
||
'delivery_template_id',
|
||
'rise_num',
|
||
'pricing_method',
|
||
'company',
|
||
'weight_value',
|
||
);
|
||
} else {
|
||
$field = array(
|
||
'id',
|
||
'gid',
|
||
'number',
|
||
'act_price',
|
||
'act_num',
|
||
'day',
|
||
'hour',
|
||
'min',
|
||
'join_time',
|
||
'online_price',
|
||
'goods_name',
|
||
'goods_class_id',
|
||
'purchase_price',
|
||
'attribute_state',
|
||
'goods_img_id',
|
||
'integral_mem_status',
|
||
'integral',
|
||
'send_type',
|
||
'delivery_template_id',
|
||
'rise_num',
|
||
'pricing_method',
|
||
'company',
|
||
'weight_value',
|
||
);
|
||
}
|
||
// 查询拼团活动
|
||
$group_data = $GroupViewModel->getFind($map, $field);
|
||
if (!$group_data) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '该活动存在异常,请联系商家'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if ($group_data['rise_num'] != 0 && floatval($buy_number) < floatval($group_data['rise_num'])) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => "该秒杀商品起购量为{$group_data['rise_num']}件",
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断参与次数
|
||
if ($group_data['join_time'] && $group_data['join_time'] != 0) {
|
||
// 查询用户订单
|
||
$RGOViewModel = new RetailGroupOrderViewModel();
|
||
$map2 = array(
|
||
'RetailBillOrder.pay_state' => 1,
|
||
'RetailBillOrder.refund_status' => 0,
|
||
'RetailBillOrder.type' => 1,
|
||
'RetailBillOrder.uid' => self::$uid,
|
||
'RetailBillOrder.store_id' => self::$store_id,
|
||
'RetailBillOrder.merchant_id' => self::$merchant_id,
|
||
'RetailBillGroup.group_id' => $group_id,
|
||
'RetailBillGroup.state' => array('in', array(1, 2)),
|
||
);
|
||
$count = $RGOViewModel->getCount($map2);
|
||
// 判断限购
|
||
if ($count && $count >= intval($group_data['join_time'])) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '你已经达到限购数量,请选择其他商品'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
}
|
||
// 判断规格
|
||
$sku_id = $sku_id && $sku_id != 0 ? $sku_id : 0;
|
||
if ($sku_id != 0) {
|
||
$GSVModel = new RetailGroupSkuViewModel(); // 拼团规格视图模型
|
||
// 规格查询条件
|
||
$map3 = array(
|
||
'RetailSkuGoods.goods_id' => $group_data['gid'],
|
||
'RetailSkuGoods.store_id' => self::$store_id,
|
||
'RetailSkuGoods.status' => 1,
|
||
'RetailSkuGoods.state' => 0,
|
||
'RetailSkuGroup.id' => $sku_id,
|
||
);
|
||
$field2 = array(
|
||
'sku_id',
|
||
'act_price',
|
||
'act_num',
|
||
'purchase_price',
|
||
'online_price',
|
||
'weight_value',
|
||
);
|
||
$group_sku = $GSVModel->getFind($map3, $field2);
|
||
if (!$group_sku) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '该活动规格存在异常,请联系商家'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$group_data['act_price'] = $group_sku['act_price'];
|
||
$group_data['purchase_price'] = $group_sku['purchase_price'];
|
||
$group_data['online_price'] = $group_sku['online_price'];
|
||
$group_data['act_num'] = $group_sku['act_num'];
|
||
// 获取商品原规格
|
||
$RSGModel = D('RetailSkuGoods');
|
||
$goods_sku = $RSGModel->getFind(array($RSGModel::ID => $group_sku['sku_id']));
|
||
}
|
||
// 判断金额
|
||
if (!$group_data['act_price'] || floatval($group_data['act_price']) <= 0) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '该活动商品存在异常,请联系商家'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
$ApiRedis = new \Addons\Api\RedisController();
|
||
|
||
$wait_str = 'retail_group_' . $group_id . '_' . $sku_id . '_' . self::$uid . '_*';
|
||
$user_wait_buy = $this->getWaitNum($wait_str);
|
||
if ($user_wait_buy > 0) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '您有一笔该活动的待支付订单,请先进行处理'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
// 获取待支付库存
|
||
$other_wait_str = 'retail_group_' . $group_id . '_' . $sku_id . '_*';
|
||
$wait_num = $this->getWaitNum($other_wait_str);
|
||
// 判断库存
|
||
if (round($group_data['act_num'] - $wait_num - $buy_number) < 0) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '活动库存不足'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$storeSet = $this->getStoreSet_v2();//获取门店配送设置
|
||
$delivery_set = $storeSet['delivery_set'];
|
||
$send_type = explode(',', $group_data['send_type']);
|
||
if (!in_array('1', $send_type)) {
|
||
$delivery_set[0] = 0;
|
||
}
|
||
if (!in_array('2', $send_type)) {
|
||
$delivery_set[1] = 0;
|
||
}
|
||
if (!in_array('3', $send_type)) {
|
||
$delivery_set[2] = 0;
|
||
}
|
||
//判断配送费及自提
|
||
switch ($pickup_type) {
|
||
case '1':
|
||
//自提
|
||
if (!$delivery_set[0]) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '商家更新自提设置,请退出重试'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
break;
|
||
case '2':
|
||
//同城配送
|
||
if (!$delivery_set[1]) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '商家更新配送设置,请退出重试'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$result = $this->getLngLatAndFee($address_id);
|
||
if ($result['status'] == 0) {
|
||
$this->ajaxReturn($result);
|
||
}
|
||
// 判断配送费
|
||
if (floatval($delivery_fee) != floatval($result['fee'])) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '商家更新配送费,请重新下单'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$address = $result['address'];
|
||
$user_name = $address['name'];
|
||
$user_phone = $address['phone'];
|
||
$user_address = $address['address'];
|
||
break;
|
||
case '3':
|
||
//快递发货
|
||
if ($delivery_set[2] != 1) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '商家快递发货设置有变动,请退出重试';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
//计算配送费
|
||
$CostCalculation = new CostCalculationController();
|
||
$AddressModel = D('RetailAddress');
|
||
$addressInfo = $AddressModel->getUserAddress($address_id);
|
||
$user_name = $addressInfo['name'];
|
||
$user_phone = $addressInfo['phone'];
|
||
$user_address = $addressInfo['address'];
|
||
$province = $addressInfo['province'];
|
||
$city = $addressInfo['city'];
|
||
$area = $addressInfo['area'];
|
||
$goods = array(
|
||
array(
|
||
'num' => $buy_number,
|
||
'delivery_template_id' => $group_data['delivery_template_id'],
|
||
'pricing_method' => $group_data['pricing_method'],
|
||
'weight_value' => $group_data['weight_value'],
|
||
)
|
||
);
|
||
$cost_fee = $CostCalculation->getFreight(json_encode($goods), self::$store_id, $province, $city, $area);
|
||
if ($cost_fee['status'] == 1) {
|
||
if ($cost_fee['delivery_fee'] != $delivery_fee) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '快递费有变动,请退出重试';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
} else {
|
||
$this->ajaxReturn($cost_fee);
|
||
}
|
||
break;
|
||
}
|
||
// 计算金额
|
||
if ($pickup_type == 2 || $pickup_type == 3) {
|
||
// 配送、快递
|
||
$money = floatval(round($group_data['act_price'] * $buy_number, 2) + $delivery_fee);
|
||
} else {
|
||
// 自提
|
||
$money = floatval(round($group_data['act_price'] * $buy_number, 2));
|
||
}
|
||
|
||
$vip_info = $this->getVipInfo();// 获取会员信息
|
||
|
||
// 判断开团,参团
|
||
if ($parent_id && intval($parent_id) != 0) { // 参团
|
||
$parent_result = $this->publicJudgeGroup($parent_id);
|
||
if ($parent_result['status'] == 0) {
|
||
$this->ajaxReturn($parent_result);
|
||
}
|
||
$end_time = $parent_result['end_time'];
|
||
} else { // 开团
|
||
// 计算时间
|
||
$day = $group_data['day'] ? intval($group_data['day']) * 86400 : 0;
|
||
$hour = $group_data['hour'] ? intval($group_data['hour']) * 3600 : 0;
|
||
$min = $group_data['min'] ? intval($group_data['min']) * 60 : 0;
|
||
$end_time = $time + $day + $hour + $min;
|
||
}
|
||
//bill下单
|
||
$RBOModel = D('RetailBillOrder'); // 实例化模型(bill_order)
|
||
$bill_item = array(
|
||
'all_money' => $money,
|
||
'pay_state' => 0,
|
||
'pay_type' => 0,
|
||
'refund_status' => 0,
|
||
'type' => 1,
|
||
'order_type' => 1,
|
||
'add_time' => $time,
|
||
'vid' => $vip_info ? $vip_info['vid'] : 0,
|
||
'store_id' => self::$store_id,
|
||
'merchant_id' => self::$merchant_id,
|
||
'uid' => self::$uid,
|
||
'pay_money' => $money,
|
||
'amount_received' => $money,//实收金额
|
||
);
|
||
$bill = $RBOModel->addBillOrder($bill_item);
|
||
if (!$bill) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// bill_online
|
||
$RBOnModel = D('RetailBillOnline'); // 实例化模型(bill_online)
|
||
$online_item = array(
|
||
'bill_id' => $bill['id'],
|
||
'pickup_type' => $pickup_type,
|
||
'user_name' => $user_name,
|
||
'user_phone' => $user_phone,
|
||
'user_address' => $user_address ? $user_address : '',
|
||
'delivery_fee' => $delivery_fee,
|
||
'order_genre' => 2,
|
||
'remark' => $remark,
|
||
'user_select_time' => strtotime($start_date),//用户选择的时间
|
||
);
|
||
$online = $RBOnModel->addOrder($online_item);
|
||
if (!$online) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
// 判断是否为会员
|
||
if (!empty($vip_info)) {
|
||
// 获取会员类型
|
||
$vip_type = A('PayApi/Recharge')->getVipType($vip_info['vid']);
|
||
// 获取商户会员设置
|
||
$RVCModel = D('RetailVipConfig');
|
||
// 商户会员设置
|
||
$vip_config = $RVCModel->getFind(array($RVCModel::MERCHANT_ID => self::$merchant_id));
|
||
if ($vip_config) {
|
||
$give_state = true; //判断是否执行基于订单
|
||
if ($group_data['integral_mem_status'] == 1 && !empty($group_data['integral']) && $group_data['integral'] > 0) {
|
||
$parameter = array(
|
||
'vip_type' => $vip_type,
|
||
'vip_config' => $vip_config,
|
||
'integral' => $group_data['integral'],
|
||
'num' => $buy_number
|
||
);
|
||
$integral = $RVCModel->buy_goods_get_integral($parameter);
|
||
if ($integral > 0) {
|
||
$give_state = false;
|
||
}
|
||
}
|
||
if ($give_state) {
|
||
$parameter = array(
|
||
'vip_type' => $vip_type,
|
||
'vip_config' => $vip_config
|
||
);
|
||
$percent_state = $RVCModel->buy_integral_config($parameter);
|
||
if ($percent_state) {
|
||
if ($pickup_type == 2 || $pickup_type == 3) {
|
||
$parameter['all_money'] = $money - $delivery_fee;
|
||
} else {
|
||
$parameter['all_money'] = $money;
|
||
}
|
||
$integral = $RVCModel->buy_get_integral($parameter);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
// bill_discount
|
||
$RBDModel = D('RetailBillDiscount'); // 实例化模型(bill_discount)
|
||
$discount_item = array(
|
||
'bill_id' => $bill['id'],
|
||
'get_integral' => $vip_info['vid'] && $integral ? $integral : 0,
|
||
);
|
||
$discount = $RBDModel->addOrder($discount_item);
|
||
if (!$discount) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// bill_group
|
||
$RBGModel = D('RetailBillGroup'); // 拼团关联订单模型
|
||
$group_item = array(
|
||
$RBGModel::BILL_ID => $bill['id'],
|
||
$RBGModel::GROUP_ID => $group_id,
|
||
$RBGModel::SKU_ID => $sku_id ? $sku_id : 0,
|
||
$RBGModel::STATE => 1,
|
||
$RBGModel::PARENT_ID => $parent_id && intval($parent_id) != 0 ? $parent_id : $bill['id'],
|
||
$RBGModel::BUY_NUMBER => $buy_number,
|
||
$RBGModel::END_TIME => $end_time,
|
||
);
|
||
$group = $RBGModel->addOrder($group_item);
|
||
if (!$group) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 生成销售记录(sell)
|
||
$SellModel = D('RetailSell'); // 销售记录模型
|
||
$sell_item = array(
|
||
'bill_id' => $bill['id'],
|
||
'goods_id' => $group_data['gid'],
|
||
'pay_type' => 0,
|
||
'price' => $group_data['act_price'],
|
||
'num' => $buy_number,
|
||
'all_money' => $money,
|
||
'add_time' => $time,
|
||
'type' => 1,
|
||
'store_id' => self::$store_id,
|
||
'merchant_id' => self::$merchant_id,
|
||
'goods_class_id' => $group_data['goods_class_id'],
|
||
'goods_name' => $group_data['goods_name'],
|
||
'pricing_method' => $group_data['pricing_method'],
|
||
'purchase_price' => $group_data['purchase_price'],
|
||
'original_price' => $group_data['online_price'],
|
||
'goods_img_id' => $group_data['goods_img_id'],
|
||
'attribute_state' => $group_data['attribute_state'],
|
||
'vid' => $bill['vid'],
|
||
'uid' => self::$uid,
|
||
'sell_number' => $goods_sku['sku_num'] ? $goods_sku['sku_num'] * $buy_number : $buy_number,
|
||
'pay_state' => 0,
|
||
'get_integral' => $discount_item['get_integral'],
|
||
'company' => $group_data['company']
|
||
);
|
||
if ($goods_sku) {
|
||
$sell_item['sku_json_info'] = json_encode($goods_sku);
|
||
}
|
||
|
||
$sell = $SellModel->addOrder($sell_item);
|
||
if (!$sell) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
// 下单成功,添加redis数据库记录
|
||
$key = 'retail_group_' . $group_id . '_' . $sku_id . '_' . self::$uid . '_' . $bill['id'];
|
||
$val_arr = array(
|
||
'bill_id' => $bill['id'],
|
||
'num' => $buy_number,
|
||
'expiration_time' => time() + 602,
|
||
'key' => $key
|
||
);
|
||
// 添加 设置数据类型
|
||
$set_result = $ApiRedis::$redis->setex($key, 602, json_encode($val_arr));
|
||
if (!$set_result) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 再次判断库存,获取待支付库存
|
||
$wait_num = $this->getWaitNum($other_wait_str);
|
||
// 判断规格,获取现有现有库存
|
||
if ($sku_id && $sku_id != 0) {
|
||
// 规格
|
||
$RSGModel = D('RetailSkuGroup');
|
||
$act_num = $RSGModel->getFindField(array($RSGModel::ID => $sku_id), $RSGModel::ACT_NUM);
|
||
} else {
|
||
// 非规格
|
||
$RGModel = D('RetailGroup');
|
||
$act_num = $RGModel->getFindField(array($RGModel::ID => $group_id), $RGModel::ACT_NUM);
|
||
}
|
||
// 再次对比
|
||
if (floatval($wait_num) > floatval($act_num)) {
|
||
// 移除当前订单
|
||
$ApiRedis::$redis->delete($key);
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '库存不足,下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 下单成功
|
||
if ($pickup_type == 1) {
|
||
$up = array(
|
||
'link_name' => $user_name,
|
||
'mobile_phone' => $user_phone,
|
||
);
|
||
D('RetailSmallProgramUser')->updateOrder(array('id' => self::$uid), $up);
|
||
}
|
||
$res['status'] = 1;
|
||
$res['msg'] = '下单成功';
|
||
$res['data'] = array(
|
||
'order_no' => $bill['order_no'],
|
||
'allMoney' => $money,
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 2020-06-13 拼团下单 修改配送费
|
||
*/
|
||
public function placeOrder_v3()
|
||
{
|
||
if (empty(self::$uid) || self::$user['login_state'] != 1) {
|
||
$res['status'] = -1;
|
||
$res['msg'] = '用户未登录';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
//验证参数列表及规则
|
||
$verifyItem = array(
|
||
'pickup_type' => array('in' => array(1, 2, 3), 'require_link' => array(
|
||
array('require_data' => 1, 'link_key' => array('user_name', 'user_phone', 'start_date')),
|
||
array('require_data' => 2, 'link_key' => array('address_id', 'start_date')),
|
||
array('require_data' => 3, 'link_key' => array('address_id')),
|
||
)),
|
||
'group_id' => array('type' => 'number', 'min' => 1),
|
||
'sku_id' => array('type' => 'number', 'min' => 0, 'require' => false),
|
||
'buy_number' => array('type' => 'number', 'min' => 0),
|
||
'parent_id' => array('type' => 'number', 'min' => 0, 'require' => false),
|
||
'address_id' => array('type' => 'number', 'min' => 0, 'require' => false),
|
||
'user_name' => array('type' => 'name', 'require' => false),
|
||
'user_phone' => array('type' => 'mobile', 'require' => false),
|
||
'delivery_fee' => array('type' => 'money', 'min' => 0, 'require' => false),
|
||
'remark' => array('type' => 'string', 'maxLen' => 255, 'require' => false),
|
||
'start_date' => array('type' => 'string', 'maxLen' => 20, 'require' => false),
|
||
);
|
||
$platform_type = self::$merchant['platform_type']; //商户平台类型 1默认系统 2微礼平台
|
||
$post = I('post.');
|
||
$verify = verifyRequestParam($post, $verifyItem);//验证参数是否正确
|
||
if ($verify['error'] == 1) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = $verify['key'] . $verify['message'];
|
||
$this->ajaxReturn($result);
|
||
}
|
||
$pickup_type = $post['pickup_type'];
|
||
$group_id = $post['group_id'];
|
||
$sku_id = $post['sku_id'];
|
||
$buy_number = $post['buy_number'];
|
||
$parent_id = $post['parent_id'];
|
||
$address_id = $post['address_id'];
|
||
$user_name = $post['user_name'];
|
||
$user_phone = $post['user_phone'];
|
||
$delivery_fee = $post['delivery_fee'];
|
||
$remark = $post['remark'];
|
||
$start_date = $post['start_date'];
|
||
|
||
$time = time();
|
||
|
||
$ver = $this->verifyPlaceOrder();
|
||
if (!$ver) {
|
||
$this->ajaxReturn(array('status' => 0, 'msg' => '当前时间未在商家营业时间内'));
|
||
}
|
||
|
||
$GroupViewModel = new RetailGroupViewModel(); // 拼团商品视图模型
|
||
// 活动查询条件
|
||
$map = array(
|
||
'RetailGroup.id' => $group_id,
|
||
'RetailGroup.storeid' => self::$store_id,
|
||
'RetailGroup.merchantid' => self::$merchant_id,
|
||
'RetailGroup.acttype' => 1,
|
||
'RetailGroup.starttime' => array('elt', $time),
|
||
'RetailGroup.endtime' => array('gt', $time),
|
||
'RetailGoods.status' => 0,
|
||
'RetailGoods.online_state' => 1
|
||
);
|
||
// 字段查询
|
||
if ($sku_id && $sku_id != 0) {
|
||
$field = array(
|
||
'id',
|
||
'gid',
|
||
'number',
|
||
'day',
|
||
'hour',
|
||
'min',
|
||
'join_time',
|
||
'goods_name',
|
||
'goods_class_id',
|
||
'attribute_state',
|
||
'goods_img_id',
|
||
'integral_mem_status',
|
||
'integral',
|
||
'send_type',
|
||
'delivery_template_id',
|
||
'rise_num',
|
||
'pricing_method',
|
||
'company',
|
||
'weight_value',
|
||
'serial_number_state',
|
||
);
|
||
} else {
|
||
$field = array(
|
||
'id',
|
||
'gid',
|
||
'number',
|
||
'act_price',
|
||
'act_num',
|
||
'day',
|
||
'hour',
|
||
'min',
|
||
'join_time',
|
||
'online_price',
|
||
'goods_name',
|
||
'goods_class_id',
|
||
'purchase_price',
|
||
'attribute_state',
|
||
'goods_img_id',
|
||
'integral_mem_status',
|
||
'integral',
|
||
'send_type',
|
||
'delivery_template_id',
|
||
'rise_num',
|
||
'pricing_method',
|
||
'company',
|
||
'weight_value',
|
||
'serial_number_state',
|
||
);
|
||
if ($platform_type == 2) {
|
||
//第三方平台
|
||
$field[] = 'third_goods_code';
|
||
}
|
||
}
|
||
// 查询拼团活动
|
||
$group_data = $GroupViewModel->getFind($map, $field);
|
||
if (!$group_data) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '该活动存在异常,请联系商家'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if ($group_data['rise_num'] != 0 && floatval($buy_number) < floatval($group_data['rise_num'])) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => "该拼团商品起购量为{$group_data['rise_num']}件",
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断参与次数
|
||
if ($group_data['join_time'] && $group_data['join_time'] != 0) {
|
||
// 查询用户订单
|
||
$RGOViewModel = D('RetailGroupOrderView');
|
||
$map2 = array(
|
||
'RetailBillOrder.pay_state' => 1,
|
||
'RetailBillOrder.refund_status' => 0,
|
||
'RetailBillOrder.type' => 1,
|
||
'RetailBillOrder.uid' => self::$uid,
|
||
'RetailBillOrder.store_id' => self::$store_id,
|
||
'RetailBillOrder.merchant_id' => self::$merchant_id,
|
||
'RetailBillGroup.group_id' => $group_id,
|
||
'RetailBillGroup.state' => array('in', array(1, 2)),
|
||
);
|
||
$count = $RGOViewModel->getCount($map2);
|
||
// 判断限购
|
||
if ($count && $count >= intval($group_data['join_time'])) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '你已经达到限购数量,请选择其他商品'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
}
|
||
// 判断规格
|
||
$sku_id = $sku_id && $sku_id != 0 ? $sku_id : 0;
|
||
if ($sku_id != 0) {
|
||
$GSVModel = new RetailGroupSkuViewModel(); // 拼团规格视图模型
|
||
// 规格查询条件
|
||
$map3 = array(
|
||
'RetailSkuGoods.goods_id' => $group_data['gid'],
|
||
'RetailSkuGoods.store_id' => self::$store_id,
|
||
'RetailSkuGoods.status' => 1,
|
||
'RetailSkuGoods.state' => 0,
|
||
'RetailSkuGroup.id' => $sku_id,
|
||
);
|
||
$field2 = array(
|
||
'sku_id',
|
||
'act_price',
|
||
'act_num',
|
||
'purchase_price',
|
||
'online_price',
|
||
'weight_value',
|
||
);
|
||
if ($platform_type == 2) {
|
||
//第三方平台
|
||
$field2[] = 'third_goods_code';
|
||
}
|
||
$group_sku = $GSVModel->getFind($map3, $field2);
|
||
if (!$group_sku) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '该活动规格存在异常,请联系商家'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$group_data['act_price'] = $group_sku['act_price'];
|
||
$group_data['purchase_price'] = $group_sku['purchase_price'];
|
||
$group_data['online_price'] = $group_sku['online_price'];
|
||
$group_data['act_num'] = $group_sku['act_num'];
|
||
$group_data['weight_value'] = $group_sku['weight_value'];
|
||
// 获取商品原规格
|
||
$RSGModel = D('RetailSkuGoods');
|
||
$goods_sku = $RSGModel->getFind(array($RSGModel::ID => $group_sku['sku_id']));
|
||
}
|
||
// 判断金额
|
||
if (!$group_data['act_price'] || floatval($group_data['act_price']) <= 0) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '该活动商品存在异常,请联系商家'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
$ApiRedis = new \Addons\Api\RedisController();
|
||
|
||
$wait_str = 'retail_group_' . $group_id . '_' . $sku_id . '_' . self::$uid . '_*';
|
||
$user_wait_buy = $this->getWaitNum($wait_str);
|
||
if ($user_wait_buy > 0) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '您有一笔该活动的待支付订单,请先进行处理'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if ($platform_type == 2) {
|
||
//第三方平台
|
||
if (!empty($sku_id)) {
|
||
$third_goods_code = $group_sku['third_goods_code'];
|
||
} else {
|
||
$third_goods_code = $group_data['third_goods_code'];
|
||
}
|
||
$ThirdGoodsClass = new Goods();
|
||
$thirdResult = $ThirdGoodsClass->goodsNumQuery([
|
||
'merchant_id' => self::$merchant_id,
|
||
'type' => 2,
|
||
'code_arr' => [$third_goods_code],
|
||
'Customer_Codes' => self::$store['third_code']
|
||
]);
|
||
if ($thirdResult['status'] == 1 && !empty($thirdResult['data'])) {
|
||
$goods_stock = $thirdResult['data'];
|
||
if ($goods_stock <= 0) {
|
||
$group_data['act_num'] = 0;
|
||
$ThirdGoodsClass->activityOff([
|
||
'id' => $group_id,
|
||
'type' => 2
|
||
]);
|
||
} else if ($goods_stock < $group_data['act_num']) {
|
||
$group_data['act_num'] = $goods_stock;
|
||
}
|
||
} else {
|
||
$group_data['act_num'] = 0;
|
||
}
|
||
}
|
||
// 获取待支付库存
|
||
$other_wait_str = 'retail_group_' . $group_id . '_' . $sku_id . '_*';
|
||
$wait_num = $this->getWaitNum($other_wait_str);
|
||
// 判断库存
|
||
if (round($group_data['act_num'] - $wait_num - $buy_number) < 0) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '活动库存不足'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$storeSet = $this->getStoreSet_v2();//获取门店配送设置
|
||
$delivery_set = $storeSet['delivery_set'];
|
||
$send_type = explode(',', $group_data['send_type']);
|
||
if (!in_array('1', $send_type)) {
|
||
$delivery_set[0] = 0;
|
||
}
|
||
if (!in_array('2', $send_type)) {
|
||
$delivery_set[1] = 0;
|
||
}
|
||
if (!in_array('3', $send_type)) {
|
||
$delivery_set[2] = 0;
|
||
}
|
||
//判断配送费及自提
|
||
switch ($pickup_type) {
|
||
case '1':
|
||
//自提
|
||
if (!$delivery_set[0]) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '商家更新自提设置,请退出重试'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
break;
|
||
case '2':
|
||
//同城配送
|
||
if (!$delivery_set[1]) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '商家更新配送设置,请退出重试'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$result = $this->getLngLatAndFee($address_id);
|
||
if ($result['status'] == 0) {
|
||
$this->ajaxReturn($result);
|
||
}
|
||
// 判断配送费
|
||
if (floatval($delivery_fee) != floatval($result['fee'])) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '商家更新配送费,请重新下单'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$address = $result['address'];
|
||
$user_name = $address['name'];
|
||
$user_phone = $address['phone'];
|
||
$user_address = $address['address'];
|
||
break;
|
||
case '3':
|
||
//快递发货
|
||
if ($delivery_set[2] != 1) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '商家快递发货设置有变动,请退出重试';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
//计算配送费
|
||
$CostCalculation = new CostCalculationController();
|
||
$AddressModel = D('RetailAddress');
|
||
$addressInfo = $AddressModel->getUserAddress($address_id);
|
||
$user_name = $addressInfo['name'];
|
||
$user_phone = $addressInfo['phone'];
|
||
$user_address = $addressInfo['address'];
|
||
$province = $addressInfo['province'];
|
||
$city = $addressInfo['city'];
|
||
$area = $addressInfo['area'];
|
||
$goods = array(
|
||
array(
|
||
'num' => $buy_number,
|
||
'delivery_template_id' => $group_data['delivery_template_id'],
|
||
'pricing_method' => $group_data['pricing_method'],
|
||
'weight_value' => $group_data['weight_value'],
|
||
)
|
||
);
|
||
$cost_fee = $CostCalculation->getFreight(json_encode($goods), self::$store_id, $province, $city, $area);
|
||
if ($cost_fee['status'] == 1) {
|
||
if ($cost_fee['delivery_fee'] != $delivery_fee) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '快递费有变动,请退出重试';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
} else {
|
||
$this->ajaxReturn($cost_fee);
|
||
}
|
||
break;
|
||
}
|
||
|
||
//免配送费门槛金额
|
||
$delivery_cost = self::$store['delivery_cost'];
|
||
$delivery_status = self::$store['delivery_status'];
|
||
|
||
if ($delivery_status == 1 && intval(round($group_data['spike_price'] * $buy_number, 2)) >= intval($delivery_cost)) {
|
||
$delivery_fee = 0;
|
||
}
|
||
|
||
// 计算金额
|
||
if ($pickup_type == 2 || $pickup_type == 3) {
|
||
// 配送、快递
|
||
$money = floatval(round($group_data['act_price'] * $buy_number, 2) + $delivery_fee);
|
||
} else {
|
||
// 自提
|
||
$money = floatval(round($group_data['act_price'] * $buy_number, 2));
|
||
}
|
||
|
||
$vip_info = $this->getVipInfo();// 获取会员信息
|
||
if (empty($vip_info) && $platform_type == 2) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '请先绑定会员卡'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断开团,参团
|
||
if ($parent_id && intval($parent_id) != 0) { // 参团
|
||
$parent_result = $this->publicJudgeGroup($parent_id);
|
||
if ($parent_result['status'] == 0) {
|
||
$this->ajaxReturn($parent_result);
|
||
}
|
||
$end_time = $parent_result['end_time'];
|
||
} else { // 开团
|
||
// 计算时间
|
||
$day = $group_data['day'] ? intval($group_data['day']) * 86400 : 0;
|
||
$hour = $group_data['hour'] ? intval($group_data['hour']) * 3600 : 0;
|
||
$min = $group_data['min'] ? intval($group_data['min']) * 60 : 0;
|
||
$end_time = $time + $day + $hour + $min;
|
||
}
|
||
//bill下单
|
||
$RBOModel = D('RetailBillOrder'); // 实例化模型(bill_order)
|
||
$bill_item = array(
|
||
'all_money' => $money,
|
||
'pay_state' => 0,
|
||
'pay_type' => 0,
|
||
'refund_status' => 0,
|
||
'type' => 1,
|
||
'order_type' => 1,
|
||
'add_time' => $time,
|
||
'vid' => $vip_info ? $vip_info['vid'] : 0,
|
||
'store_id' => self::$store_id,
|
||
'merchant_id' => self::$merchant_id,
|
||
'uid' => self::$uid,
|
||
'pay_money' => $money,
|
||
'amount_received' => $money,//实收金额
|
||
);
|
||
$bill = $RBOModel->addBillOrder($bill_item);
|
||
if (!$bill) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
if ($platform_type == 2) {
|
||
//第三方平台
|
||
$third_order = [
|
||
'Customer_Code' => self::$store['third_code'],
|
||
'Member_Code' => $vip_info['card_num'],
|
||
'AreaName' => $user_address,
|
||
'Remark' => $remark,
|
||
'Swno' => $bill['order_no'],
|
||
'Details' => [
|
||
[
|
||
'third_goods_code' => $third_goods_code,
|
||
'num' => $buy_number,
|
||
'all_money' => $money,
|
||
'company' => $group_data['company']
|
||
]
|
||
]
|
||
];
|
||
$ThirdClass = new Order();
|
||
$thirdResult = $ThirdClass->orderInsert([
|
||
'merchant_id' => self::$merchant_id,
|
||
'third_order' => json_encode($third_order)
|
||
]);
|
||
if ($thirdResult['status'] == 0) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = 'Q3 ERP平台订单下单失败' . $thirdResult['message'];
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$RBOModel->updateOrder(['id' => $bill['id']], [
|
||
'third_order' => $thirdResult['data'],
|
||
'platform_type' => 2
|
||
]);
|
||
}
|
||
// bill_online
|
||
$RBOnModel = D('RetailBillOnline'); // 实例化模型(bill_online)
|
||
$online_item = array(
|
||
'bill_id' => $bill['id'],
|
||
'pickup_type' => $pickup_type,
|
||
'user_name' => $user_name,
|
||
'user_phone' => $user_phone,
|
||
'user_address' => $user_address ? $user_address : '',
|
||
'delivery_fee' => $delivery_fee,
|
||
'order_genre' => 2,
|
||
'remark' => $remark,
|
||
'user_select_time' => strtotime($start_date),//用户选择的时间
|
||
);
|
||
$online = $RBOnModel->addOrder($online_item);
|
||
if (!$online) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
// 判断是否为会员
|
||
if (!empty($vip_info)) {
|
||
// 获取会员类型
|
||
$vip_type = A('PayApi/Recharge')->getVipType($vip_info['vid']);
|
||
// 获取商户会员设置
|
||
$RVCModel = D('RetailVipConfig');
|
||
// 商户会员设置
|
||
$vip_config = $RVCModel->getFind(array($RVCModel::MERCHANT_ID => self::$merchant_id));
|
||
if ($vip_config) {
|
||
$give_state = true; //判断是否执行基于订单
|
||
if ($group_data['integral_mem_status'] == 1 && !empty($group_data['integral']) && $group_data['integral'] > 0) {
|
||
$parameter = array(
|
||
'vip_type' => $vip_type,
|
||
'vip_config' => $vip_config,
|
||
'integral' => $group_data['integral'],
|
||
'num' => $buy_number
|
||
);
|
||
$integral = $RVCModel->buy_goods_get_integral($parameter);
|
||
if ($integral > 0) {
|
||
$give_state = false;
|
||
}
|
||
}
|
||
if ($give_state) {
|
||
$parameter = array(
|
||
'vip_type' => $vip_type,
|
||
'vip_config' => $vip_config
|
||
);
|
||
$percent_state = $RVCModel->buy_integral_config($parameter);
|
||
if ($percent_state) {
|
||
if ($pickup_type == 2 || $pickup_type == 3) {
|
||
$parameter['all_money'] = $money - $delivery_fee;
|
||
} else {
|
||
$parameter['all_money'] = $money;
|
||
}
|
||
$integral = $RVCModel->buy_get_integral($parameter);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
// bill_discount
|
||
$RBDModel = D('RetailBillDiscount'); // 实例化模型(bill_discount)
|
||
$discount_item = array(
|
||
'bill_id' => $bill['id'],
|
||
'get_integral' => $vip_info['vid'] && $integral ? $integral : 0,
|
||
);
|
||
$discount = $RBDModel->addOrder($discount_item);
|
||
if (!$discount) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// bill_group
|
||
$RBGModel = D('RetailBillGroup'); // 拼团关联订单模型
|
||
$group_item = array(
|
||
$RBGModel::BILL_ID => $bill['id'],
|
||
$RBGModel::GROUP_ID => $group_id,
|
||
$RBGModel::SKU_ID => $sku_id ? $sku_id : 0,
|
||
$RBGModel::STATE => 1,
|
||
$RBGModel::PARENT_ID => $parent_id && intval($parent_id) != 0 ? $parent_id : $bill['id'],
|
||
$RBGModel::BUY_NUMBER => $buy_number,
|
||
$RBGModel::END_TIME => $end_time,
|
||
);
|
||
$group = $RBGModel->addOrder($group_item);
|
||
if (!$group) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 生成销售记录(sell)
|
||
$SellModel = D('RetailSell'); // 销售记录模型
|
||
$sell_item = array(
|
||
'bill_id' => $bill['id'],
|
||
'goods_id' => $group_data['gid'],
|
||
'pay_type' => 0,
|
||
'price' => $group_data['act_price'],
|
||
'num' => $buy_number,
|
||
'all_money' => $money,
|
||
'add_time' => $time,
|
||
'type' => 1,
|
||
'store_id' => self::$store_id,
|
||
'merchant_id' => self::$merchant_id,
|
||
'goods_class_id' => $group_data['goods_class_id'],
|
||
'goods_name' => $group_data['goods_name'],
|
||
'pricing_method' => $group_data['pricing_method'],
|
||
'purchase_price' => $group_data['purchase_price'],
|
||
'original_price' => $group_data['online_price'],
|
||
'goods_img_id' => $group_data['goods_img_id'],
|
||
'attribute_state' => $group_data['attribute_state'],
|
||
'vid' => $bill['vid'],
|
||
'uid' => self::$uid,
|
||
'sell_number' => $goods_sku['sku_num'] ? $goods_sku['sku_num'] * $buy_number : $buy_number,
|
||
'pay_state' => 0,
|
||
'get_integral' => $discount_item['get_integral'],
|
||
'company' => $group_data['company'],
|
||
'serial_number_state' => $group_data['serial_number_state'] ? $group_data['serial_number_state'] : 0
|
||
);
|
||
if ($goods_sku) {
|
||
$sell_item['sku_id'] = $goods_sku['id'];
|
||
$sell_item['sku_json_info'] = json_encode($goods_sku);
|
||
}
|
||
|
||
$sell = $SellModel->addOrder($sell_item);
|
||
if (!$sell) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
// 下单成功,添加redis数据库记录
|
||
$key = 'retail_group_' . $group_id . '_' . $sku_id . '_' . self::$uid . '_' . $bill['id'];
|
||
$val_arr = array(
|
||
'bill_id' => $bill['id'],
|
||
'num' => $buy_number,
|
||
'expiration_time' => time() + 602,
|
||
'key' => $key
|
||
);
|
||
// 添加 设置数据类型
|
||
$set_result = $ApiRedis::$redis->setex($key, 602, json_encode($val_arr));
|
||
if (!$set_result) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 再次判断库存,获取待支付库存
|
||
if ($platform_type != 2) {
|
||
$wait_num = $this->getWaitNum($other_wait_str);
|
||
// 判断规格,获取现有现有库存
|
||
if ($sku_id && $sku_id != 0) {
|
||
// 规格
|
||
$RSGModel = D('RetailSkuGroup');
|
||
$act_num = $RSGModel->getFindField(array($RSGModel::ID => $sku_id), $RSGModel::ACT_NUM);
|
||
} else {
|
||
// 非规格
|
||
$RGModel = D('RetailGroup');
|
||
$act_num = $RGModel->getFindField(array($RGModel::ID => $group_id), $RGModel::ACT_NUM);
|
||
}
|
||
// 再次对比
|
||
if (floatval($wait_num) > floatval($act_num)) {
|
||
// 移除当前订单
|
||
$ApiRedis::$redis->delete($key);
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '库存不足,下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
}
|
||
// 下单成功
|
||
if ($pickup_type == 1) {
|
||
$up = array(
|
||
'link_name' => $user_name,
|
||
'mobile_phone' => $user_phone,
|
||
);
|
||
D('RetailSmallProgramUser')->updateOrder(array('id' => self::$uid), $up);
|
||
}
|
||
$res['status'] = 1;
|
||
$res['msg'] = '下单成功';
|
||
$res['data'] = array(
|
||
'order_no' => $bill['order_no'],
|
||
'allMoney' => $money,
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 2020-03-31 获取用户拼团订单列表
|
||
*/
|
||
public function getUserGroupOrder_v2()
|
||
{
|
||
// 接收数据
|
||
$type = I('post.type') ? I('post.type') : 1;//类型 1.所有 2.拼团中 3.拼团成功 3.拼团失败
|
||
$page = I('post.page') ? I('post.page') : 1;//分页
|
||
// 修改订单状态
|
||
A('PayApi/Group')->updateOrderState(self::$store_id, self::$merchant_id);
|
||
// 查询订单
|
||
$OrderViewModel = D('RetailGroupOrderView');
|
||
$map = array(
|
||
'RetailBillOrder.uid' => self::$uid,
|
||
'RetailBillOrder.store_id' => self::$store_id,
|
||
'RetailBillOrder.pay_state' => 1,
|
||
'RetailBillOrder.type' => 1,
|
||
'RetailBillOnline.order_genre' => 2,
|
||
'RetailBillOrder.order_type' => 1
|
||
);
|
||
// 判断类型
|
||
$typeArr = array(
|
||
'1' => array('in', array(1, 2, 3)),
|
||
'2' => 1,
|
||
'3' => 2,
|
||
'4' => 3,
|
||
);
|
||
$map['RetailBillGroup.state'] = $typeArr[$type];
|
||
$fields = array(
|
||
'id',
|
||
'all_money',
|
||
'order_no',
|
||
'add_time',
|
||
'delivery_fee',
|
||
'status',
|
||
'eval_status',
|
||
'remind_state',
|
||
'refund_status',
|
||
'pickup_type',
|
||
'pick_code',
|
||
'delivery_type',
|
||
'delivery_record_id',
|
||
'delivery_fee',
|
||
'group_id',
|
||
'sku_id',
|
||
'parent_id',
|
||
'state',
|
||
'end_time',
|
||
'remark',
|
||
);
|
||
$limit = 10;
|
||
$groupList = $OrderViewModel->getSelect($map, $fields, $page, $limit);
|
||
if (!$groupList) {
|
||
$res = array(
|
||
'status' => 1,
|
||
'msg' => '暂无拼团订单',
|
||
'data' => array(),
|
||
'limit' => $limit,
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 处理数据
|
||
$GroupModel = D('RetailGroup');
|
||
$SellModel = D('RetailSell');
|
||
$RDCModel = D('RetailDaClerk');
|
||
$RUOModel = D('RetailUuOrder');
|
||
foreach ($groupList as &$val) {
|
||
$val['add_time'] = date('Y-m-d H:i:s', $val['add_time']);
|
||
$val['endDate'] = date('Y-m-d H:i:s', $val['end_time']);
|
||
switch ($val['state']) {
|
||
case '1':
|
||
$val['state_msg'] = '拼团中';
|
||
break;
|
||
case '2':
|
||
$val['state_msg'] = '拼团成功';
|
||
break;
|
||
case '3':
|
||
$val['state_msg'] = '拼团失败';
|
||
break;
|
||
}
|
||
$map = array(
|
||
'id' => $val['group_id'],
|
||
);
|
||
$val['act_name'] = $GroupModel->getFindField($map, 'actname');// 拼团活动名称
|
||
$map = array(
|
||
'bill_id' => $val['id'],
|
||
);
|
||
$sell = $SellModel->getFind($map, 'num,price,goods_name,goods_img_id,sku_json_info');// 商品销售数据
|
||
$val['price'] = $sell['price'];
|
||
$val['goods_img'] = $this->getGoodsImage($sell['goods_img_id']);//商品图片
|
||
if (!empty($sell['sku_json_info'])) {
|
||
//规格商品
|
||
$val['sku_name'] = json_decode($sell['sku_json_info'], true)['name'];
|
||
}
|
||
$val['goods_name'] = $sell['goods_name'];//商品名称
|
||
$val['num'] = $sell['num'];//购买数量
|
||
// 配送方式
|
||
if ($val['state'] == 2) {
|
||
switch ($val['status']) {
|
||
case '1':
|
||
//待发货、自提
|
||
if ($val['pickup_type'] == 1) {
|
||
$val['text'] = '待自提';
|
||
} else if ($val['pickup_type'] == 2 || $val['pickup_type'] == 3) {
|
||
$val['text'] = '待发货';
|
||
}
|
||
break;
|
||
case '2':
|
||
//待收货
|
||
if ($val['pickup_type'] == 2 || $val['pickup_type'] == 3) {
|
||
// 判断达达、uu配送
|
||
$val['text'] = '配送中';
|
||
if ($val['delivery_type'] == 2) {
|
||
// 达达配送
|
||
$order_status = $RDCModel->getFindField(array($RDCModel::ID => $val['delivery_record_id']), $RDCModel::ORDER_STATUS);
|
||
} else if ($val['delivery_type'] == 3) {
|
||
// uu配送
|
||
$state = $RUOModel->getFindField(array($RUOModel::ID => $val['delivery_record_id']), $RUOModel::STATE);
|
||
if ($state == 1) {
|
||
$order_status = 1;
|
||
} else if ($state == 3 || $state == 4) {
|
||
$order_status = 2;
|
||
} else if ($state == 5 || $state == 6) {
|
||
$order_status = 3;
|
||
}
|
||
$val['delivery_type'] = 2;
|
||
}
|
||
if ($order_status) {
|
||
$val['order_status'] = $order_status;//1骑手接单中 2骑手取货中 3骑手配送中
|
||
$statusArr = array(
|
||
'1' => '骑手接单中',
|
||
'2' => '骑手取货中',
|
||
'3' => '骑手配送中',
|
||
);
|
||
$val['text'] = $statusArr[$order_status];
|
||
}
|
||
} else {
|
||
$val['text'] = '待收货';
|
||
}
|
||
break;
|
||
case '3':
|
||
//收货
|
||
if ($val['eval_status']) {
|
||
$val['text'] = '已评价';
|
||
} else if ($val['pickup_type'] == 1) {
|
||
$val['text'] = '已自提';
|
||
} else if ($val['pickup_type'] == 1) {
|
||
$val['text'] = '已收货';
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
$res = array(
|
||
'status' => 1,
|
||
'data' => $groupList,
|
||
'msg' => '查询成功',
|
||
'limit' => $limit,
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
} |