ufutx.dma/app/Http/Controllers/Admin/OrderController.php
2026-03-04 14:42:40 +08:00

866 lines
34 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Events\OperationLoggedEvent;
use App\Events\OrderServeFinishedEvent;
use App\Events\OrderServeStartedEvent;
use App\Exports\AgencyExport;
use App\Exports\AgreementExport;
use App\Exports\AgreementLogExport;
use App\Exports\OrderSchemeExport;
use App\Exports\OrdersExport;
use App\Exports\OrdersExportV2;
use App\Exports\OrderStatExport;
use App\Exports\SchemeExport;
use App\Exports\StepApplyExport;
use App\Facades\CommonService;
use App\Facades\TaskService;
use App\Http\Controllers\Controller;
use App\Jobs\AddErrorLog;
use App\Jobs\SendTemplateNotice;
use App\Models\Agency;
use App\Models\Agreement;
use App\Models\AgreementLog;
use App\Models\Collaborator;
use App\Models\DmaProcessLog;
use App\Models\DmaShop;
use App\Models\Group;
use App\Models\GroupUser;
use App\Models\GuideScheme;
use App\Models\MarkOrderLog;
use App\Models\Order;
use App\Models\OrderOperateLog;
use App\Models\Quota;
use App\Models\QuotaLog;
use App\Models\ServiceRole;
use App\Models\ServiceRoleOrder;
use App\Models\ServiceRoleUser;
use App\Models\ServiceUser;
use App\Models\Shop;
use App\Models\ShopOrder;
use App\Models\ShopOrderStatus;
use App\Models\User;
use App\Models\UserStepApply;
use App\Services\FatService;
use cccdl\yunxin_sdk\Im\Team;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use Maatwebsite\Excel\Facades\Excel;
class OrderController extends Controller
{
public function orders(Request $request)
{
$orders = Order::with([
'user:id,name,mobile,avatar,is_privacy',
'service:id,title,pic',
'agency:id,name,mobile',
// 'agency' => function($agency){
// $agency->with('partner:id,name,mobile')->select('id','province','city','partner_id');
// },
'commission' => function ($commission) {
$commission->with(['service_user:user_id,name,mobile'])->select('id', 'order_id', 'role', 'user_id');
},
'service_role' => function ($service_role) {
$service_role->with(['serviceUser:user_id,name,mobile'])->select('order_id', 'role_id', 'user_id');
},
'offline_order:id,order_id,operate_user_id,operate_user_name',
'agreement:order_id,number,sign_date,quota_id',
'agreement.quotaInfo:id,agency_id,collaborator_id,num',
'agreement.quotaInfo.collaboratorInfo:id,avatar,name,mobile',
'agreement.quotaInfo.agencyInfo:id,grade,pro_id,city_id,province,city',
"recommendUser",
"asginSigner:order_id,status,company_status,user_sign_url,company_sign_url",
"asginContract:order_id,preview_url",
"userInfo:user_id,card_photo",
"payment",
"group",
])->serviceOrder();
$keyword = $request->input('keyword');
//关键词筛选
if ($keyword) {
$keyword = trim($keyword);
// $orders = $orders->whereHas("user", function ($sql) use ($keyword) {
// $sql->where('name', 'like', '%' . $keyword . '%')
// ->orWhere('mobile', 'like', '%' . $keyword . '%');
// });
$orders = $orders->Where(function ($sql) use ($keyword) {
$sql->whereHas("user", function ($sql) use ($keyword) {
$sql->where('name', 'like', '%' . $keyword . '%')
->orWhere('mobile', 'like', '%' . $keyword . '%');
})->orWhere("name", "like", "%" . $keyword . "%")->orWhere('mobile', 'like', '%' . $keyword . '%');
});
}
//支付状态筛选
$pay_status = $request->input('pay_status');
if ($pay_status) {
$orders = $orders->where('pay_status', $pay_status);
}
//开始状态筛选
$status = $request->input('status');
if ($status) {
$orders = $orders->where("status", $status);
}
//子公司筛选
$agency_id = $request->input('agency_id');
if ($agency_id) {
// $orders = $orders->where("agency_id", $agency_id);
$orders = $orders->whereHas('agreement.quotaInfo', function ($query) use ($agency_id) {
$query->where('agency_id', $agency_id);
});
}
$is_export = $request->input('is_export');
if ($is_export) {
$orders = $orders->orderByDesc('id')->get();
return Excel::download(new OrdersExportV2($orders), 'DMA订单.xlsx');
}
$orders = $orders->orderByDesc('id')->paginate();
foreach ($orders as $order) {
if ($order->user) {
$order->user->makeVisible('mobile');
}
}
return $this->success('ok', $orders);
}
public function getAllOrders()
{
$list = Order::select('id', 'name', 'mobile', 'trade_no')->get();
return $this->success('ok', $list);
}
/**
* 设置订单是否展示
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function setOrderIsShow(Request $request)
{
try {
$is_show = $request->get('is_show');
$order_id = $request->get('order_id');
$order_info = Order::where('id', $order_id)->first();
if (empty($order_info)) {
return $this->failure('订单不存在');
}
$order_info->is_show = $is_show;
$order_info->save();
return $this->success('ok');
} catch (\Exception $e) {
Log::error('setOrderIsShow:' . $e->getMessage());
return $this->failure($e->getMessage());
}
}
public function export(Request $request)
{
return Excel::download(new OrdersExport($request->all()), '订单.xlsx');
}
public function order(Request $request, $order_id)
{
$order = Order::find($order_id); //service_users.id,service_users.user_id,service_users.name,service_users.mobile'
$roles = ServiceRole::with([
'roleUsers' => function ($sql) use ($order_id) {
$sql->where('order_id', $order_id);
}
])->get();
$order->service = $order->service()->select('id', 'pic', 'title')->first();
$order->group;
//是否有餐单
$order->has_guides = $order->guides()->count() ? 1 : 0;
if ($order->has_guides) {
$order->guide_status = 'MADE';
Cache::forget('guide_status_' . $order_id);
} else {
//餐单生成状态
$order->guide_status = Cache::get('guide_status_' . $order_id, 'NOTMAKE');
}
foreach ($roles as $role) {
$url = config('app.url') . "/h5/#/temporaryIdentity?order_id=" . $order_id . "&role=" . $role->id;
$role->qr_code = CommonService::makeqrcode($url);
if (count($role->roleUsers)) {
$role->share_option = ServiceRoleOrder::where("order_id", $order_id)->where("user_id", ($role->roleUsers)[0]->user_id)->where("role_id", $role->id)->value("share_option") ?: "";
}
}
$order->asginContract;
$order->asginSigner;
return $this->success('ok', compact('order', 'roles'));
}
public function changeOrderAgency(Request $request, $order_id)
{
$order = Order::find($order_id);
$agency_id = $request->input('agency_id');
$order->agency_id = $agency_id;
$order->save();
//操作记录
OperationLoggedEvent::dispatch("修改订单: $order->id 的子公司为:$agency_id");
return $this->success('ok');
}
public function updateOrder(Request $request, $order_id)
{
$order = Order::find($order_id);
$status = $request->input('status');
if ($status) {
$order->status = $status;
if ($status == 'STARTING') { //通知
$user = $order->user;
if ($user && $user->officialWechat) {
$param = [
'touser' => $user->officialWechat->openid,
'template_id' => config('wechat.tpls.make_guide_notice'),
'url' => '',
'miniprogram' => [
'appid' => config('wechat.mini_program.app_id'),
'pagepath' => 'pages/tabBar/serve',
],
'data' => [
'first' => ['value' => '您的餐单生成成功!'],
'keyword1' => ['value' => $user->name],
"keyword2" => ['value' => date('Y-m-d H:i:s')],
'remark' => ['value' => "点击进入查看详情"]
]
];
SendTemplateNotice::dispatch($param)->onQueue('health');
}
//该订单是否是线下订单
if ($order->offline_order) {
//触发订单服务开始事件
OrderServeStartedEvent::dispatch($order->offline_order);
}
}
//订单结束
if ($status == 'FINISHED') {
//该订单是否是线下订单
if ($order->offline_order) {
//触发订单结束事件
OrderServeFinishedEvent::dispatch($order->offline_order);
}
}
//操作记录
OperationLoggedEvent::dispatch("修改订单: $order->id 的状态为:$status");
}
$order->save();
return $this->success('ok');
}
public function updateOrderCheckSign(Request $request, $order_id)
{
$order = Order::find($order_id);
//合同签署
$check_sign_status = $request->input("check_sign_status");
$order->check_sign_status = $check_sign_status;
$order->save();
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order_id, 1, "admin_sign_status", "行政确认用户已签署合同", auth()->user()->id ?? 0, 4);
//创建群聊
$group_exists = Group::where("order_id", $order_id)->exists();
if ($group_exists) {
$group = new Group();
$group->autoCreateChat($order->id);
}
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order_id, 1, "create_group", "已自动建立群聊", auth()->user()->id ?? 0, 4);
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order_id, 1, "add_user_to_group", "行政已拉用户入群", auth()->user()->id ?? 0, 4);
DmaProcessLog::addUserProcessLog($order->user_id ?? 0, $order_id, 1, "send_group_notice", "系统已发送群公告", auth()->user()->id ?? 0, 5);
return $this->success('ok');
}
public function storeOrderRoleUser(Request $request, Order $order)
{
$role_user_id = $request->input('role_user_id');
$user_id = $request->input("user_id");
$role_id = $request->input('role_id');
$role_user = null;
if ($role_user_id) {
$role_user = ServiceUser::find($role_user_id);
} else if ($user_id) {
$role_user = ServiceUser::where("user_id", $user_id)->first();
}
if (empty($role_user)) {
return $this->failure("服务人员不存在");
}
$role = $role_user->roles()->where('service_roles.id', $role_id)->first();
if (empty($role))
throw new \Exception("用户角色有误");
//订单角色是否存在
// $order_role = ServiceRoleOrder::where('order_id',$order->id)->where('role_id', $role_id)->first();
// if ($order_role) return $this->failure("订单已经有角色【".$role->name."】");
if (empty($role_user->user_id))
return $this->failure("该服务成员未绑定微信信息");
DB::beginTransaction();
ServiceRoleOrder::firstOrCreate(['order_id' => $order->id, 'role_id' => $role->id, 'user_id' => $role_user->user_id]);
// GroupUser::firstOrCreate(['user_id'=>$role_user->user_id, 'group_id'=>$order->group->id, 'role_id'=>$role->id, 'role_name'=>$role->name]);
$groupRoles = [ServiceRole::MAIN_COACH, ServiceRole::COACH, ServiceRole::CUSTOMER, ServiceRole::TUTOR, ServiceRole::PERSONAL_COACH];
if (!empty($order->group->im_chat_id) && in_array($role_id, $groupRoles)) {
GroupUser::addGroupUser($order->group, $role_user, [$role_id]);
}
DB::commit();
//操作记录
OperationLoggedEvent::dispatch("给订单: $order->id 增加服务人员-$role->name :$role_user->name");
DmaProcessLog::addUserProcessLog($order->user_id, $order->id, 1, "add_server_to_group", "行政已拉服务人员入群", auth()->user()->id, 4);
return $this->success('ok');
}
public function deleteOrderRoleUser(Request $request, Order $order)
{
DB::beginTransaction();
$role_id = $request->input("role_id");
$user_id = $request->input("user_id");
$role_order = ServiceRoleOrder::where('order_id', $order->id)->where('user_id', $user_id)->where('role_id', $role_id)->first();
GroupUser::where(['user_id' => $role_order->user_id, 'group_id' => $order->group->id, 'role_id' => $role_order->role_id])->delete();
ServiceRoleOrder::where('order_id', $order->id)->where('user_id', $user_id)->where('role_id', $role_id)->delete();
DB::commit();
if (!empty($order->group->im_chat_id)) {
$owner_ac_cid = make_wangyiyun_accid($order->group->owner_id);
$delete_user_ac_cid = make_wangyiyun_accid($role_order->user_id);
$other_role = ServiceRoleOrder::where('order_id', $order->id)->where('user_id', $user_id)->where('role_id', "<>", $role_id)->first();
if (empty($other_role)) {
//踢人
$imTeam = new Team(config('chat.im.app_id'), config('chat.im.app_secret'));
$imTeam->kick($order->group->im_chat_id, $owner_ac_cid, $delete_user_ac_cid);
}
}
//操作记录
OperationLoggedEvent::dispatch("删除了订单的: $order->id 的服务人员:$role_order->user_id");
return $this->success('ok');
}
/**
* 查询订单方案列表
* @param Request $request
* @return \Illuminate\Http\JsonResponse|void
*/
public function getOrderSchemeList(Request $request)
{
try {
$keyword = $request->get('keyword');
$start_time = $request->get('start_time');
$end_time = $request->get('end_time');
$end_time = date('Y-m-d', strtotime('+1 day', strtotime($end_time)));
// $order_scheme = Order::with('scheme')
// ->when($keyword,function($query) use ($keyword) {
// $query->where('name','like','%'.$keyword."%");
// })
// ->whereHas('scheme',function ($roleQuery) use ($start_time,$end_time){
// if(!empty($start_time)){
// $roleQuery->whereBetween('created_at',[$start_time,$end_time]);
// }
// })
// ->orderBy('created_at','desc')
// ->paginate();
$order_scheme = Order::rightJoin('guide_schemes', 'orders.id', '=', 'guide_schemes.order_id')
->when($keyword, function ($query) use ($keyword) {
$query->where('orders.name', 'like', '%' . $keyword . "%");
})
->where(function ($query) use ($start_time, $end_time) {
if (!empty($start_time)) {
$query->whereBetween('guide_schemes.created_at', [$start_time, $end_time]);
}
})
->orderByDesc('guide_schemes.created_at')
->paginate();
return $this->success('ok', $order_scheme);
} catch (\Exception $e) {
Log::error('getOrderSchemeList:' . $e->getMessage());
return $this->failure($e->getMessage());
}
}
/**
* 导出数据
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function exportOrderSchemeList(Request $request)
{
try {
$keyword = $request->get('keyword');
$start_time = $request->get('start_time');
$end_time = $request->get('end_time');
$end_time = date('Y-m-d', strtotime('+1 day', strtotime($end_time)));
$order_scheme = Order::rightJoin('guide_schemes', 'orders.id', '=', 'guide_schemes.order_id')
->when($keyword, function ($query) use ($keyword) {
$query->where('orders.name', 'like', '%' . $keyword . "%");
})
->where(function ($query) use ($start_time, $end_time) {
if (!empty($start_time)) {
$query->whereBetween('guide_schemes.created_at', [$start_time, $end_time]);
}
})
->orderByDesc('guide_schemes.created_at')
->get()->toArray();
// 下载 Excel 文件
return Excel::download(new OrderSchemeExport($order_scheme), 'Reappraises.xlsx');
} catch (\Exception $e) {
Log::error('getOrderSchemeList:' . $e->getMessage());
return $this->failure($e->getMessage());
}
}
/**
* 通过订单id获取餐单方案
* @param Request $request
* @param Order $order
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function getSchemeByOrderId(Request $request, Order $order)
{
if (empty($order)) {
return $this->failure('订单不存在');
}
$scheme = GuideScheme::where('order_id', $order->id)->first();
return $this->success('ok', $scheme);
}
/**
* 更新方案
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function updateOrderScheme(Request $request)
{
try {
$order_id = $request->input('order_id');
if (empty($order_id)) {
return $this->failure('订单不存在');
}
$scheme_info = GuideScheme::where('order_id', $order_id)->first();
if (empty($scheme_info)) {
return $this->failure('方案不存在');
}
$schemes = $request->input("schemes") ?? [];
$hour = (time() - strtotime($scheme_info->created_at)) / 3600;
if ($hour > 24) {
//插入操作记录
OrderOperateLog::create(['order_id' => $order_id, 'type' => 2]);
}
$scheme_info->update(['scheme' => $schemes]);
return $this->success('ok');
} catch (\Exception $e) {
return $this->failure($e->getMessage());
}
}
/**
* 导出方案信息
* @param Request $request
* @return \Illuminate\Http\JsonResponse|void
*/
public function exportOrderScheme(Request $request)
{
try {
$order_id = $request->get('order_id');
if (empty($order_id)) {
return $this->failure('订单不存在');
}
$scheme = GuideScheme::where('order_id', $order_id)->first();
return Excel::download(new SchemeExport($scheme), 'scheme.xlsx');
} catch (\Exception $e) {
Log::error('exportScheme:' . $e->getMessage());
return $this->failure('导出失败');
}
}
public function addAgreement(Request $request)
{
DB::beginTransaction();
try {
$data = $request->only(['order_id', 'number', 'sign_date', 'material_type', 'sign_id', 'introduce_id', 'introduce_rights', 'quota_id']);
$validated = Validator::make($data, [
'order_id' => 'required|unique:agreement',
'sign_date' => 'required',
'sign_id' => 'required',
'number' => 'required|unique:agreement',
'quota_id' => 'required',
], [
'order_id.unique' => '订单已存在协议',
'order_id.required' => '请选择订单',
'sign_date.required' => '请填写签署日期',
'number.required' => '请填写协议编号',
'number.unique' => '协议编号重复',
'sign_id.required' => '请选择合作商',
'quota_id.required' => '请选择名额归属'
]);
$data['introduce_rights'] = json_encode($data['introduce_rights']);
if ($validated->fails()) {
$errors = $validated->errors()->all();
$error = count($errors) ? $errors[0] : null;
return $this->failure($error);
}
$quota_info = Quota::find($data['quota_id']);
if (empty($quota_info))
return $this->failure('名额归属不为空');
$admin = auth()->user();
$quota_info->num = $quota_info->num - Quota::USE_NUM;
if ($quota_info->num < 0) {
return $this->failure('名额不足');
}
$quota_info->save();
QuotaLog::addQuotaLog($admin, $data['order_id'], Quota::USE_NUM, $quota_info->id);
$agreementModel = Agreement::create($data);
AgreementLog::addAgreementLog($admin, $data['order_id'], $agreementModel->id, "创建了订单协议");
DB::commit();
return $this->success('ok');
} catch (\Exception $e) {
DB::rollBack();
Log::error('addAgreement:' . $e->getMessage());
return $this->failure($e->getMessage());
}
}
public function getAgreement(Request $request)
{
try {
$keyword = $request->get('keyword');
$order_id = $request->get('order_id');
$no_page = $request->get('no_page');
$is_export = $request->get('is_export');
if ($is_export) {
$no_page = true;
}
$query = Agreement::query()->with('signInfo', 'introduceInfo', 'orderInfo', 'quotaInfo');
$query->when($keyword, function ($query) use ($keyword) {
$query->where('number', 'like', "%{$keyword}%");
});
$query->when($order_id, function ($query) use ($order_id) {
$query->where('order_id', $order_id);
});
$query->orderByDesc('id');
if ($no_page) {
$list = $query->get();
} else {
$list = $query->paginate();
}
foreach ($list as $item) {
$item->img = json_decode($item->img);
$item->notice_img = json_decode($item->notice_img);
$item->rights_img = json_decode($item->rights_img);
$item->introduce_rights = json_decode($item->introduce_rights, true);
$item->agency_info = null;
if (empty($item->quotaInfo)) {
continue;
}
$item->agency_info = Agency::where('id', $item->quotaInfo->agency_id)->first();
$item->collaborator_info = Collaborator::where('id', $item->quotaInfo->collaborator_id)->first();
}
if ($is_export) {
return Excel::download(new AgreementExport($list), '协议.xlsx');
}
return $this->success('ok', $list);
} catch (\Exception $e) {
Log::error('getAgreement:' . $e->getMessage());
return $this->failure($e->getMessage());
}
}
public function updateAgreement(Request $request, $id)
{
DB::beginTransaction();
try {
$data = $request->only(['number', 'sign_date', 'material_type', 'sign_id', 'introduce_id', 'introduce_rights', 'quota_id', 'is_receive', 'is_notice', 'notice_img', 'rights_img', 'img']);
$detail = Agreement::findOrFail($id);
$remark = "修改了订单协议:";
if (isset($data['is_notice']) && $data['is_notice']) {
$remark .= "标记通知书.";
}
if (isset($data['is_receive']) && $data['is_receive']) {
$remark .= "标记权益已领取.";
}
if (isset($data['img']) && !empty($data['img'])) {
$remark .= "添加扫描文件.";
}
$admin = auth()->user();
AgreementLog::addAgreementLog($admin, $detail->order_id, $id, $remark);
//查看名额是否修改
if (!empty($data['quota_id']) && ($data['quota_id'] != $detail->quota_id)) {
$old_quota = Quota::find($detail->quota_id);
$old_quota->num = $old_quota->num + Quota::USE_NUM;
$old_quota->save();
QuotaLog::addQuotaLog($admin, $detail->order_id, Quota::USE_NUM, $old_quota->id);
$new_quota = Quota::find($data['quota_id']);
if ($new_quota->num < 0) {
return $this->failure('名额不足');
}
$new_quota->num = $new_quota->num + Quota::USE_NUM;
$new_quota->save();
QuotaLog::addQuotaLog($admin, $detail->order_id, Quota::USE_NUM, $new_quota->id);
AgreementLog::addAgreementLog($admin, $detail->order_id, $id, '修改订单协议名额:旧名额id为:' . $old_quota->id . '|新的名额id为:' . $new_quota->id);
}
$detail->update($data);
DB::commit();
return $this->success('ok');
} catch (\Exception $e) {
DB::rollBack();
Log::error('updateAgreement:' . $e->getMessage());
return $this->failure($e->getMessage());
}
}
public function getAgreementDetail($id, Agreement $agreement)
{
try {
$detail = $agreement->with('signInfo', 'introduceInfo', 'orderInfo')->find($id);
$detail->img = json_decode($detail->img);
$detail->notice_img = json_decode($detail->notice_img);
$detail->rights_img = json_decode($detail->rights_img);
$detail->introduce_rights = json_decode($detail->introduce_rights);
$detail->quota_info = Quota::with('agencyInfo')->where('id', $detail->quota_id)->first();
return $this->success('ok', $detail);
} catch (\Exception $e) {
Log::error('getAgreementDetail:' . $e->getMessage());
return $this->failure($e->getMessage());
}
}
public function getAgreementLog(Request $request, $id, AgreementLog $agreementLog)
{
try {
$is_export = $request->get('is_export');
$query = $agreementLog::query()->with('agreement')->where('agreement_id', $id);
$query->orderByDesc('id');
if ($is_export) {
$list = $query->get();
} else {
$list = $query->paginate();
}
if ($is_export) {
return Excel::download(new AgreementLogExport($list), '协议操作记录.xlsx');
}
return $this->success('ok', $list);
} catch (\Exception $e) {
Log::error('getAgreementLog:' . $e->getMessage());
return $this->failure($e->getMessage());
}
}
public function getStepApply(Request $request)
{
try {
$keyword = $request->get('keyword');
$status = $request->get('status');
$is_export = $request->get('is_export');
$query = UserStepApply::query()->with(['user']);
$query->when(strlen($status) > 0, function ($query) use ($status) {
$query->where('status', $status);
});
$query->whereHas('user', function ($query) use ($keyword) {
$query->where('name', 'like', '%' . $keyword . '%');
});
if ($is_export) {
$list = $query->get();
return Excel::download(new StepApplyExport($list), '订单.xlsx');
} else {
$list = $query->paginate();
}
return $this->success('ok', $list);
} catch (\Exception $e) {
AddErrorLog::dispatch('getStepApply file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage())->onQueue('health');
return $this->failure('获取失败');
}
}
public function updateStepApplyStatus(Request $request, $id)
{
try {
$detail = UserStepApply::findOrFail($id);
if ($request->has('status')) {
$detail->status = $request->input('status');
}
if ($request->has('reason')) {
$detail->reason = $request->input('reason');
}
$detail->save();
return $this->success('ok');
} catch (\Exception $e) {
AddErrorLog::dispatch('updateStepApplyStatus file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage())->onQueue('health');
return $this->failure('更新失败');
}
}
public function getOrderStatList(Request $request)
{
try {
$type = $request->get('type');
$keyword = $request->get('keyword');
$query = Order::query();
$is_export = $request->get('is_export');
if ($type == 0) {
$query->where('pay_status', 'PAID');
}
if ($type == 1) {
$query->whereNotIn('id', function ($sql) {
$sql->where('role_id', ServiceRole::MAIN_COACH)->select('order_id')->from('service_role_orders');
});
}
if ($type == 2) {
$query->whereNotIn('id', function ($sql) {
$sql->where('role_id', ServiceRole::COACH)->select('order_id')->from('service_role_orders');
});
}
if ($type == 3) {
$query->whereNotIn('id', function ($sql) {
$sql->where('role_id', ServiceRole::CUSTOMER)->select('order_id')->from('service_role_orders');
});
}
if ($type == 4) {
$query->leftJoin('users as u', 'u.id', '=', 'orders.user_id')
->where(function ($query) {
$query->whereNull('u.id')
->orWhere(function ($query) {
$query->whereNull('u.name')
->orWhereNull('u.birthday')
->orWhereNull('u.stature');
});
});
}
$query->select('orders.*');
$query->when($keyword, function ($sql) use ($keyword) {
$sql->where('name', 'like', '%' . $keyword . '%')->orWhere('mobile', 'like', '%' . $keyword . '%');
});
if ($is_export) {
$list = $query->get();
return Excel::download(new OrderStatExport($list), '订单统计.xlsx');
}
$list = $query->paginate();
return $this->success('ok', $list);
} catch (\Exception $e) {
AddErrorLog::dispatch('getOrderStatList file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage())->onQueue('health');
return $this->failure('获取失败');
}
}
public function getOrderMarkLog(Request $request, $id)
{
try {
$keyword = $request->input('keyword');
$query = MarkOrderLog::query();
$query->when($keyword, function ($sql) use ($keyword) {
$sql->where('operate_name', 'like', '%' . $keyword . '%')->orWhere('remark', 'like', '%' . $keyword . '%');
});
$query->where('order_id', $id);
$log = $query->paginate();
return $this->success('ok', $log);
} catch (\Exception $e) {
AddErrorLog::dispatch('getOrderMarkLog file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage())->onQueue('health');
return $this->failure('获取失败');
}
}
/**
* 获取图标数据
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function getFatKindsV1(Request $request)
{
$user_id = $request->input('user_id');
if (empty($user_id)) {
return $this->failure('用户id不为空');
}
$user = User::find($user_id);
if (empty($user))
return $this->failure("用户不存在");
$fatService = new FatService();
$res = $fatService->getFatKinds($user);
if (!$res['status']) {
return $this->failure($res['msg']);
}
return $this->success('ok', $res['data'] ?? []);
}
/**
* 获取图表统计
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse
*/
public function getFatStatV1(Request $request)
{
try {
$user_id = $request->input('user_id');
if (empty($user_id)) {
return $this->failure('用户id不为空');
}
$name = $request->input('fat_name');
$start_date = $request->input('start_date');
$end_date = $request->input('end_date');
$user = User::find($user_id);
if (empty($user))
return $this->failure("用户不存在");
$fatService = new FatService();
$res = $fatService->getFatStat($name, $start_date, $end_date, $user);
if (!$res['status']) {
return $this->failure($res['msg']);
}
return $this->success('ok', $res['data'] ?? []);
} catch (\Exception $e) {
AddErrorLog::dispatch('getFatStatV1:' . $e->getMessage())->onQueue('health');
return $this->failure('获取失败');
}
}
}