调整红包余额查询

This commit is contained in:
luofei 2024-01-21 13:52:51 +08:00
parent 0b128503b1
commit 092801fa02
7 changed files with 73 additions and 27 deletions

View File

@ -33,6 +33,7 @@ class StoreActivityOrderDao extends BaseDao
$model->spread_id = $spreadId; $model->spread_id = $spreadId;
$model->pay_price = $groupOrder['pay_price']; $model->pay_price = $groupOrder['pay_price'];
$model->is_first_order = $isFirstOrder; $model->is_first_order = $isFirstOrder;
$model->status = StoreActivityOrder::STATUS_VALID;
$consumptionDetail = StoreConsumptionDetail::where('group_order_id', $groupOrder['group_order_id']) $consumptionDetail = StoreConsumptionDetail::where('group_order_id', $groupOrder['group_order_id'])
->field('group_order_id,sum(amount) amount,sum(pay_price) pay_price,coupon_user_id') ->field('group_order_id,sum(amount) amount,sum(pay_price) pay_price,coupon_user_id')
->find(); ->find();

View File

@ -9,6 +9,7 @@ use app\common\model\store\consumption\StoreConsumptionUser;
use app\common\model\store\StoreActivityOrder; use app\common\model\store\StoreActivityOrder;
use app\common\model\store\StoreActivityUser; use app\common\model\store\StoreActivityUser;
use app\common\model\user\User; use app\common\model\user\User;
use app\common\model\user\UserBill;
class StoreActivityUserDao extends BaseDao class StoreActivityUserDao extends BaseDao
{ {
@ -168,24 +169,45 @@ class StoreActivityUserDao extends BaseDao
/** /**
* 红包获取记录 * 红包获取记录
* @param int $userId * @param int $userId
* @param int $type
* @param int $page
* @param int $limit
* @return array * @return array
* @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException * @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException * @throws \think\db\exception\ModelNotFoundException
*/ */
public function record(int $userId) public function record(int $userId, int $type, int $page, int $limit)
{ {
$consumption = StoreConsumption::whereIn('type', [StoreConsumption::TYPE_OWNER_CONSUMPTION, StoreConsumption::TYPE_PULL_CONSUMPTION])->select()->toArray(); $totalAmount = StoreConsumptionUser::where('uid', $userId)
$record = StoreConsumptionUser::where('uid', $userId) ->whereIn('type', $type)
->whereIn('coupon_id', array_column($consumption, 'coupon_id')) ->where('status', StoreConsumptionUser::STATUS_UNUSED)
->where('status', '>=', StoreConsumptionUser::STATUS_UNUSED) ->sum('balance');
->field('coupon_price,order_amount,create_time') $query = UserBill::where('uid', $userId)
->select(); ->where('category', 'red_pack')
$totalAmount = 0; ->where('type', "red_pack_{$type}");
foreach ($record as $item) { $count = $query->count();
$totalAmount = bcadd($totalAmount, $item['coupon_price'], 2); $record = $query->page($page)->limit($limit)->select();
return ['total_amount' => $totalAmount, 'count' => $count, 'record' => $record];
}
/**
* 红包余额统计
* @param int $userId
* @return array
*/
public function total(int $userId)
{
$totalAmount = StoreConsumptionUser::where('uid', $userId)
->whereIn('type', [StoreConsumptionUser::TYPE_ONE, StoreConsumptionUser::TYPE_TWO])
->where('status', StoreConsumptionUser::STATUS_UNUSED)
->field('SUM(balance) as total_amount,type')
->group('type')
->select()->toArray();
foreach ($totalAmount as &$item) {
$item['type_cn'] = StoreConsumptionUser::TYPE_MAP[$item['type']];
} }
return ['total_amount' => $totalAmount, 'record' => $record]; return $totalAmount;
} }
} }

View File

@ -56,11 +56,6 @@ class CommissionDao
if ($redPack > 0) { if ($redPack > 0) {
$userId = Merchant::where('mer_id', $order['mer_id'])->value('uid'); $userId = Merchant::where('mer_id', $order['mer_id'])->value('uid');
$storeConsumptionDao->send($consumption, $consumption['config']['red_pack_rate'], $userId, $order['order_id'], $order['pay_price'], StoreConsumptionUser::STATUS_UNUSED, StoreConsumptionUser::TYPE_TWO); $storeConsumptionDao->send($consumption, $consumption['config']['red_pack_rate'], $userId, $order['order_id'], $order['pay_price'], StoreConsumptionUser::STATUS_UNUSED, StoreConsumptionUser::TYPE_TWO);
$user = User::where('uid', $userId)->find();
$user->red_pack_balance = bcadd($user->red_pack_balance, $redPack, 2);
if (!$user->save()) {
throw new \Exception('红包余额更新出错');
}
} }
$promotionCode = User::where('uid', $order['uid'])->value('promotion_code'); $promotionCode = User::where('uid', $order['uid'])->value('promotion_code');
if (!empty($promotionCode)) { if (!empty($promotionCode)) {

View File

@ -58,10 +58,10 @@ class StoreConsumptionUserDao extends BaseDao
$activityUser = (new StoreActivityUserDao())->getOne($userId); $activityUser = (new StoreActivityUserDao())->getOne($userId);
$consumption = (new StoreConsumptionDao())->getOne($activityUser['value'] ?? 0); $consumption = (new StoreConsumptionDao())->getOne($activityUser['value'] ?? 0);
//用户没有参加 消费金活动 或 已超过任务完成时间 //用户没有参加 消费金活动 或 已超过任务完成时间
if (empty($consumption['config']) || strtotime('+1 year', $activityUser['create_time']) < time()) { $endTime = $this->getEndTime($activityUser['create_time'] ?? '2024-01-01 00:00:00');
if (empty($consumption['config']) || $endTime < time()) {
return false; return false;
} }
$endTime = strtotime('+1 year', $activityUser['create_time']);
$orderValidAmount = min($groupOrder['pay_price'], $this->maxAmount); $orderValidAmount = min($groupOrder['pay_price'], $this->maxAmount);
$scope = $this->getScope($consumption, $orderValidAmount); $scope = $this->getScope($consumption, $orderValidAmount);
//用户没有达到 消费金活动 任一档次 //用户没有达到 消费金活动 任一档次
@ -70,7 +70,7 @@ class StoreConsumptionUserDao extends BaseDao
} }
Db::startTrans(); Db::startTrans();
try { try {
$isFirstOrder = $this->isFirstOrder($userId, $consumption['start_time'], $endTime); $isFirstOrder = $this->isFirstOrder($userId, $consumption['start_time'], date('Y-m-d H:i:s', $endTime));
$storeActivityOrderDao = new StoreActivityOrderDao(); $storeActivityOrderDao = new StoreActivityOrderDao();
$storeActivityOrder = $storeActivityOrderDao->save($groupOrder, $spreadUserId, $isFirstOrder); $storeActivityOrder = $storeActivityOrderDao->save($groupOrder, $spreadUserId, $isFirstOrder);
if ($consumption['type'] == StoreConsumption::TYPE_OWNER_CONSUMPTION && $storeActivityOrder['status'] == StoreActivityOrder::STATUS_VALID) { if ($consumption['type'] == StoreConsumption::TYPE_OWNER_CONSUMPTION && $storeActivityOrder['status'] == StoreActivityOrder::STATUS_VALID) {
@ -99,14 +99,14 @@ class StoreConsumptionUserDao extends BaseDao
{ {
// 查询推荐人的消费金类型 // 查询推荐人的消费金类型
$spreadActivityUser = (new StoreActivityUserDao())->getOne($spreadUserId); $spreadActivityUser = (new StoreActivityUserDao())->getOne($spreadUserId);
$endTime = $this->getEndTime($spreadActivityUser['create_time'] ?? '2024-01-01 00:00:00');
$spreadConsumption = (new StoreConsumptionDao())->getOne($spreadActivityUser['value'] ?? 0); $spreadConsumption = (new StoreConsumptionDao())->getOne($spreadActivityUser['value'] ?? 0);
// 查询推荐人满足条件的有效订单 // 查询推荐人满足条件的有效订单
$spreadGroupOrder = StoreActivityOrder::where('user_id', $spreadUserId)->where('status', StoreActivityOrder::STATUS_VALID)->find(); $spreadGroupOrder = StoreActivityOrder::where('user_id', $spreadUserId)->where('status', StoreActivityOrder::STATUS_VALID)->find();
if (empty($spreadGroupOrder) || empty($spreadConsumption['config']) || empty($spreadActivityUser) || strtotime('+1 year', $spreadActivityUser['create_time']) < time()) { if (empty($spreadGroupOrder) || empty($spreadConsumption['config']) || empty($spreadActivityUser) || $endTime < time()) {
// 推荐人消费金数据为空 或 推荐人的有效订单为空 或推荐人已超过任务完成时间,作为发起人参加活动 // 推荐人消费金数据为空 或 推荐人的有效订单为空 或推荐人已超过任务完成时间,作为发起人参加活动
return $this->promoter($userId, $groupOrder, 0); return $this->promoter($userId, $groupOrder, 0);
} }
$endTime = strtotime('+1 year', $spreadActivityUser['create_time']);
// 订单有效金额为实付金额+红包金额 // 订单有效金额为实付金额+红包金额
$orderValidAmount = bcadd($spreadGroupOrder['pay_price'], $spreadGroupOrder['red_pack'], 2); $orderValidAmount = bcadd($spreadGroupOrder['pay_price'], $spreadGroupOrder['red_pack'], 2);
$orderValidAmount = min($orderValidAmount, $this->maxAmount); $orderValidAmount = min($orderValidAmount, $this->maxAmount);
@ -117,7 +117,7 @@ class StoreConsumptionUserDao extends BaseDao
} }
Db::startTrans(); Db::startTrans();
try { try {
$isFirstOrder = $this->isFirstOrder($userId, $spreadConsumption['start_time'], $endTime); $isFirstOrder = $this->isFirstOrder($userId, $spreadConsumption['start_time'], date('Y-m-d H:i:s', $endTime));
$storeActivityOrderDao = new StoreActivityOrderDao(); $storeActivityOrderDao = new StoreActivityOrderDao();
$storeActivityOrder = $storeActivityOrderDao->save($groupOrder, $spreadUserId, $isFirstOrder); $storeActivityOrder = $storeActivityOrderDao->save($groupOrder, $spreadUserId, $isFirstOrder);
if ($spreadConsumption['type'] == StoreConsumption::TYPE_PULL_CONSUMPTION && $isFirstOrder && $storeActivityOrder['status'] == StoreActivityOrder::STATUS_VALID) { if ($spreadConsumption['type'] == StoreConsumption::TYPE_PULL_CONSUMPTION && $isFirstOrder && $storeActivityOrder['status'] == StoreActivityOrder::STATUS_VALID) {
@ -147,6 +147,7 @@ class StoreConsumptionUserDao extends BaseDao
foreach ($consumption['config'] as $k => $item) { foreach ($consumption['config'] as $k => $item) {
if ($item['start'] <= $amount && $item['end'] >= $amount) { if ($item['start'] <= $amount && $item['end'] >= $amount) {
$item['rate'] = bcdiv($item['rate'], 100, 2); $item['rate'] = bcdiv($item['rate'], 100, 2);
$item['rate_two'] = (isset($item['rate_two']) && $item['rate_two'] > 0) ? bcdiv($item['rate_two'], 100, 2) : 0;
$scope = $item; $scope = $item;
break; break;
} }
@ -219,15 +220,16 @@ class StoreConsumptionUserDao extends BaseDao
if (!$model->save()) { if (!$model->save()) {
throw new \Exception('发放失败'); throw new \Exception('发放失败');
} }
$title = $type == StoreConsumptionUser::TYPE_TWO ? '现金抵扣红包' : '无门槛实物通用红包';
// 写入红包日志 // 写入红包日志
/** @var $userBillRepository UserBillRepository */ /** @var $userBillRepository UserBillRepository */
$userBillRepository = app()->make(UserBillRepository::class); $userBillRepository = app()->make(UserBillRepository::class);
$userBillRepository->incBill($userId, 'red_pack', "red_pack_{$type}", [ $userBillRepository->incBill($userId, 'red_pack', "red_pack_{$type}", [
'link_id' => $model['coupon_user_id'], 'link_id' => $model['coupon_user_id'],
'status' => 1, 'status' => 1,
'title' => '获得现金抵扣红包', 'title' => '获得' . $title,
'number' => $couponPrice, 'number' => $couponPrice,
'mark' => '获得现金抵扣红包' . $couponPrice, 'mark' => '获得' . $title . $couponPrice,
'balance' => 0 'balance' => 0
]); ]);
} }
@ -247,7 +249,12 @@ class StoreConsumptionUserDao extends BaseDao
return 0; return 0;
} }
$count = StoreGroupOrder::where('uid', $userId)->where('paid', 1)->whereBetweenTime('pay_time', $startTime, $endTime)->count(); $count = StoreGroupOrder::where('uid', $userId)->where('paid', 1)->whereBetweenTime('pay_time', $startTime, $endTime)->count();
return intval($count == 1); return intval($count <= 1);
}
public function getEndTime($datetime)
{
return strtotime('+1 year', strtotime($datetime));
} }
} }

View File

@ -15,6 +15,11 @@ class StoreConsumptionUser extends BaseModel
const TYPE_ONE = 1; //实物通用红包 const TYPE_ONE = 1; //实物通用红包
const TYPE_TWO = 2; //现金抵扣红包 const TYPE_TWO = 2; //现金抵扣红包
const TYPE_MAP = [
self::TYPE_ONE => '无门槛实物通用红包',
self::TYPE_TWO => '现金抵扣红包',
];
public static function tablePk(): string public static function tablePk(): string
{ {
return 'coupon_user_id'; return 'coupon_user_id';

View File

@ -80,7 +80,22 @@ class StoreActivity extends BaseController
public function record(StoreActivityUserDao $dao) public function record(StoreActivityUserDao $dao)
{ {
$userId = $this->request->uid(); $userId = $this->request->uid();
$result = $dao->record($userId); $type = $this->request->get('type', 1);
$page = $this->request->get('page', 1);
$limit = $this->request->get('limit', 10);
$result = $dao->record($userId, $type, $page, $limit);
return app('json')->success($result);
}
/**
* 红包余额统计
* @param StoreActivityUserDao $dao
* @return mixed
*/
public function total(StoreActivityUserDao $dao)
{
$userId = $this->request->uid();
$result = $dao->total($userId);
return app('json')->success($result); return app('json')->success($result);
} }

View File

@ -463,7 +463,8 @@ Route::group('api/', function () {
Route::post('choose', 'api.store.StoreActivity/choose'); //选择消费金类型 Route::post('choose', 'api.store.StoreActivity/choose'); //选择消费金类型
Route::get('status', 'api.store.StoreActivity/status'); //获取活动进度 Route::get('status', 'api.store.StoreActivity/status'); //获取活动进度
Route::post('receive', 'api.store.StoreActivity/receive'); //领取活动红包 Route::post('receive', 'api.store.StoreActivity/receive'); //领取活动红包
Route::get('record', 'api.store.StoreActivity/record'); //活动红包使用记录 Route::get('record', 'api.store.StoreActivity/record'); //活动红包获取记录
Route::get('total', 'api.store.StoreActivity/total'); //活动红包统计
}); });
})->middleware(UserTokenMiddleware::class, true); })->middleware(UserTokenMiddleware::class, true);