|
|
|
@ -250,4 +250,100 @@ class Zone |
|
|
|
'save_data' => $save_data |
|
|
|
]; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 自动刮奖测试机 |
|
|
|
* @param $user_id |
|
|
|
* @param $zone_goods_id |
|
|
|
* @param $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) |
|
|
|
{ |
|
|
|
# 验证 |
|
|
|
$user = User::find($user_id); |
|
|
|
if (!$user) return '用户不存在'; |
|
|
|
$zoneGoods = ZoneGoods::find($zone_goods_id); |
|
|
|
if (!$zoneGoods) return '刮奖商品不存在'; |
|
|
|
$zoneGoodsParam = ZoneGoodsParam::where('zone_goods_id',$zone_goods_id)->where('status',1)->find(); |
|
|
|
if (!$zoneGoodsParam) return '刮奖奖项不存在'; |
|
|
|
$balance = $user->balance ?: 0; |
|
|
|
$sumPrice = $count * $zoneGoods['price']; |
|
|
|
if ($balance < $sumPrice) return '用户余额不足'; |
|
|
|
|
|
|
|
# 开始执行 |
|
|
|
$limit = 1; |
|
|
|
while ($limit <= $count) { |
|
|
|
|
|
|
|
# 获取奖项个参数 |
|
|
|
$zoneParamArr = ZoneGoodsParam::getList(['zone_goods_id' => $zone_goods_id]); |
|
|
|
if (empty($zoneParamArr)) return '奖项不存在'; |
|
|
|
|
|
|
|
# 获取刮刮乐信息 |
|
|
|
$resData = Zone::getWinningPrize($zoneParamArr); |
|
|
|
$data = $resData['data']; |
|
|
|
$save_data = $resData['save_data']; |
|
|
|
|
|
|
|
# 开启事务 |
|
|
|
$connection = Db::connect(); |
|
|
|
try { |
|
|
|
|
|
|
|
$connection->startTrans(); |
|
|
|
|
|
|
|
# 扣除余额 |
|
|
|
$zoneGoodsModel = ZoneGoods::field('price')->find($zone_goods_id); |
|
|
|
$price = $zoneGoodsModel['price']; |
|
|
|
$balance = User::decrBalance($user_id,$price); |
|
|
|
|
|
|
|
# 消费记录 |
|
|
|
$c_r_id = ConsumptionRecords::createRecords($user_id,$zone_goods_id,$price,$price,$balance,$save_data); |
|
|
|
|
|
|
|
# 解析是否中奖 |
|
|
|
$awards_amount = 0; |
|
|
|
foreach ($save_data as $key => $goodsParam) { |
|
|
|
foreach ($goodsParam as $k => $item) { |
|
|
|
$save_data[$key][$k]['is_awards'] = 0; |
|
|
|
if (isset($item['id'])) { |
|
|
|
$awardsAmountRes = ZoneGoodsParam::getAwardsAmount($item['id']); |
|
|
|
if ($awardsAmountRes) { |
|
|
|
$save_data[$key][$k]['is_awards'] = 1; |
|
|
|
$awards_amount += $item['amount']; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
$ConsumptionRecords = new ConsumptionRecords(); |
|
|
|
|
|
|
|
$ConsumptionRecords::awardsData($data,$c_r_id); |
|
|
|
|
|
|
|
# 判断是否中奖 |
|
|
|
if ($awards_amount > 0) { |
|
|
|
|
|
|
|
# 修改用户余额 |
|
|
|
$balance = User::incrWithdrawalBalance($user_id,$awards_amount); |
|
|
|
|
|
|
|
# 中奖做记录 |
|
|
|
AwardsRecords::createRecords($user_id,$c_r_id,$awards_amount,$balance); |
|
|
|
} |
|
|
|
|
|
|
|
# 完成订单 |
|
|
|
ConsumptionRecords::endOrder($c_r_id,$awards_amount); |
|
|
|
|
|
|
|
$connection->commit(); |
|
|
|
|
|
|
|
# 返回刮刮乐图标、金额、订单id |
|
|
|
} catch (\Exception $e) { |
|
|
|
|
|
|
|
$connection->rollback(); |
|
|
|
return $e->getMessage(); |
|
|
|
} |
|
|
|
# 循环执行 |
|
|
|
$limit++; |
|
|
|
} |
|
|
|
return '完成'; |
|
|
|
} |
|
|
|
} |