刮刮后端接口
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

<?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]);
}
}
}