You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
3.9 KiB
125 lines
3.9 KiB
<?php
|
|
declare (strict_types = 1);
|
|
|
|
namespace app\model;
|
|
|
|
use think\Model;
|
|
use think\db\exception\DataNotFoundException;
|
|
use think\db\exception\DbException;
|
|
use think\db\exception\ModelNotFoundException;
|
|
|
|
/**
|
|
* 充值记录
|
|
*/
|
|
class RechargeRecords extends Model
|
|
{
|
|
|
|
public $tradeType = [1 => '代理上分', 2 => '管理员上分', 3 => '支付宝', 4 => '消费返点', 5 => '可提转移'];
|
|
|
|
/**
|
|
* 创建充值记录
|
|
* @param $user_id
|
|
* @param $recharge_amount
|
|
* @param $residue_amount
|
|
* @param int $status
|
|
* @param int $trade_type
|
|
* @param int $trade_id
|
|
* @return mixed
|
|
*/
|
|
public static function createRecords($user_id, $recharge_amount, $residue_amount, int $status = 0,int $trade_type = 1,int $trade_id = 0)
|
|
{
|
|
$RechargeRecords = new RechargeRecords();
|
|
|
|
$RechargeRecords->user_id = $user_id;
|
|
$RechargeRecords->recharge_amount = $recharge_amount;
|
|
$RechargeRecords->residue_amount = $residue_amount;
|
|
$RechargeRecords->recharge_time = date("Y-m-d H:i:s", time());
|
|
$RechargeRecords->trade_type = $trade_type;
|
|
$RechargeRecords->trade_id = $trade_id;
|
|
$RechargeRecords->status = $status;
|
|
if ($status == 1) {
|
|
$RechargeRecords->pay_time = date("Y-m-d H:i:s", time());
|
|
}
|
|
|
|
$RechargeRecords->save();
|
|
|
|
return $RechargeRecords->id;
|
|
}
|
|
|
|
/**
|
|
* 最近一次充值金额
|
|
* @param array $where
|
|
* @return array
|
|
* @throws DataNotFoundException
|
|
* @throws DbException
|
|
* @throws ModelNotFoundException
|
|
*/
|
|
public static function lastRechargeAmount(array $where = []): array
|
|
{
|
|
|
|
$RechargeRecords = new RechargeRecords();
|
|
|
|
$rechargeRes = $RechargeRecords->where($where)
|
|
->where('status', 1)
|
|
->where('usage_status', 0)
|
|
->field('id,recharge_amount,usage_amount,recharge_time')
|
|
->order('recharge_time','asc')
|
|
->find();
|
|
$rechargeArr = [];
|
|
if ($rechargeRes) $rechargeArr = $rechargeRes->toArray();
|
|
|
|
return $rechargeArr;
|
|
}
|
|
|
|
/**
|
|
* 增加使用金额
|
|
* @param $where // 初始[ ['id','=',$id] ]
|
|
* @param $usageAmount // 增加金额
|
|
* @throws DataNotFoundException
|
|
* @throws DbException
|
|
* @throws ModelNotFoundException
|
|
*/
|
|
public static function incrUsageAmount($where, $usageAmount)
|
|
{
|
|
// 充值记录
|
|
$RechargeRecords = self::lastRechargeAmount($where);
|
|
|
|
$id = $RechargeRecords['id']; // 已使用金额
|
|
$usage_amount = $RechargeRecords['usage_amount']; // 已使用金额
|
|
$recharge_timeWhere = [
|
|
['id', '>', $id],
|
|
['recharge_time', '>', $RechargeRecords['recharge_time']]
|
|
]; // 充值时间
|
|
$recharge_amount = $RechargeRecords['recharge_amount']; // 充值金额
|
|
|
|
// 当前使用金额
|
|
$target_usage_amount = $usageAmount + $usage_amount;
|
|
|
|
// 保存充值金额
|
|
$incr_usage_amount = $target_usage_amount;
|
|
|
|
// 超出此次充值记录使用金额
|
|
if ($target_usage_amount > $recharge_amount) {
|
|
|
|
$incr_usage_amount = $target_usage_amount - $recharge_amount;
|
|
|
|
// 剩余-增加-使用金额
|
|
$incr_next_usage_amount = $usageAmount - $incr_usage_amount;
|
|
|
|
# 递归增加使用金额
|
|
self::incrUsageAmount($recharge_timeWhere,$incr_next_usage_amount);
|
|
}
|
|
|
|
// 保存此次消费
|
|
if ($incr_usage_amount > 0) {
|
|
|
|
$updateArr = ['usage_amount' => $incr_usage_amount];
|
|
|
|
if ($recharge_amount == $incr_usage_amount) {
|
|
$updateArr['usage_status'] = 1;
|
|
}
|
|
|
|
self::update($updateArr,['id' => $id]);
|
|
}
|
|
}
|
|
}
|
|
|