Browse Source

可提现余额可以直接使用

master
wanghongjun 2 years ago
parent
commit
3da24a6108
  1. 79
      app/logic/Zone.php
  2. 17
      app/model/ConsumptionRecords.php

79
app/logic/Zone.php

@ -19,7 +19,9 @@ class Zone
{
protected static $user_id;
protected static $userData;
protected static $zone_goods_id;
protected static $zoneGoodsData;
protected static $play_code;
protected static $patterns;
protected static $param;
@ -71,7 +73,7 @@ class Zone
* @param $zone_goods_id
* @return array
*/
public static function ticketing($user_id, $zone_goods_id)
public static function ticketing($user_id, $zone_goods_id): array
{
# 获取刮奖玩法设定规则参数
try {
@ -120,7 +122,7 @@ class Zone
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
protected static function getZoneParam($where = [])
protected static function getZoneParam($where = []): array
{
$where['status'] = 1;
$list = ZoneGoodsParam::where($where)
@ -169,13 +171,21 @@ class Zone
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
protected static function judgeBalance()
protected static function judgeBalance(): bool
{
$userModel = User::field('balance')->find(self::$user_id);
$userModel = User::field('id,aid,balance,withdrawal_balance')->find(self::$user_id);
$balance = $userModel->balance ?: 0;
self::$userData = $userModel->toArray();
$zoneGoodsModel = ZoneGoods::field('price')->find(self::$zone_goods_id);
$zoneGoodsModel = ZoneGoods::field('zone_id,price,direction_count,transverse_count,play_id')->find(self::$zone_goods_id);
$price = $zoneGoodsModel->price ?: 0;
self::$zoneGoodsData = $zoneGoodsModel->toArray();
if ($balance < $price) {
$withdrawal_balance = $userModel->withdrawal_balance ?: 0;
$balance = bcadd($balance,$withdrawal_balance,2);
}
if ($balance < $price) {
return false;
}
@ -214,7 +224,7 @@ class Zone
* @param $prizes_icon_data
* @return array
*/
protected static function settlementAmount($awards_amount, $text_data, $prizes_data, $prizes_icon_data)
protected static function settlementAmount($awards_amount, $text_data, $prizes_data, $prizes_icon_data): array
{
# 开启事务
$connection = Db::connect();
@ -223,11 +233,25 @@ class Zone
$connection->startTrans();
# 扣除余额
$zoneGoodsModel = ZoneGoods::field('price')->find(self::$zone_goods_id);
$price = $zoneGoodsModel['price'];
$userData = self::$userData;
$zoneGoodsData = self::$zoneGoodsData;
$price = $zoneGoodsData['price'];
# 消费金额
$consumptionBalance = User::decrBalance(self::$user_id, $price);
$consumptionBalance = 0; // 余额消费剩余金额
$consumptionWithdrawalBalance = 0;// 可提消费剩余金额
# 余额小于金额 且可提余额能补足
if ($userData['balance'] < $price) {
if ($userData['balance'] > 0) {
$consumptionBalance = User::decrBalance(self::$user_id, $userData['balance']);
}
# 剩余余额
$residue_price = bcsub($price,$userData['balance']);
$consumptionWithdrawalBalance = User::decrWithdrawalBalance(self::$user_id,$residue_price);
} else {
$consumptionBalance = User::decrBalance(self::$user_id, $price);
}
# 判断是否中奖
$awards_status = 0;
@ -242,17 +266,21 @@ class Zone
}
# 消费订单
$c_r_id = ConsumptionRecords::saveRecords(
self::$user_id,
self::$zone_goods_id,
$price,
$price,
$consumptionBalance,
$text_data,
$prizes_data,
$awards_status,
$prizes_icon_data
);
$otherData = [
'prizes_data' => $prizes_data,
'awards_status' => $awards_status,
'prizes_icon_data' => $prizes_icon_data
];
# 余额消费记录 - 余额大于0
if ($userData['balance'] > 0) {
$otherData['actual_type'] = 1;
$c_r_id = ConsumptionRecords::saveRecords(self::$user_id, self::$zone_goods_id, $price, $price, $consumptionBalance, $text_data, $otherData);
}
# 可提余额消费记录 - 余额小于金额
if ($userData['balance'] < $price) {
$otherData['actual_type'] = 2;
$c_r_id = ConsumptionRecords::saveRecords(self::$user_id, self::$zone_goods_id, $price, $price, $consumptionWithdrawalBalance, $text_data, $otherData);
}
# 消费返点
User::addRebateRatioAmount(self::$user_id, $price, 0, $c_r_id);
@ -559,15 +587,15 @@ class Zone
/**
* 自动刮奖测试机
* @param $user_id
* @param $zone_goods_id
* @param $count
* @param int $user_id
* @param int $zone_goods_id
* @param int $count
* @return string|void
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public static function auto($user_id = 1,$zone_goods_id = 1,$count = 500)
public static function auto(int $user_id = 1,int $zone_goods_id = 1,int $count = 500)
{
# 验证
$user = User::find($user_id);
@ -577,6 +605,9 @@ class Zone
$zoneGoodsParam = ZoneGoodsParam::where('zone_goods_id',$zone_goods_id)->where('status',1)->find();
if (!$zoneGoodsParam) return '刮奖奖项不存在';
$balance = $user->balance ?: 0;
if ($user->withdrawal_balance) {
$balance += $user->withdrawal_balance;
}
$sumPrice = $count * $zoneGoods['price'];
if ($balance < $sumPrice) return '用户余额不足';

17
app/model/ConsumptionRecords.php

@ -38,12 +38,10 @@ class ConsumptionRecords extends Model
* @param $actual_price // 实际支付金额
* @param $residue_amount // 剩余余额
* @param $data // 剩余余额
* @param $prizes_data // 有奖区
* @param $awards_status // 中奖状态
* @param $prizes_icon_data // 有奖图标区
* @param array $otherData // 其他数据
* @return mixed
*/
public static function saveRecords($user_id,$z_g_id,$price,$actual_price,$residue_amount,$data,$prizes_data = [],$awards_status = 0,$prizes_icon_data = [])
public static function saveRecords($user_id,$z_g_id,$price,$actual_price,$residue_amount,$data,array $otherData = [])
{
$records = new ConsumptionRecords();
@ -55,14 +53,15 @@ class ConsumptionRecords extends Model
$records->residue_amount = $residue_amount;
$records->create_time = date("Y-m-d H:i:s",time());
$records->status = 1;
if (!empty($prizes_data)) {
$records->prizes_data = serialize($prizes_data);
if (isset($otherData['prizes_data']) && !empty($otherData['prizes_data'])) {
$records->prizes_data = serialize($otherData['prizes_data']);
}
if (!empty($prizes_icon_data)) {
$records->prizes_icon_data = serialize($prizes_icon_data);
if (isset($otherData['prizes_icon_data']) && !empty($otherData['prizes_icon_data'])) {
$records->prizes_icon_data = serialize($otherData['prizes_icon_data']);
}
$records->complete_time = date("Y-m-d H:i:s",time());
$records->awards_status = $awards_status;
$records->awards_status = $otherData['awards_status'] ?? 0;
$records->actual_type = $otherData['actual_type'] ?? 1;
$records->save();
return $records->id;

Loading…
Cancel
Save