0, 'user_id' => $params['user_id'], 'sn'=>$params['sn'] ])->value('work_id'); if(empty($work_id)){ throw new Exception('订单不存在'); } // 判断工单是否用户已完结 $service_work = ServiceWork::find($work_id); if($service_work->user_confirm_status!=5){ throw new Exception('未完结订单,无法完成分成'); } // 以工单 结算金额 为基准,计算分成金额 $work_amount = $service_work->work_amount; $propertyUserId = PropertyUser::where('user_id',$params['user_id'])->value('id'); $propertyOrderInfo = PropertyOrder::where(['property_user_id' => $propertyUserId,'order_status' => 1,'work_id'=>$work_id])->findOrEmpty()->toArray(); //计算分成金额 $ratio = PropertyHead::where('id',$propertyOrderInfo['property_head_id'])->value('ratio'); $commission_amount = number_format($work_amount * ($ratio/100),2,'.',''); // 添加分成记录 $propertyCommissionInfo = PropertyCommission::create([ 'property_head_id' => $propertyOrderInfo['property_head_id'], 'property_user_id' => $propertyUserId, 'property_order_id' => $propertyOrderInfo['id'], 'work_id' => $work_id, 'order_amount' => $work_amount, 'ratio' => $ratio, 'commission_amount' => $commission_amount, ]); // 更新物业收益/订单状态已完结 PropertyHead::where(['id' => $propertyOrderInfo['property_head_id']])->lock(true)->update([ 'all_profit_amount' => Db::raw('all_profit_amount+'.$commission_amount), 'surplus_profit_amount' => Db::raw('surplus_profit_amount+'.$commission_amount) ]); PropertyOrder::where(['id' => $propertyOrderInfo['id']])->update(['order_status' => 3]); // 进出账记录 PropertySurplusLog::create([ 'in_out' => 1, 'property_head_id' => $propertyOrderInfo['property_head_id'], 'property_commission_id' => $propertyCommissionInfo['id'], 'amount' => $commission_amount, 'status' => 1, 'remark' => '订单完成,分成金额入账' ]); Db::commit(); return true; }catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } /** * 物业负责人用户申请提现 * @param $params * @return false|true */ public static function withdrawCash($params) { Db::startTrans(); try { $propertyHeadInfo = PropertyHead::where('user_id',$params['user_id'])->lock(true)->findOrEmpty(); if($propertyHeadInfo->isEmpty()){ throw new Exception('物业负责人不存在'); } $propertyHeadInfo = $propertyHeadInfo->toArray(); $propertyHeadId = $propertyHeadInfo['id']; $surplusProfitAmount = $propertyHeadInfo['surplus_profit_amount']; if(($surplusProfitAmount - $params['amount']) < 0){ throw new Exception('余额不足'); } // 出账记录 - 提现 PropertySurplusLog::create([ 'in_out' => 2, 'property_head_id' => $propertyHeadId, 'amount' => $params['amount'], 'status' => 0 ]); // 更新 物业负责人余额收益 PropertyHead::where(['id' => $propertyHeadId])->update([ 'surplus_profit_amount' => Db::raw('surplus_profit_amount-'.$params['amount']) ]); Db::commit(); return true; }catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } }