调整红包余额查询
This commit is contained in:
parent
0b128503b1
commit
092801fa02
@ -33,6 +33,7 @@ class StoreActivityOrderDao extends BaseDao
|
||||
$model->spread_id = $spreadId;
|
||||
$model->pay_price = $groupOrder['pay_price'];
|
||||
$model->is_first_order = $isFirstOrder;
|
||||
$model->status = StoreActivityOrder::STATUS_VALID;
|
||||
$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')
|
||||
->find();
|
||||
|
@ -9,6 +9,7 @@ use app\common\model\store\consumption\StoreConsumptionUser;
|
||||
use app\common\model\store\StoreActivityOrder;
|
||||
use app\common\model\store\StoreActivityUser;
|
||||
use app\common\model\user\User;
|
||||
use app\common\model\user\UserBill;
|
||||
|
||||
class StoreActivityUserDao extends BaseDao
|
||||
{
|
||||
@ -168,24 +169,45 @@ class StoreActivityUserDao extends BaseDao
|
||||
/**
|
||||
* 红包获取记录
|
||||
* @param int $userId
|
||||
* @param int $type
|
||||
* @param int $page
|
||||
* @param int $limit
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @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();
|
||||
$record = StoreConsumptionUser::where('uid', $userId)
|
||||
->whereIn('coupon_id', array_column($consumption, 'coupon_id'))
|
||||
->where('status', '>=', StoreConsumptionUser::STATUS_UNUSED)
|
||||
->field('coupon_price,order_amount,create_time')
|
||||
->select();
|
||||
$totalAmount = 0;
|
||||
foreach ($record as $item) {
|
||||
$totalAmount = bcadd($totalAmount, $item['coupon_price'], 2);
|
||||
$totalAmount = StoreConsumptionUser::where('uid', $userId)
|
||||
->whereIn('type', $type)
|
||||
->where('status', StoreConsumptionUser::STATUS_UNUSED)
|
||||
->sum('balance');
|
||||
$query = UserBill::where('uid', $userId)
|
||||
->where('category', 'red_pack')
|
||||
->where('type', "red_pack_{$type}");
|
||||
$count = $query->count();
|
||||
$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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -56,11 +56,6 @@ class CommissionDao
|
||||
if ($redPack > 0) {
|
||||
$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);
|
||||
$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');
|
||||
if (!empty($promotionCode)) {
|
||||
|
@ -58,10 +58,10 @@ class StoreConsumptionUserDao extends BaseDao
|
||||
$activityUser = (new StoreActivityUserDao())->getOne($userId);
|
||||
$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;
|
||||
}
|
||||
$endTime = strtotime('+1 year', $activityUser['create_time']);
|
||||
$orderValidAmount = min($groupOrder['pay_price'], $this->maxAmount);
|
||||
$scope = $this->getScope($consumption, $orderValidAmount);
|
||||
//用户没有达到 消费金活动 任一档次
|
||||
@ -70,7 +70,7 @@ class StoreConsumptionUserDao extends BaseDao
|
||||
}
|
||||
Db::startTrans();
|
||||
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();
|
||||
$storeActivityOrder = $storeActivityOrderDao->save($groupOrder, $spreadUserId, $isFirstOrder);
|
||||
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);
|
||||
$endTime = $this->getEndTime($spreadActivityUser['create_time'] ?? '2024-01-01 00:00:00');
|
||||
$spreadConsumption = (new StoreConsumptionDao())->getOne($spreadActivityUser['value'] ?? 0);
|
||||
// 查询推荐人满足条件的有效订单
|
||||
$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);
|
||||
}
|
||||
$endTime = strtotime('+1 year', $spreadActivityUser['create_time']);
|
||||
// 订单有效金额为实付金额+红包金额
|
||||
$orderValidAmount = bcadd($spreadGroupOrder['pay_price'], $spreadGroupOrder['red_pack'], 2);
|
||||
$orderValidAmount = min($orderValidAmount, $this->maxAmount);
|
||||
@ -117,7 +117,7 @@ class StoreConsumptionUserDao extends BaseDao
|
||||
}
|
||||
Db::startTrans();
|
||||
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();
|
||||
$storeActivityOrder = $storeActivityOrderDao->save($groupOrder, $spreadUserId, $isFirstOrder);
|
||||
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) {
|
||||
if ($item['start'] <= $amount && $item['end'] >= $amount) {
|
||||
$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;
|
||||
break;
|
||||
}
|
||||
@ -219,15 +220,16 @@ class StoreConsumptionUserDao extends BaseDao
|
||||
if (!$model->save()) {
|
||||
throw new \Exception('发放失败');
|
||||
}
|
||||
$title = $type == StoreConsumptionUser::TYPE_TWO ? '现金抵扣红包' : '无门槛实物通用红包';
|
||||
// 写入红包日志
|
||||
/** @var $userBillRepository UserBillRepository */
|
||||
$userBillRepository = app()->make(UserBillRepository::class);
|
||||
$userBillRepository->incBill($userId, 'red_pack', "red_pack_{$type}", [
|
||||
'link_id' => $model['coupon_user_id'],
|
||||
'status' => 1,
|
||||
'title' => '获得现金抵扣红包',
|
||||
'title' => '获得' . $title,
|
||||
'number' => $couponPrice,
|
||||
'mark' => '获得现金抵扣红包' . $couponPrice,
|
||||
'mark' => '获得' . $title . $couponPrice,
|
||||
'balance' => 0
|
||||
]);
|
||||
}
|
||||
@ -247,7 +249,12 @@ class StoreConsumptionUserDao extends BaseDao
|
||||
return 0;
|
||||
}
|
||||
$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));
|
||||
}
|
||||
|
||||
}
|
@ -15,6 +15,11 @@ class StoreConsumptionUser extends BaseModel
|
||||
const TYPE_ONE = 1; //实物通用红包
|
||||
const TYPE_TWO = 2; //现金抵扣红包
|
||||
|
||||
const TYPE_MAP = [
|
||||
self::TYPE_ONE => '无门槛实物通用红包',
|
||||
self::TYPE_TWO => '现金抵扣红包',
|
||||
];
|
||||
|
||||
public static function tablePk(): string
|
||||
{
|
||||
return 'coupon_user_id';
|
||||
|
@ -80,7 +80,22 @@ class StoreActivity extends BaseController
|
||||
public function record(StoreActivityUserDao $dao)
|
||||
{
|
||||
$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);
|
||||
}
|
||||
|
||||
|
@ -463,7 +463,8 @@ Route::group('api/', function () {
|
||||
Route::post('choose', 'api.store.StoreActivity/choose'); //选择消费金类型
|
||||
Route::get('status', 'api.store.StoreActivity/status'); //获取活动进度
|
||||
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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user