@ -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 '用户余额不足';