调整红包余额查询
This commit is contained in:
parent
0b128503b1
commit
092801fa02
@ -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();
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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)) {
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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';
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user