|
|
|
@ -4,41 +4,122 @@ 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; |
|
|
|
|
|
|
|
/** |
|
|
|
* @mixin \think\Model |
|
|
|
* 充值记录 |
|
|
|
*/ |
|
|
|
class RechargeRecords extends Model |
|
|
|
{ |
|
|
|
|
|
|
|
public $tradeType = [1 => '代理上分', 2 => '管理员上分', 3 => '支付宝', 4 => '消费返点']; |
|
|
|
|
|
|
|
/** |
|
|
|
* 创建充值记录 |
|
|
|
* @param $user_id |
|
|
|
* @param $recharge_amount |
|
|
|
* @param $residue_amount |
|
|
|
* @param $status |
|
|
|
* @param $trade_type |
|
|
|
* @param $trade_id |
|
|
|
* @param int $status |
|
|
|
* @param int $trade_type |
|
|
|
* @param int $trade_id |
|
|
|
* @return mixed |
|
|
|
*/ |
|
|
|
public static function createRecords($user_id,$recharge_amount,$residue_amount,$status = 0,$trade_type = 1,$trade_id = 0) |
|
|
|
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->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; |
|
|
|
$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->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]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|