This commit is contained in:
youda 2025-04-12 17:34:41 +08:00
parent c56dc553b1
commit 3eec765f4c
4 changed files with 201 additions and 118 deletions

View File

@ -16,6 +16,7 @@ use app\common\model\User;
use app\common\model\Order; use app\common\model\Order;
use app\common\model\OrderList; use app\common\model\OrderList;
use app\common\model\UserVip; use app\common\model\UserVip;
use app\common\service\GoodsService;
use think\facade\Db; use think\facade\Db;
use \think\Request; use \think\Request;
use app\common\model\CouponReceive as CouponReceiveModel; use app\common\model\CouponReceive as CouponReceiveModel;
@ -200,11 +201,12 @@ class Goods extends Base
*/ */
public function goodsdetail() public function goodsdetail()
{ {
$user_info = $this->getUser(); $user_id = $this->getUserId();
$goods_id = request()->param('goods_id/d', 0); $goods_id = request()->param('goods_id/d', 0);
$goods_num = request()->param('goods_num/d', 0); $goods_num = request()->param('goods_num/d', 0);
$goods = Goodsmodel::field('id,title,imgurl_detail,price,stock,sale_stock,lock_is,type,status,sale_time,is_shou_zhe,quanju_xiangou') $goods = Goodsmodel::field('id,title,imgurl_detail,price,stock,sale_stock,lock_is,type,status,sale_time,is_shou_zhe,quanju_xiangou,daily_xiangou,quanju_xiangou')
->where(['id' => $goods_id]) ->where(['id' => $goods_id])
->find(); ->find();
if (!$goods) { if (!$goods) {
@ -240,13 +242,9 @@ class Goods extends Base
} }
} }
$goods['num'] = $goods_num; $goods['num'] = $goods_num;
#是否收藏 $collection_is = 0;
$collection_is = Collect::field('id')
->where(['user_id' => $user_info['id']])
->where(['goods_id' => $goods_id])
->where(['num' => $goods_num])
->find();
$goods['collection_is'] = $collection_is ? 1 : 0;
#本箱子余量 #本箱子余量
$goods_surplus = GoodsList::field('sum(`stock`) as stock, sum(`surplus_stock`) as surplus_stock') $goods_surplus = GoodsList::field('sum(`stock`) as stock, sum(`surplus_stock`) as surplus_stock')
->where('goods_id', '=', $goods_id) ->where('goods_id', '=', $goods_id)
@ -326,9 +324,9 @@ class Goods extends Base
->find(); ->find();
if ($goods['lock_is'] && $goods_lock_info) { if ($goods['lock_is'] && $goods_lock_info) {
$goods_lock_surplus_time = $goods_lock_info['endtime']; $goods_lock_surplus_time = $goods_lock_info['endtime'];
$user_info = User::field('nickname,headimg')->where(['id' => $goods_lock_info['user_id']])->find(); $user_info_lock = User::field('nickname,headimg')->where(['id' => $goods_lock_info['user_id']])->find();
$goods_lock_user_nickname = $user_info['nickname']; $goods_lock_user_nickname = $user_info_lock['nickname'];
$goods_lock_user_headimg = imageUrl($user_info['headimg']); $goods_lock_user_headimg = imageUrl($user_info_lock['headimg']);
} }
$lock_info = [ $lock_info = [
'lock_is' => $goods['lock_is'], 'lock_is' => $goods['lock_is'],
@ -363,28 +361,28 @@ class Goods extends Base
$config = getConfig('base'); $config = getConfig('base');
$goods['three_time'] = $config['three_time']; $goods['three_time'] = $config['three_time'];
$goods['five_time'] = $config['five_time']; $goods['five_time'] = $config['five_time'];
$xiangou = null;
$quanju_xiangou = $goods['quanju_xiangou']; $goodsService = new GoodsService();
if ($quanju_xiangou > 0 && $goods['type'] == 6) { $limitInfo = $goodsService->getPurchaseLimitInfo($user_id, $goods_num, $goods, self::$shang_count_id);
//$user_info if ($user_id > 0) {
$user_xiangou_count = OrderList::field('id')->where('goods_id', '=', $goods_id) #是否收藏
->where('num', '=', $goods_num) $collection_is = Collect::field('id')
->where('shang_id', 'between', self::$shang_count_id) ->where(['user_id' => $user_id])
->where('order_type', '=', $goods['type']) ->where(['goods_id' => $goods_id])
->where('user_id', '=', $user_info['id']) ->where(['num' => $goods_num])
->count(); ->find();
$xiangou = [ $goods['collection_is'] = $collection_is ? 1 : 0;
'quanju_xiangou' => $quanju_xiangou,
'user_xiangou_count' => $user_xiangou_count,
];
} }
$new_data = [ $new_data = [
'goods' => $goods, 'goods' => $goods,
'lock_info' => $lock_info, 'lock_info' => $lock_info,
'join_user' => $new_join_user, 'join_user' => $new_join_user,
'join_count' => $join_count, 'join_count' => $join_count,
'goodslist' => $goodslist, 'goodslist' => $goodslist,
'xuangou' => $xiangou 'limitInfo' => $limitInfo
]; ];
return $this->renderSuccess("请求成功", $new_data); return $this->renderSuccess("请求成功", $new_data);
@ -459,7 +457,7 @@ class Goods extends Base
#概率 #概率
if ($surplus_stock_1 > 0) { if ($surplus_stock_1 > 0) {
//计算概率,保留两位小数 //计算概率,保留两位小数
$pro_num_1 = removeTrailingZeros(round(($surplus_stock_1 / $goodsList_surplus_stock) * 100, 2) ); $pro_num_1 = removeTrailingZeros(round(($surplus_stock_1 / $goodsList_surplus_stock) * 100, 2));
$pro_1 = '概率:' . $pro_num_1 . '%'; $pro_1 = '概率:' . $pro_num_1 . '%';
} else { } else {
$pro_1 = '概率:' . 0 . '%'; $pro_1 = '概率:' . 0 . '%';
@ -671,7 +669,7 @@ class Goods extends Base
$coupon_id = request()->param('coupon_id/d', 0); //优惠券 $coupon_id = request()->param('coupon_id/d', 0); //优惠券
#盒子信息 #盒子信息
$goods = Goodsmodel::field('title,imgurl_detail,type,price,status,is_shou_zhe,quanju_xiangou,lock_is,choujiang_xianzhi,lock_time,daily_xiangou')->where(['id' => $goods_id]) $goods = Goodsmodel::field('id,title,imgurl_detail,type,price,status,is_shou_zhe,quanju_xiangou,lock_is,choujiang_xianzhi,lock_time,daily_xiangou')->where(['id' => $goods_id])
->find(); ->find();
if (!$goods) { if (!$goods) {
return $this->renderError("盒子不存在"); return $this->renderError("盒子不存在");
@ -679,32 +677,32 @@ class Goods extends Base
if ($goods['status'] != 1) { if ($goods['status'] != 1) {
return $this->renderError("盒子已下架"); return $this->renderError("盒子已下架");
} }
// 获取服务实例 // 获取服务实例
$calculator = new \app\common\service\PaymentCalculator(); $calculator = new \app\common\service\PaymentCalculator();
// 验证抽奖限制 // 验证抽奖限制
$validationResult = $calculator->validateDrawRestrictions($user, $goods, $prize_num); $validationResult = $calculator->validateDrawRestrictions($user, $goods, $prize_num);
if ($validationResult['status'] == 0) { if ($validationResult['status'] == 0) {
return $this->renderError($validationResult['msg']); return $this->renderError($validationResult['msg']);
} }
// 计算订单金额 // 计算订单金额
$result = $calculator->calculateOrderAmount( $result = $calculator->calculateOrderAmount(
$user, $user,
$goods_id, $goods_id,
$prize_num, $prize_num,
$use_money_is, $use_money_is,
$use_integral_is, $use_integral_is,
$use_money2_is, $use_money2_is,
$coupon_id, $coupon_id,
$goods $goods
); );
if ($result['status'] == 0) { if ($result['status'] == 0) {
return $this->renderError($result['msg']); return $this->renderError($result['msg']);
} }
return $this->renderSuccess("请求成功", $result); return $this->renderSuccess("请求成功", $result);
} }
@ -727,7 +725,7 @@ class Goods extends Base
$coupon_id = request()->param('coupon_id/d', 0); //优惠券 $coupon_id = request()->param('coupon_id/d', 0); //优惠券
#盒子信息 #盒子信息
$goods = Goodsmodel::field('title,imgurl_detail,type,price,status,is_shou_zhe,quanju_xiangou,lock_is,choujiang_xianzhi,lock_time,flw_start_time,flw_end_time,daily_xiangou')->where(['id' => $goods_id]) $goods = Goodsmodel::field('id,title,imgurl_detail,type,price,status,is_shou_zhe,quanju_xiangou,lock_is,choujiang_xianzhi,lock_time,flw_start_time,flw_end_time,daily_xiangou')->where(['id' => $goods_id])
->find(); ->find();
if (!$goods) { if (!$goods) {
return $this->renderError("盒子不存在"); return $this->renderError("盒子不存在");
@ -747,7 +745,7 @@ class Goods extends Base
if (RegInt($num)) { if (RegInt($num)) {
return $this->renderError("箱号选择错误"); return $this->renderError("箱号选择错误");
} }
// 使用PaymentCalculator验证抽奖限制限购、消费门槛等 // 使用PaymentCalculator验证抽奖限制限购、消费门槛等
$paymentCalculator = new \app\common\service\PaymentCalculator(); $paymentCalculator = new \app\common\service\PaymentCalculator();
$validationResult = $paymentCalculator->validateDrawRestrictions($user, $goods, $prize_num); $validationResult = $paymentCalculator->validateDrawRestrictions($user, $goods, $prize_num);
@ -815,20 +813,20 @@ class Goods extends Base
return $this->renderError("剩余数量不足,请刷新重试"); return $this->renderError("剩余数量不足,请刷新重试");
} }
} }
// 使用PaymentCalculator计算订单金额和支付方式 // 使用PaymentCalculator计算订单金额和支付方式
$paymentResult = $paymentCalculator->calculateOrderAmount( $paymentResult = $paymentCalculator->calculateOrderAmount(
$user, $user,
$goods_id, $goods_id,
$prize_num, $prize_num,
$use_money_is, $use_money_is,
$use_integral_is, $use_integral_is,
$use_money2_is, $use_money2_is,
$coupon_id, $coupon_id,
$goods, $goods,
$goods_extend $goods_extend
); );
if ($paymentResult['status'] == 0) { if ($paymentResult['status'] == 0) {
return $this->renderError($paymentResult['msg']); return $this->renderError($paymentResult['msg']);
} }
@ -1281,7 +1279,7 @@ class Goods extends Base
// 删除现有的商品列表数据 // 删除现有的商品列表数据
GoodsList::where('goods_id', $goodsId)->delete(); GoodsList::where('goods_id', $goodsId)->delete();
// 删除现有的扩展表数据 // 删除现有的扩展表数据
GoodsExtend::where('goods_id', $goodsId)->delete(); GoodsExtend::where('goods_id', $goodsId)->delete();
} else { } else {
@ -1289,12 +1287,12 @@ class Goods extends Base
$goods['async_date'] = date('Y-m-d H:i:s'); $goods['async_date'] = date('Y-m-d H:i:s');
$goods['addtime'] = time(); $goods['addtime'] = time();
$goods['update_time'] = time(); $goods['update_time'] = time();
$goods['king_user_id'] =0; $goods['king_user_id'] = 0;
$goodsModel = new Goodsmodel(); $goodsModel = new Goodsmodel();
$goodsModel->save($goods); $goodsModel->save($goods);
$goodsId = $goodsModel->id; $goodsId = $goodsModel->id;
} }
// 处理盒子扩展数据 // 处理盒子扩展数据
if ($goodsExtendData) { if ($goodsExtendData) {
if (isset($goodsExtendData['id'])) { if (isset($goodsExtendData['id'])) {
@ -1334,7 +1332,7 @@ class Goods extends Base
} }
$listItem['goods_id'] = $goodsId; $listItem['goods_id'] = $goodsId;
// 处理奖励ID // 处理奖励ID
if (!empty($oldRewardId)) { if (!empty($oldRewardId)) {
$newRewardId = 'MHHZ' . date('YmdHis') . mt_rand(1000, 9999); $newRewardId = 'MHHZ' . date('YmdHis') . mt_rand(1000, 9999);
@ -1366,7 +1364,7 @@ class Goods extends Base
if (isset($idMapping[$originalParentId])) { if (isset($idMapping[$originalParentId])) {
$listItem['goods_list_id'] = $idMapping[$originalParentId]; $listItem['goods_list_id'] = $idMapping[$originalParentId];
} }
// 处理奖励ID // 处理奖励ID
if (!empty($oldRewardId)) { if (!empty($oldRewardId)) {
$newRewardId = 'MHHZ' . date('YmdHis') . mt_rand(1000, 9999); $newRewardId = 'MHHZ' . date('YmdHis') . mt_rand(1000, 9999);
@ -1378,7 +1376,7 @@ class Goods extends Base
$goodsListModel = new GoodsList(); $goodsListModel = new GoodsList();
$goodsListModel->save($listItem); $goodsListModel->save($listItem);
} }
// 处理奖励数据 // 处理奖励数据
foreach ($rewardsData as $reward) { foreach ($rewardsData as $reward) {
$oldRewardId = $reward['reward_id']; $oldRewardId = $reward['reward_id'];

View File

@ -19,7 +19,7 @@ use think\facade\Db;
use app\common\model\CouponReceive as CouponReceiveModel; use app\common\model\CouponReceive as CouponReceiveModel;
use app\common\model\GoodsExtend; use app\common\model\GoodsExtend;
use \think\Request; use \think\Request;
use app\common\service\GoodsService;
/** /**
* 无限赏 * 无限赏
*/ */
@ -32,9 +32,9 @@ class Infinite extends Base
*/ */
public function infinite_goodsdetail(Request $request) public function infinite_goodsdetail(Request $request)
{ {
$user_info = $this->getUser(); $user_id = $this->getUserId();
$goods_id = request()->param('goods_id/d', 0); $goods_id = request()->param('goods_id/d', 0);
$goods = Goodsmodel::field('id,title,imgurl_detail,price,stock,sale_stock,lock_is,type,status,addtime,rage_is,rage,item_card_id,lingzhu_is,is_shou_zhe') $goods = Goodsmodel::field('id,title,imgurl_detail,price,stock,sale_stock,lock_is,type,status,addtime,rage_is,rage,item_card_id,lingzhu_is,is_shou_zhe,daily_xiangou,quanju_xiangou')
->where(['id' => $goods_id]) ->where(['id' => $goods_id])
->find(); ->find();
if (!$goods) { if (!$goods) {
@ -70,24 +70,6 @@ class Infinite extends Base
} }
} }
#一发
$goods['price_one'] = (bcmul("{$goods['price']}", "1", 2)) * 1;
#三发
$goods['price_three'] = (bcmul("{$goods['price']}", "3", 2)) * 1;
#五连发
$goods['price_five'] = (bcmul("{$goods['price']}", "5", 2)) * 1;
#十连发
$goods['price_ten'] = (bcmul("{$goods['price']}", "10", 2)) * 1;
#五十发
$goods['price_five_ten'] = (bcmul("{$goods['price']}", "50", 2)) * 1;
#是否收藏
$collection_is = Collect::field('id')
->where(['user_id' => $user_info['id']])
->where(['goods_id' => $goods_id])
->where(['num' => 0])
->find();
$goods['collection_is'] = $collection_is ? 1 : 0;
if ($goods['type'] == 7) { if ($goods['type'] == 7) {
$goods['need_draw_num'] = 1; $goods['need_draw_num'] = 1;
} }
@ -96,7 +78,6 @@ class Infinite extends Base
->append(['userinfo']) ->append(['userinfo'])
->where('goods_id', '=', $goods_id) ->where('goods_id', '=', $goods_id)
->where('order_type', '=', $goods['type']) ->where('order_type', '=', $goods['type'])
->order('id desc') ->order('id desc')
->group('user_id') ->group('user_id')
->limit(5) ->limit(5)
@ -160,13 +141,29 @@ class Infinite extends Base
} elseif ($goods['type'] == 17) { } elseif ($goods['type'] == 17) {
$type1 = 8; $type1 = 8;
} }
$draw_num = 0;
$goodsService = new GoodsService();
$limitInfo = $goodsService->getPurchaseLimitInfo($user_id, 0, $goods, self::$shang_prize_id);
if ($user_id > 0) {
//是否收藏
$collection_is = Collect::field('id')
->where(['user_id' => $user_id])
->where(['goods_id' => $goods_id])
->where(['num' => 0])
->find();
$goods['collection_is'] = $collection_is ? 1 : 0;
$user_info = $this->getUser();
$draw_num = $user_info['draw_num'];
$limitInfo['user_test'] = $user_info['istest'];
}
$new_data = [ $new_data = [
'goods' => $goods, 'goods' => $goods,
'goodslist' => $goodslist, 'goodslist' => $goodslist,
'goods_list' => $goods_list, 'goods_list' => $goods_list,
'draw_num' => $user_info['draw_num'], #优惠券的数量 'draw_num' => $draw_num, #优惠券的数量
'danye_id' => $type1 'danye_id' => $type1,
'limitInfo' => $limitInfo
]; ];
return $this->renderSuccess("请求成功", $new_data); return $this->renderSuccess("请求成功", $new_data);
} }
@ -351,7 +348,7 @@ class Infinite extends Base
$where[] = ['goods_id', '=', $goods_id]; $where[] = ['goods_id', '=', $goods_id];
$where[] = ['num', '=', 0]; $where[] = ['num', '=', 0];
$where[] = ['user_id', '=', $user_id]; $where[] = ['user_id', '=', $user_id];
$data = OrderList::field('user_id,goodslist_title,goodslist_imgurl,addtime') $data = OrderList::field('user_id,goodslist_title,goodslist_imgurl,addtime')
->where($where) ->where($where)
->where('source', '=', 1) ->where('source', '=', 1)
@ -361,7 +358,7 @@ class Infinite extends Base
$item['goodslist_imgurl'] = imageUrl($item['goodslist_imgurl']); $item['goodslist_imgurl'] = imageUrl($item['goodslist_imgurl']);
return $item; return $item;
}); });
return $this->renderSuccess("请求成功", $data); return $this->renderSuccess("请求成功", $data);
} }
@ -387,32 +384,32 @@ class Infinite extends Base
if ($goods['status'] != 1) { if ($goods['status'] != 1) {
return $this->renderError("盒子已下架"); return $this->renderError("盒子已下架");
} }
// 获取服务实例 // 获取服务实例
$calculator = new \app\common\service\PaymentCalculator(); $calculator = new \app\common\service\PaymentCalculator();
// 验证抽奖限制 // 验证抽奖限制
$validationResult = $calculator->validateDrawRestrictions($user, $goods, $prize_num); $validationResult = $calculator->validateDrawRestrictions($user, $goods, $prize_num);
if ($validationResult['status'] == 0) { if ($validationResult['status'] == 0) {
return $this->renderError($validationResult['msg']); return $this->renderError($validationResult['msg']);
} }
// 计算订单金额 // 计算订单金额
$result = $calculator->calculateOrderAmount( $result = $calculator->calculateOrderAmount(
$user, $user,
$goods_id, $goods_id,
$prize_num, $prize_num,
$use_money_is, $use_money_is,
$use_integral_is, $use_integral_is,
$use_money2_is, $use_money2_is,
$coupon_id, $coupon_id,
$goods $goods
); );
if ($result['status'] == 0) { if ($result['status'] == 0) {
return $this->renderError($result['msg']); return $this->renderError($result['msg']);
} }
return $this->renderSuccess("请求成功", $result); return $this->renderSuccess("请求成功", $result);
} }
@ -455,7 +452,7 @@ class Infinite extends Base
if (!in_array($goods['type'], [2, 8, 9, 10, 16, 17])) { if (!in_array($goods['type'], [2, 8, 9, 10, 16, 17])) {
return $this->renderError("非法请求"); return $this->renderError("非法请求");
} }
// 使用PaymentCalculator验证抽奖限制限购、消费门槛等 // 使用PaymentCalculator验证抽奖限制限购、消费门槛等
$paymentCalculator = new \app\common\service\PaymentCalculator(); $paymentCalculator = new \app\common\service\PaymentCalculator();
$validationResult = $paymentCalculator->validateDrawRestrictions($user, $goods, $prize_num); $validationResult = $paymentCalculator->validateDrawRestrictions($user, $goods, $prize_num);
@ -475,21 +472,21 @@ class Infinite extends Base
$where[] = ['real_pro', '>', 0]; $where[] = ['real_pro', '>', 0];
$where[] = ['shang_id', 'between', self::$shang_prize_id]; $where[] = ['shang_id', 'between', self::$shang_prize_id];
} }
#奖品信息 #奖品信息
if ($goods['type'] == 9 && $is_mibao == 1) { if ($goods['type'] == 9 && $is_mibao == 1) {
//秘宝池 //秘宝池
$where[] = ['lian_ji_type', '=', 1]; $where[] = ['lian_ji_type', '=', 1];
return $this->renderError('请求错误'); return $this->renderError('请求错误');
} }
$is_goodslist = GoodsList::field('id') $is_goodslist = GoodsList::field('id')
->where($where) ->where($where)
->find(); ->find();
if (!$is_goodslist) { if (!$is_goodslist) {
return $this->renderError('暂无奖品信息'); return $this->renderError('暂无奖品信息');
} }
if ($goods['type'] == 9) { if ($goods['type'] == 9) {
$prize_num = intval($prize_num); $prize_num = intval($prize_num);
if ($prize_num > 20) { if ($prize_num > 20) {
@ -508,21 +505,21 @@ class Infinite extends Base
// 使用PaymentCalculator计算订单金额和支付方式 // 使用PaymentCalculator计算订单金额和支付方式
$paymentResult = $paymentCalculator->calculateOrderAmount( $paymentResult = $paymentCalculator->calculateOrderAmount(
$user, $user,
$goods_id, $goods_id,
$prize_num, $prize_num,
$use_money_is, $use_money_is,
$use_integral_is, $use_integral_is,
$use_money2_is, $use_money2_is,
$coupon_id, $coupon_id,
$goods, $goods,
$goods_extend $goods_extend
); );
if ($paymentResult['status'] == 0) { if ($paymentResult['status'] == 0) {
return $this->renderError($paymentResult['msg']); return $this->renderError($paymentResult['msg']);
} }
$redis = (new \app\common\server\RedisHelper())->getRedis(); $redis = (new \app\common\server\RedisHelper())->getRedis();
$redis_key = "kpw_infinite_orderbuy" . '_' . $user['id']; $redis_key = "kpw_infinite_orderbuy" . '_' . $user['id'];
$redis_key_info = $redis->get($redis_key); $redis_key_info = $redis->get($redis_key);
@ -531,13 +528,13 @@ class Infinite extends Base
} else { } else {
$redis->set($redis_key, 1, 3); $redis->set($redis_key, 1, 3);
} }
Db::startTrans(); Db::startTrans();
$num = 0; $num = 0;
if ($goods['type'] == 10) { if ($goods['type'] == 10) {
$num = 1; $num = 1;
} }
if ($goods['daily_xiangou'] > 0) { if ($goods['daily_xiangou'] > 0) {
// 查看一天内有没有未支付的订单,未支付的订单要先作废 // 查看一天内有没有未支付的订单,未支付的订单要先作废
$order_info = Order::where('goods_id', '=', $goods_id) $order_info = Order::where('goods_id', '=', $goods_id)
@ -551,10 +548,10 @@ class Infinite extends Base
$order_info->save(); $order_info->save();
} }
} }
$res = []; $res = [];
$order_num = create_order_no('MH_', 'order', 'order_num'); $order_num = create_order_no('MH_', 'order', 'order_num');
#创建订单 #创建订单
$res[] = $order_id = Order::insertGetId([ $res[] = $order_id = Order::insertGetId([
'user_id' => $user['id'], 'user_id' => $user['id'],
@ -584,7 +581,7 @@ class Infinite extends Base
'ad_id' => $ad_id, 'ad_id' => $ad_id,
'click_id' => $user['click_id'] 'click_id' => $user['click_id']
]); ]);
#微信支付金额大于0 #微信支付金额大于0
if ($paymentResult['price'] > 0) { if ($paymentResult['price'] > 0) {
$body = '购买盒子' . $goods['title']; $body = '购买盒子' . $goods['title'];

View File

@ -0,0 +1,87 @@
<?php
namespace app\common\service;
use app\common\model\Goods as GoodsModel;
use app\common\model\Order;
use app\common\model\GoodsExtend;
use app\common\model\CouponReceive as CouponReceiveModel;
use app\common\model\Goods;
use app\common\model\GoodsList;
use app\common\model\OrderList;
/**
* 盒子服务类
*
*/
class GoodsService
{
/**
* 获取商品限购信息
* @param int $userId
* @param int $goodsNum
* @param array $goods
* @param array $shangCountId
* @return array|array{daily_limit: int, global_limit: int, user_daily_purchased: int, user_daily_remaining: int, user_global_purchased: int, user_global_remaining: int}
*/
function getPurchaseLimitInfo(
int $userId,
int $goodsNum,
$goods,
array $shangCountId
): array {
$globalLimit = 0;
$dailyLimit = 0;
// 初始化返回数据
$limitInfo = [
'global_limit' => $globalLimit, // 全局限购数量
'user_global_purchased' => 0, // 用户已购买总数
'user_global_remaining' => $globalLimit, // 用户剩余可购买总数
'daily_limit' => $dailyLimit, // 每日限购数量
'user_daily_purchased' => 0, // 用户今日已购买数
'user_daily_remaining' => $dailyLimit, // 用户今日剩余可购买数
'user_test' => 0,
];
if ($userId <= 0 || $goods == null) {
return $limitInfo;
}
$goodsId = $goods['id'];
$goodsType = $goods['type'];
$dailyLimit = $goods['daily_xiangou'];
$globalLimit = $goods['quanju_xiangou'];
// 公共查询条件
$commonConditions = [
'goods_id' => $goodsId,
'num' => $goodsNum,
'order_type' => $goodsType,
'user_id' => $userId,
'parent_goods_list_id' => 0
];
// 处理全局限购
if ($globalLimit > 0) {
$userGlobalPurchased = OrderList::field('id')
->where($commonConditions)
->where('shang_id', 'between', $shangCountId)
->count();
$limitInfo['global_limit'] = $globalLimit;
$limitInfo['user_global_purchased'] = $userGlobalPurchased;
$limitInfo['user_global_remaining'] = max(0, $globalLimit - $userGlobalPurchased);
}
// 处理每日限购
if ($dailyLimit > 0) {
$userDailyPurchased = OrderList::field('id')
->where($commonConditions)
->where('shang_id', 'between', $shangCountId)
->where('addtime', '>=', strtotime(date('Y-m-d')))
->count();
$limitInfo['user_daily_purchased'] = $userDailyPurchased;
$limitInfo['user_daily_remaining'] = max(0, $dailyLimit - $userDailyPurchased);
$limitInfo['daily_limit'] = $dailyLimit;
}
return $limitInfo;
}
}

View File

@ -117,7 +117,7 @@ class PaymentCalculator
} else { } else {
$coupon_id = 0; $coupon_id = 0;
} }
}else{ } else {
$coupon_id = 0; $coupon_id = 0;
} }
} else { } else {
@ -323,10 +323,11 @@ class PaymentCalculator
// 验证每日限购 // 验证每日限购
if ($goods['daily_xiangou'] > 0) { if ($goods['daily_xiangou'] > 0) {
$todayMidnight = strtotime('today'); $todayMidnight = strtotime('today');
$goods_id = $goods['id'];
$user_toDay_count = \app\common\model\OrderList::field('id') $user_toDay_count = \app\common\model\OrderList::field('id')
->where('goods_id', '=', $goods['id']) ->where('goods_id', '=', $goods['id'])
->where('user_id', '=', $user_id) ->where('user_id', '=', $user_id)
->where('parent_goods_list_id', '=', 0) // ->where('parent_goods_list_id', '=', 0)
->where('addtime', '>=', $todayMidnight) ->where('addtime', '>=', $todayMidnight)
->count(); ->count();