389 lines
17 KiB
PHP
389 lines
17 KiB
PHP
<?php
|
||
/**
|
||
* tpshop
|
||
* ============================================================================
|
||
* * 版权所有 2015-2027 深圳搜豹网络科技有限公司,并保留所有权利。
|
||
* 网站地址: http://www.tp-shop.cn
|
||
* ----------------------------------------------------------------------------
|
||
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
|
||
* 不允许对程序代码以任何形式任何目的的再发布。
|
||
* 如果商业用途务必到官方购买正版授权, 以免引起不必要的法律纠纷.
|
||
* 采用最新Thinkphp5助手函数特性实现单字母函数M D U等简写方式
|
||
* ============================================================================
|
||
* $Author: IT宇宙人 2015-08-10 $
|
||
*/
|
||
namespace app\mobile\controller;
|
||
|
||
use app\common\logic\CouponLogic;
|
||
use app\common\logic\Pay;
|
||
use app\common\logic\PlaceOrder;
|
||
use app\common\logic\team\TeamOrder;
|
||
use app\common\model\Goods;
|
||
use app\common\model\Order;
|
||
use app\common\model\OrderGoods;
|
||
use app\common\model\TeamActivity;
|
||
use app\common\model\TeamFound;
|
||
use app\common\model\TeamGoodsItem;
|
||
use app\common\util\TpshopException;
|
||
use app\common\logic\UsersLogic;
|
||
use think\Db;
|
||
use think\Page;
|
||
|
||
|
||
class Team extends MobileBase
|
||
{
|
||
public $user_id = 0;
|
||
public $user = array();
|
||
|
||
/**
|
||
* 构造函数
|
||
*/
|
||
public function __construct()
|
||
{
|
||
parent::__construct();
|
||
if (session('?user')) {
|
||
$user = session('user');
|
||
$user = M('users')->where("user_id", $user['user_id'])->find();
|
||
session('user', $user); //覆盖session 中的 user
|
||
$this->user = $user;
|
||
$this->user_id = $user['user_id'];
|
||
$this->assign('user', $user); //存储用户信息
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 拼团首页
|
||
* @return mixed
|
||
*/
|
||
public function index()
|
||
{
|
||
$goods_category = Db::name('goods_category')->where(['level' => 1, 'is_show' => 1])->select();
|
||
$this->assign('goods_category', $goods_category);
|
||
return $this->fetch();
|
||
}
|
||
|
||
public function category()
|
||
{
|
||
$id = input('id/d');//一级分类ID
|
||
$tid = input('tid/d');//二级分类ID
|
||
$two_all_ids = input('tid/s');//二级分类全部id
|
||
$goods_category_level_one = Db::name('goods_category')->where(['id' => $id])->find();
|
||
$goods_category_level_two = Db::name('goods_category')->where(['parent_id' => $goods_category_level_one['id']])->select();//二级分类
|
||
$goods_where = ['cat_id1' => $id];
|
||
if ($tid) {
|
||
$goods_where['cat_id2'] = $tid;
|
||
}
|
||
if ($goods_category_level_two) {
|
||
$goods_category_level_two_arr = get_arr_column($goods_category_level_two, 'id');
|
||
$two_all_ids = implode(',', $goods_category_level_two_arr);
|
||
}
|
||
$this->assign('goods_category_level_one', $goods_category_level_one);
|
||
$this->assign('goods_category_level_two', $goods_category_level_two);
|
||
$this->assign('two_all_ids', $two_all_ids);
|
||
return $this->fetch();
|
||
}
|
||
|
||
|
||
/**
|
||
* 拼团首页列表
|
||
*/
|
||
public function AjaxTeamList()
|
||
{
|
||
$p = Input('p', 1);
|
||
$id = input('id/d');//一级分类ID
|
||
$tid = input('tid/d');//二级分类ID
|
||
$two_all_ids = input('two_all_ids/s');//二级分类全部id
|
||
$goods_where = [];
|
||
if ($id && $two_all_ids) {
|
||
$category_three_ids = Db::name('goods_category')->where(['parent_id' => ['in', $two_all_ids]])->getField('id', true);//三级分类id
|
||
$goods_where['cat_id'] = ['in', $category_three_ids];
|
||
}
|
||
if ($tid) {
|
||
$category_three_ids = Db::name('goods_category')->where(['parent_id' => $tid])->getField('id', true);//三级分类id
|
||
$goods_where['cat_id'] = ['in', $category_three_ids];
|
||
}
|
||
$team_where = ['a.status' => 1, 'a.is_lottery' => 0, 'a.deleted' => 0];
|
||
if (count($goods_where) > 0) {
|
||
$goods_ids = Db::name('goods')->where(['is_on_sale' => 1])->where($goods_where)->getField('goods_id', true);
|
||
if (!empty($goods_ids)) {
|
||
$team_where['i.goods_id'] = ['IN', $goods_ids];
|
||
} else {
|
||
$this->ajaxReturn(['status' => 1, 'msg' => '获取成功', 'result' => '']);
|
||
}
|
||
}
|
||
$TeamGoodsItem = new TeamGoodsItem();
|
||
$team_goods_items = $TeamGoodsItem->alias('i')->join('__TEAM_ACTIVITY__ a', 'a.team_id = i.team_id')->with([
|
||
'goods' => function ($query) {
|
||
$query->field('goods_id,goods_name,shop_price');
|
||
},
|
||
'specGoodsPrice' => function ($query) {
|
||
$query->field('item_id,price');
|
||
}])->where($team_where)->group('i.goods_id')->order('a.team_id desc')->page($p, 10)->select();
|
||
$this->ajaxReturn(['status' => 1, 'msg' => '获取成功', 'result' => $team_goods_items]);
|
||
}
|
||
|
||
public function info()
|
||
{
|
||
$team_id = input('team_id/d');
|
||
if (empty($team_id)) {
|
||
$this->error('参数错误', U('Mobile/Team/index'));
|
||
}
|
||
$TeamActivity = new TeamActivity();
|
||
$team_activity = $TeamActivity->where('team_id', $team_id)->find();
|
||
if (empty($team_activity)) {
|
||
$this->error('该商品拼团活动不存在或者已被删除', U('Mobile/Team/index'));
|
||
}
|
||
if (empty($team_activity['goods']) || $team_activity['goods']['is_on_sale'] == 0) {
|
||
$this->error('此商品不存在或者已下架', U('Mobile/Team/index'));
|
||
}
|
||
$user_id = cookie('user_id');
|
||
if ($user_id) {
|
||
$collect = Db::name('goods_collect')->where(array("goods_id" => $team_activity['goods_id'], "user_id" => $user_id))->count();
|
||
$this->assign('collect', $collect);
|
||
}
|
||
$this->assign('team_activity', $team_activity);
|
||
return $this->fetch();
|
||
}
|
||
|
||
public function ajaxCheckTeam()
|
||
{
|
||
$item_id = input('item_id/d', 0);
|
||
$goods_id = input('goods_id/d');
|
||
if (empty($goods_id)) {
|
||
$this->ajaxReturn(['status' => 0, 'msg' => '参数错误']);
|
||
}
|
||
$TeamGoodsItem = new TeamGoodsItem();
|
||
$team_goods_item = $TeamGoodsItem->with('team_activity,specGoodsPrice,goods')->where(['goods_id' => $goods_id, 'item_id' => $item_id, 'deleted' => 0])->find();
|
||
if (empty($team_goods_item) || empty($team_goods_item['team_activity'])) {
|
||
$this->ajaxReturn(['status' => 0, 'msg' => '该商品拼团活动不存在或者已被删除']);
|
||
}
|
||
if (empty($team_goods_item['goods'])) {
|
||
$this->ajaxReturn(['status' => 0, 'msg' => '此商品不存在或者已下架']);
|
||
}
|
||
$team_goods_item = $team_goods_item->append(['team_activity' => ['bd_url', 'front_status_desc', 'bd_pic']])->toArray();
|
||
$this->ajaxReturn(['status' => 1, 'msg' => '此商品拼团活动可以购买', 'result' => ['team_goods_item' => $team_goods_item]]);
|
||
|
||
}
|
||
|
||
public function ajaxTeamFound()
|
||
{
|
||
$goods_id = input('goods_id');
|
||
$TeamActivity = new TeamActivity();
|
||
$TeamFound = new TeamFound();
|
||
$team_ids = $TeamActivity->where(['goods_id' => $goods_id, 'status' => 1, 'is_lottery' => 0, 'deleted' => 0])->getField('team_id', true);
|
||
//活动正常,抽奖团未开奖才获取商品拼团活动拼单
|
||
if (count($team_ids) > 0) {
|
||
$teamFounds = $TeamFound->with('order,teamActivity')->where(['team_id' => ['IN', $team_ids], 'status' => 1])->order('found_id desc')->select();
|
||
if ($teamFounds) {
|
||
$teamFounds = collection($teamFounds)->append(['surplus'])->toArray();
|
||
}
|
||
$this->ajaxReturn(['status' => 1, 'msg' => '获取成功', 'result' => ['teamFounds' => $teamFounds]]);
|
||
} else {
|
||
$this->ajaxReturn(['status' => 0, 'msg' => '没有相关记录', 'result' => []]);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 下单
|
||
*/
|
||
public function addOrder()
|
||
{
|
||
$goods_id = input('goods_id/d');
|
||
$item_id = input('item_id/d', 0);
|
||
$goods_num = input('goods_num/d');
|
||
$found_id = input('found_id/d');//拼团id,有此ID表示是团员参团,没有表示团长开团
|
||
if ($this->user_id == 0) {
|
||
$this->ajaxReturn(['status' => -101, 'msg' => '购买拼团商品必须先登录', 'result' => ['url' => U('User/login')]]);
|
||
}
|
||
if (empty($goods_num)) {
|
||
$this->ajaxReturn(['status' => 0, 'msg' => '至少购买一份', 'result' => '']);
|
||
}
|
||
$team = new \app\common\logic\team\Team();
|
||
$team->setUserById($this->user_id);
|
||
$team->setTeamGoodsItemById($goods_id, $item_id);
|
||
$team->setTeamFoundById($found_id);
|
||
$team->setBuyNum($goods_num);
|
||
try {
|
||
$team->buy();
|
||
$goods = $team->getTeamBuyGoods();
|
||
$goodsList[0] = $goods;
|
||
$pay = new Pay();
|
||
$pay->setUserId($this->user_id);
|
||
$pay->payGoodsList($goodsList);
|
||
$placeOrder = new PlaceOrder($pay);
|
||
$placeOrder->addTeamOrder($team);
|
||
$order = $placeOrder->getOrder();
|
||
$team->log($order);
|
||
$this->ajaxReturn(['status' => 1, 'msg' => '提交拼团订单成功', 'result' => ['order_id' => $order['order_id']]]);
|
||
} catch (TpshopException $t) {
|
||
$error = $t->getErrorArr();
|
||
$this->ajaxReturn($error);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 结算页
|
||
* @return mixed
|
||
*/
|
||
public function order()
|
||
{
|
||
$order_id = input('order_id/d', 0);
|
||
if (empty($this->user_id)) {
|
||
$this->redirect("User/login");
|
||
exit;
|
||
}
|
||
$Order = new Order();
|
||
$OrderGoods = new OrderGoods();
|
||
$setRedirectUrl = new UsersLogic();
|
||
$order = $Order->where(['order_id' => $order_id, 'user_id' => $this->user_id])->find();
|
||
if (empty($order)) {
|
||
$this->error('订单不存在或者已取消', U("Mobile/Order/order_list"));
|
||
}
|
||
$setRedirectUrl->orderPageRedirectUrl($_SERVER['REQUEST_URI'], $order_id);
|
||
|
||
$order_goods = $OrderGoods->with('goods')->where(['order_id' => $order_id])->find();
|
||
// 如果已经支付过的订单直接到订单详情页面. 不再进入支付页面
|
||
if ($order['pay_status'] == 1) {
|
||
$order_detail_url = U("Mobile/Order/order_detail", array('id' => $order_id));
|
||
$this->redirect($order_detail_url);
|
||
}
|
||
if ($order['order_status'] == 3) { //订单已经取消
|
||
$this->error('订单已取消', U("Mobile/Order/order_list"));
|
||
}
|
||
//微信浏览器
|
||
if (strstr($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')) {
|
||
$plugin_where = ['type' => 'payment', 'status' => 1, 'code' => 'weixin'];
|
||
} else {
|
||
$plugin_where = ['type' => 'payment', 'status' => 1, 'scene' => 1];
|
||
}
|
||
$pluginList = Db::name('plugin')->where($plugin_where)->select();
|
||
$paymentList = convert_arr_key($pluginList, 'code');
|
||
//不支持货到付款
|
||
foreach ($paymentList as $key => $val) {
|
||
$val['config_value'] = unserialize($val['config_value']);
|
||
//判断当前浏览器显示支付方式
|
||
if (($key == 'weixin' && !is_weixin()) || ($key == 'alipayMobile' && is_weixin())) {
|
||
unset($paymentList[$key]);
|
||
}
|
||
if ($key == 'weixin' && is_weixin()) {
|
||
$paymentList[$key]['icon'] = 'app_' . $paymentList[$key]['icon'];
|
||
}
|
||
}
|
||
//订单没有使用过优惠券
|
||
if ($order['coupon_price'] <= 0) {
|
||
$couponLogic = new CouponLogic();
|
||
$userCouponList = $couponLogic->getUserAbleCouponList($this->user_id, [$order_goods['goods_id']], [$order_goods['goods']['cat_id']]);//用户可用的优惠券列表
|
||
$team = new \app\common\logic\team\Team();
|
||
$team->setOrder($order);
|
||
$userCartCouponList = $team->getCouponOrderList($userCouponList);
|
||
$order_can_use_coupon_num = $team->getOrderCanUseCouponNum();
|
||
$this->assign('userCartCouponList', $userCartCouponList);
|
||
$this->assign('order_can_use_coupon_num', $order_can_use_coupon_num);
|
||
}
|
||
$this->assign('paymentList', $paymentList);
|
||
$this->assign('order', $order);
|
||
$this->assign('order_goods', $order_goods);
|
||
return $this->fetch();
|
||
}
|
||
|
||
/**
|
||
* 获取订单详情
|
||
*/
|
||
public function getOrderInfo()
|
||
{
|
||
$order_id = input('order_id/d');
|
||
$goods_num = input('goods_num/d');
|
||
$coupon_id = input('coupon_id/d');
|
||
$address_id = input('address_id/d');
|
||
$user_money = input('user_money/f');
|
||
$pay_points = input('pay_points/d');
|
||
$pay_pwd = trim(input("pay_pwd")); // 支付密码
|
||
$user_note = trim(input("user_note")); // 用户备注
|
||
$act = input('post.act', '');
|
||
if (empty($this->user_id)) {
|
||
$this->ajaxReturn(['status' => 0, 'msg' => '登录超时', 'result' => ['url' => U("User/login")]]);
|
||
}
|
||
if (empty($order_id)) {
|
||
$this->ajaxReturn(['status' => 0, 'msg' => '参数错误', 'result' => []]);
|
||
}
|
||
try {
|
||
$teamOrder = new TeamOrder($this->user_id, $order_id);
|
||
$teamOrder->changNum($goods_num);//更改数量
|
||
$teamOrder->pay();//获取订单结账信息
|
||
$teamOrder->useUserAddressById($address_id);//设置配送地址
|
||
$teamOrder->useCouponById($coupon_id);//使用优惠券
|
||
$teamOrder->useUserMoney($user_money);//使用余额
|
||
$teamOrder->usePayPoints($pay_points, "mobile");//使用积分
|
||
$order = $teamOrder->getOrder();//获取订单信息
|
||
$orderGoods = $teamOrder->getOrderGoods();//获取订单商品信息
|
||
if ($act == 'submit_order') {
|
||
$teamOrder->setUserNote($user_note);//设置用户备注
|
||
$teamOrder->setPayPsw($pay_pwd);//设置支付密码
|
||
$teamOrder->submit();//确认订单
|
||
$this->ajaxReturn(['status' => 1, 'msg' => '提交成功', 'result' => ['order_amount' => $order['order_amount']]]);
|
||
} else {
|
||
$couponLogic = new CouponLogic();
|
||
$userCouponList = $couponLogic->getUserAbleCouponList($this->user_id, [$orderGoods['goods_id']], [$orderGoods['goods']['cat_id']]);//用户可用的优惠券列表
|
||
$team = new \app\common\logic\team\Team();
|
||
$team->setOrder($order);
|
||
$userCartCouponList = $team->getCouponOrderList($userCouponList);
|
||
$result = [
|
||
'order' => $order,
|
||
'order_goods' => $orderGoods,
|
||
'couponList' => $userCartCouponList
|
||
];
|
||
$this->ajaxReturn(['status' => 1, 'msg' => '计算成功', 'result' => $result]);
|
||
}
|
||
} catch (TpshopException $t) {
|
||
$error = $t->getErrorArr();
|
||
$this->ajaxReturn($error);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 拼团分享页
|
||
* @return mixed
|
||
*/
|
||
public function found()
|
||
{
|
||
$found_id = input('id/d');
|
||
if (empty($found_id)) {
|
||
$this->error('参数错误', U('Mobile/Team/index'));
|
||
}
|
||
|
||
$team = new \app\common\logic\team\Team();
|
||
$team->setTeamFoundById($found_id);
|
||
$teamFound = $team->getTeamFound();
|
||
$teamFollow = $teamFound->teamFollow()->where('status','IN', [1,2])->select();
|
||
$this->assign('teamFollow', $teamFollow);//团员
|
||
$this->assign('team', $teamFound->teamActivity);//活动
|
||
$this->assign('teamFound', $teamFound);//团长
|
||
return $this->fetch();
|
||
}
|
||
|
||
public function ajaxGetMore()
|
||
{
|
||
$p = input('p/d', 0);
|
||
$TeamGoodsItem = new TeamGoodsItem();
|
||
$team_goods_items = $TeamGoodsItem->with('goods')->alias('i')->join('__TEAM_ACTIVITY__ a', 'a.team_id = i.team_id')
|
||
->where(['a.status' => 1, 'a.deleted' => 0])->page($p, 4)->group('i.goods_id')->order(['a.is_recommend' => 'desc', 'a.sort' => 'desc'])->select();
|
||
if (empty($team_goods_items)) {
|
||
$this->ajaxReturn(['status' => 0, 'msg' => '已显示完所有记录']);
|
||
} else {
|
||
$result = collection($team_goods_items)->append(['team_activity' => ['virtual_sale_num']])->toArray();
|
||
$this->ajaxReturn(['status' => 1, 'msg' => '', 'result' => $result]);
|
||
}
|
||
}
|
||
|
||
public function lottery()
|
||
{
|
||
$team_id = input('team_id/d', 0);
|
||
$team_lottery = Db::name('team_lottery')->where('team_id', $team_id)->select();
|
||
$TeamActivity = new TeamActivity();
|
||
$team = $TeamActivity->where('team_id', $team_id)->find();
|
||
$this->assign('team', $team);
|
||
$this->assign('team_lottery', $team_lottery);
|
||
return $this->fetch();
|
||
}
|
||
|
||
} |