'代理上分', 2 => '管理员上分', 3 => '支付宝', 4 => '消费返点']; /** * 创建充值记录 * @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]); } } }