|
@@ -176,90 +176,119 @@ class Order extends Api{
|
|
|
$data['join_num'] = $data['join_num'] = ($orderTotal > 0 ? 1 - $lotterUsed : 0);
|
|
|
// 如果次数不够
|
|
|
if( $data['join_num'] <= 0 ) return json_send(['code'=>'error','msg'=>'抽奖次数已用完','data'=>['error'=>'抽奖次数已用完']]);
|
|
|
+ // 获取奖励结果
|
|
|
+ $rewardResult = $OrderReward->getRewardResult($lotteryId);
|
|
|
+ // 未抽中
|
|
|
+ if( !$rewardResult ) return json_send(['code'=>'error','msg'=>'谢谢参与','data'=>['error'=>'谢谢参与']]);
|
|
|
+ // 奖品索引
|
|
|
+ $rewardIndex = $rewardResult['index'];
|
|
|
+ // 奖品列表
|
|
|
+ $reward = $rewardResult['reward_list'];
|
|
|
+ // 获取奖品信息
|
|
|
+ $rewardResult = $reward[$rewardIndex];
|
|
|
// 组合数据,写入订单表,子表
|
|
|
DB::beginTransaction();
|
|
|
try{
|
|
|
+ // 奖品数量减少
|
|
|
+ $result = $OrderReward->edit($rewardResult['id'],['reward_total'=>DB::raw('reward_total+-1'),'lottery_id'=>$rewardResult['lottery_id']]);
|
|
|
+ // 如果奖品数量减少失败
|
|
|
+ if( !$result ) {
|
|
|
+ // 回退数据
|
|
|
+ DB::rollBack();
|
|
|
+ // 提醒重试
|
|
|
+ return json_send(['code'=>'error','msg'=>'抽奖失败,请重试','data'=>['error'=>'奖品数量扣减失败']]);
|
|
|
+ }
|
|
|
// 扣减积分
|
|
|
- $result = $OrderUsed->add(['lottery_id'=>$data['id'],'custom_uid'=>$uid]);
|
|
|
+ $result = $OrderUsed->add(['lottery_id'=>$data['id'],'custom_uid'=>$uid]);
|
|
|
// 如果积分扣减失败
|
|
|
- if( !$result ) {
|
|
|
+ if( !$result ) {
|
|
|
// 回退数据
|
|
|
DB::rollBack();
|
|
|
- return json_send(['code'=>'error','msg'=>'抽奖次数扣减失败','data'=>['error'=>'抽奖次数扣减失败']]);
|
|
|
+ // 通知重试
|
|
|
+ return json_send(['code'=>'error','msg'=>'抽奖扣减失败,请重试','data'=>['error'=>'抽奖次数扣减失败']]);
|
|
|
}
|
|
|
- // 获取奖励结果
|
|
|
- $rewardIndex = $OrderReward->getRewardResult($reward);
|
|
|
- // 如果中奖,下标不是0
|
|
|
- if( $rewardIndex ) {
|
|
|
- // 获取奖品
|
|
|
- $rewardResult = $reward[$rewardIndex];
|
|
|
- // 奖品记录ID
|
|
|
- if( !empty($rewardResult['id']) ){
|
|
|
- // 记录,默认状态为1,进行中
|
|
|
- $record = ['custom_uid'=>$uid,'lottery_id'=>$lotteryId,'reward_id'=>$rewardResult['id'],'reward_name'=>$rewardResult['reward_name'],'status'=>1];
|
|
|
- // 如果是积分
|
|
|
- if( $rewardResult['reward_type'] == 1 ){
|
|
|
- // 积分大于0
|
|
|
- if( $rewardResult['reward_info'] > 0 ){
|
|
|
- // 积分发放
|
|
|
- $result = $CustomScore->trade($uid,$lotteryId,$rewardResult['reward_info'],7,3);
|
|
|
- // 发放失败,改为未中奖
|
|
|
- if( isset($result['error']) ) $rewardIndex = 0;
|
|
|
- // 发放成功,状态为已完成
|
|
|
- $record['status']= 8;
|
|
|
- }
|
|
|
+ // 记录,默认状态为1,进行中
|
|
|
+ $record = ['custom_uid'=>$uid,'lottery_id'=>$lotteryId,'reward_id'=>$rewardResult['id'],'reward_name'=>$rewardResult['reward_name'],'status'=>1];
|
|
|
+ // 如果是积分
|
|
|
+ if( $rewardResult['reward_type'] == 1 ){
|
|
|
+ // 积分大于0
|
|
|
+ if( $rewardResult['reward_info'] > 0 ){
|
|
|
+ // 积分发放
|
|
|
+ $result = $CustomScore->trade($uid,$lotteryId,$rewardResult['reward_info'],7,3);
|
|
|
+ // 发放失败,改为未中奖
|
|
|
+ if( isset($result['error']) ) {
|
|
|
+ // 回退数据
|
|
|
+ DB::rollBack();
|
|
|
+ // 通知重试
|
|
|
+ return json_send(['code'=>'error','msg'=>'出了点小差,请重新抽奖','data'=>$result]);
|
|
|
}
|
|
|
- // 优惠券,先进行发放
|
|
|
- if( $rewardResult['reward_type'] == 2 ){
|
|
|
- // 优惠券存在ID
|
|
|
- if( $rewardResult['reward_info'] > 0 ){
|
|
|
- // 积分给与
|
|
|
- $result = $CustomCoupon->giveCoupon($rewardResult['reward_info'],$uid);
|
|
|
- // 发放失败,改为未中奖
|
|
|
- if( !$result ) $rewardIndex = 0;
|
|
|
- // 发放成功,状态为已完成
|
|
|
- $record['status']= 8;
|
|
|
- }
|
|
|
+ // 发放成功,状态为已完成
|
|
|
+ $record['status'] = 8;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 优惠券,先进行发放
|
|
|
+ if( $rewardResult['reward_type'] == 2 ){
|
|
|
+ // 优惠券存在ID
|
|
|
+ if( $rewardResult['reward_info'] > 0 ){
|
|
|
+ // 积分给与
|
|
|
+ $result = $CustomCoupon->giveCoupon($rewardResult['reward_info'],$uid);
|
|
|
+ // 发放失败,改为未中奖
|
|
|
+ if( isset($result['error']) ) {
|
|
|
+ // 回退数据
|
|
|
+ DB::rollBack();
|
|
|
+ // 通知重试
|
|
|
+ return json_send(['code'=>'error','msg'=>'出了点小差,请重新抽奖','data'=>$result]);
|
|
|
}
|
|
|
- // 红包
|
|
|
- if( $rewardResult['reward_type'] == 3 ){
|
|
|
- // 积分大于0
|
|
|
- if( $rewardResult['reward_info'] > 0 ){
|
|
|
- // 积分发放
|
|
|
- $result = $CustomAmount->trade($uid,$lotteryId,$rewardResult['reward_info'],6,1,'下单抽奖');
|
|
|
- // 发放失败,改为未中奖
|
|
|
- if( isset($result['error']) ) $rewardIndex = 0;
|
|
|
- // 发放成功,状态为已完成
|
|
|
- $record['status']= 8;
|
|
|
- }
|
|
|
- }
|
|
|
- // 如果是实物,要求填写地址,状态设置为0
|
|
|
- if( $rewardResult['reward_type'] == 5 ) $record['status'] = 0;
|
|
|
- // 中奖才进行记录
|
|
|
- if( $rewardIndex ) {
|
|
|
- // 奖品数量减少
|
|
|
- $OrderReward->edit($rewardResult['id'],['reward_total'=>DB::raw('reward_total+-1')]);
|
|
|
- // 扣减数量
|
|
|
- $OrderRecord->add($record);
|
|
|
+ // 发放成功,状态为已完成
|
|
|
+ $record['status'] = 8;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 红包
|
|
|
+ if( $rewardResult['reward_type'] == 3 ){
|
|
|
+ // 积分大于0
|
|
|
+ if( $rewardResult['reward_info'] > 0 ){
|
|
|
+ // 积分发放
|
|
|
+ $result = $CustomAmount->trade($uid,$lotteryId,$rewardResult['reward_info'],6,1,'下单抽奖');
|
|
|
+ // 发放失败,改为未中奖
|
|
|
+ if( isset($result['error']) ) {
|
|
|
+ // 回退数据
|
|
|
+ DB::rollBack();
|
|
|
+ // 通知重试
|
|
|
+ return json_send(['code'=>'error','msg'=>'出了点小差,请重新抽奖','data'=>$result]);
|
|
|
}
|
|
|
+ // 发放成功,状态为已完成
|
|
|
+ $record['status'] = 8;
|
|
|
}
|
|
|
}
|
|
|
+ // 如果是实物,要求填写地址,状态设置为0
|
|
|
+ if( $rewardResult['reward_type'] == 5 ) $record['status'] = 0;
|
|
|
+ // 如果是实物,要求填写地址,状态设置为0
|
|
|
+ if( $rewardResult['reward_type'] == 7 ) $record['status'] = 8;
|
|
|
+ // 扣减数量
|
|
|
+ $result = $OrderRecord->add($record);
|
|
|
+ // 记录失败
|
|
|
+ if( !$result ) {
|
|
|
+ // 回退数据
|
|
|
+ DB::rollBack();
|
|
|
+ // 下单失败提示
|
|
|
+ return json_send(['code'=>'error','msg'=>'抽奖失败,请重试','data'=>['error'=>'奖品记录失败']]);
|
|
|
+ }
|
|
|
// 提交事务
|
|
|
DB::commit();
|
|
|
// 通过活动ID,查询奖品
|
|
|
- $rewardList = [];
|
|
|
+ $rewardList = [];
|
|
|
// 奖品数据
|
|
|
- foreach ($reward as $value) {
|
|
|
- $rewardList[] = ['id'=>$value['id'],'name'=>$value['reward_name'],'img'=>$value['reward_thumb'],'reward_type'=>$value['reward_type']];
|
|
|
+ foreach ($reward as $value) {
|
|
|
+ $rewardList[] = ['id'=>$value['id'],'name'=>$value['reward_name'],'img'=>$value['reward_thumb'],'reward_type'=>$value['reward_type']];
|
|
|
}
|
|
|
// 返回结果
|
|
|
- return json_send(['code'=>'success','msg'=>'抽奖成功','data'=>['reward_list'=>$rewardList,'reward_index'=>$rewardIndex,'join_num'=>$data['join_num']-1]]);
|
|
|
+ return json_send(['code'=>'success','msg'=>'抽奖成功','data'=>['reward_list'=>$rewardList,'reward_index'=>$rewardIndex,'join_num'=>$data['join_num']-1]]);
|
|
|
// 异常处理
|
|
|
- } catch (\Throwable $th) {
|
|
|
+ } catch (\Throwable $th) {
|
|
|
// 回退数据
|
|
|
DB::rollBack();
|
|
|
// 下单失败提示
|
|
|
- return json_send(['code'=>'error','msg'=>'抽奖失败,请重试','data'=>['error'=>$th->getMessage().$th->getLine()]]);
|
|
|
+ return json_send(['code'=>'error','msg'=>'抽奖失败,请重试','data'=>['error'=>$th->getMessage().$th->getLine()]]);
|
|
|
}
|
|
|
|
|
|
}
|