|
|
|
|
<?php
|
|
|
|
|
/**
|
|
|
|
|
* Created by PhpStorm.
|
|
|
|
|
* User: weizongsong
|
|
|
|
|
* Date: 2019-04-12
|
|
|
|
|
* Time: 22:34
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
|
|
|
|
|
|
use App\Exports\OrdersExport;
|
|
|
|
|
use App\Models\AdminAreaLink;
|
|
|
|
|
use App\Models\Bed;
|
|
|
|
|
use App\Models\OrderItems;
|
|
|
|
|
use App\Models\Orders;
|
|
|
|
|
use App\Models\Project;
|
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
|
|
|
use Spatie\Permission\Models\Role;
|
|
|
|
|
|
|
|
|
|
class OrdersController extends CommonController
|
|
|
|
|
{
|
|
|
|
|
public $bladePath = "admin.orders";
|
|
|
|
|
public $urlPrefix = "admin/orders";
|
|
|
|
|
public $modelName = "订单";
|
|
|
|
|
public $modelClass = Orders::class;
|
|
|
|
|
|
|
|
|
|
public function index(Request $request)
|
|
|
|
|
{
|
|
|
|
|
$projects = (new StatisticsController())->_checkProjects();
|
|
|
|
|
if (!$projects->count()) {
|
|
|
|
|
return $this->error($this->noProjects);
|
|
|
|
|
}
|
|
|
|
|
$project_id = request()->project_id ?? $projects->first()->id;
|
|
|
|
|
$project = Project::find($project_id);
|
|
|
|
|
|
|
|
|
|
$month = request()->month ?? date("Y-m");
|
|
|
|
|
$months = (new StatisticsController())->_getMonths();
|
|
|
|
|
|
|
|
|
|
$start_timestamp = strtotime($month);
|
|
|
|
|
$end_timestamp = strtotime("+1 month", strtotime($month));
|
|
|
|
|
|
|
|
|
|
$this->model = $this->model->whereRaw("UNIX_TIMESTAMP(`created_at`) >= " . $start_timestamp . " and UNIX_TIMESTAMP(`created_at`) < " . $end_timestamp);
|
|
|
|
|
$this->model = $this->model->where("project_id", $project_id);
|
|
|
|
|
|
|
|
|
|
if ($request->keyword) {
|
|
|
|
|
$this->model = $this->model->where(function ($query) use ($request) {
|
|
|
|
|
$query->where("serial", "like", "%" . $request->keyword . "%")
|
|
|
|
|
->orWhere("contact", "like", "%" . $request->keyword . "%")
|
|
|
|
|
->orWhere("mobile", "like", "%" . $request->keyword . "%");
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 判断是否护士长
|
|
|
|
|
$userId = auth()->id();
|
|
|
|
|
$roleId = Role::where('name', 'like', '%护士长%')->where('guard_name', 'admin')->value('id');
|
|
|
|
|
$hushizhang = DB::table('model_has_roles')->where('role_id', $roleId)
|
|
|
|
|
->where('model_type', 'App\Admin')->where('model_id', $userId)->count();
|
|
|
|
|
if ($hushizhang) {
|
|
|
|
|
$user = auth()->user();
|
|
|
|
|
$areaId = AdminAreaLink::where('project_id', $project_id)->where('admin_id', $user->id)->pluck('area_id');
|
|
|
|
|
$bedList = Bed::whereIn('area_id', $areaId)->pluck('id');
|
|
|
|
|
$this->model = $this->model->whereIn('bed_id', $bedList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($request->date) {
|
|
|
|
|
$this->model = $this->model->whereHas("orderItems", function ($query) use ($month, $request) {
|
|
|
|
|
$query->where("service_date", $month . "-" . $request->date);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$data = $this->model
|
|
|
|
|
->with([
|
|
|
|
|
"orderItems",
|
|
|
|
|
"firstItem",
|
|
|
|
|
"lastItem",
|
|
|
|
|
"project",
|
|
|
|
|
"product",
|
|
|
|
|
"customer",
|
|
|
|
|
"manager",
|
|
|
|
|
"bed" => function ($query) {
|
|
|
|
|
$query->with(["room", "building", "area"]);
|
|
|
|
|
}
|
|
|
|
|
])
|
|
|
|
|
->orderBy("id", "desc");
|
|
|
|
|
|
|
|
|
|
if (request()->is_export) {
|
|
|
|
|
$data = $data->get();
|
|
|
|
|
foreach ($data as $order) {
|
|
|
|
|
$factors = json_decode($order->factors, true);
|
|
|
|
|
$order->department = (collect($factors)->where('factor_name', '所在科室')->first()['factor_item_name']) ?? '';
|
|
|
|
|
}
|
|
|
|
|
return Excel::download(new OrdersExport($data), "订单导出.xlsx");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$data = $data->paginate(10);
|
|
|
|
|
foreach ($data as $order) {
|
|
|
|
|
$order = $order->refreshTotal();
|
|
|
|
|
$factors = json_decode($order->factors, true);
|
|
|
|
|
$order->department = (collect($factors)->where('factor_name', '所在科室')->first()['factor_item_name']) ?? '';
|
|
|
|
|
}
|
|
|
|
|
return view($this->bladePath . ".index", compact("data", "project_id", "month", "project"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function changeItem(Request $request)
|
|
|
|
|
{
|
|
|
|
|
$item = OrderItems::with(["order", "siblings"])->find($request->item_id);
|
|
|
|
|
if (request()->is_batch) {
|
|
|
|
|
$order_items = $item->siblings;
|
|
|
|
|
$total = $item->siblings->count();
|
|
|
|
|
} else {
|
|
|
|
|
$order_items = [$item];
|
|
|
|
|
$total = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DB::beginTransaction();
|
|
|
|
|
try {
|
|
|
|
|
foreach ($order_items as $order_item) {
|
|
|
|
|
if ($request->has("total") && $order_item->paid_at && $request->total != $order_item->total) {
|
|
|
|
|
return $this->error("子订单已扣款,不支持后台更改价格,请通过其他方法进行更改");
|
|
|
|
|
}
|
|
|
|
|
if ($request->has("total") && $order_item->total == 0 && $request->total != $order_item->total) {
|
|
|
|
|
return $this->error("未服务子订单不支持后台更改价格,请通过其他方法进行更改");
|
|
|
|
|
}
|
|
|
|
|
if ($request->has("total")) {
|
|
|
|
|
$order_item->update([
|
|
|
|
|
"total" => $request->total
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
if ($request->factor_item) {
|
|
|
|
|
$factors = json_decode($order_item->factors, true);
|
|
|
|
|
foreach ($factors as &$factor) {
|
|
|
|
|
if (!$factor["used_for_fee"]) continue;
|
|
|
|
|
foreach ($request->factor_item as $k => $v) {
|
|
|
|
|
if ($k != $factor["factor_item_id"]) continue;
|
|
|
|
|
$factor["fee_percent"] = $v["fee_percent"];
|
|
|
|
|
$factor["fee"] = $v["fee"];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$order_item->update([
|
|
|
|
|
"factors" => json_encode($factors)
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
DB::commit();
|
|
|
|
|
return $this->success("处理成功" . $total . "条数据!");
|
|
|
|
|
} catch (\Exception $exception) {
|
|
|
|
|
DB::rollBack();
|
|
|
|
|
return $this->error($exception->getMessage() . $exception->getLine());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getItem($id)
|
|
|
|
|
{
|
|
|
|
|
$order_item = OrderItems::with("order")->find($id);
|
|
|
|
|
$order_item = $order_item->calculateFee();
|
|
|
|
|
return $this->ajaxResponse($order_item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function score()
|
|
|
|
|
{
|
|
|
|
|
$projects = (new StatisticsController())->_checkProjects();
|
|
|
|
|
if (!$projects->count()) {
|
|
|
|
|
return $this->error($this->noProjects);
|
|
|
|
|
}
|
|
|
|
|
$project_id = request()->project_id ?? $projects->first()->id;
|
|
|
|
|
|
|
|
|
|
$user = auth()->user();
|
|
|
|
|
$areaId = AdminAreaLink::where('project_id', $project_id)->where('admin_id', $user->id)->pluck('area_id');
|
|
|
|
|
$bedList = Bed::whereIn('area_id', $areaId)->pluck('id');
|
|
|
|
|
|
|
|
|
|
$this->model = $this->model->where("project_id", $project_id)->whereNotNull("scored_at");
|
|
|
|
|
if (request()->keyword) {
|
|
|
|
|
$this->model = $this->model->where(function ($query) {
|
|
|
|
|
$query->where("serial", "like", "%" . request()->keyword . "%")
|
|
|
|
|
->orWhere("contact", "like", "%" . request()->keyword . "%")
|
|
|
|
|
->orWhere("mobile", "like", "%" . request()->keyword . "%");
|
|
|
|
|
})->where(function ($query) use ($bedList) {
|
|
|
|
|
if ($bedList->isNotEmpty()) {
|
|
|
|
|
$query->whereIn('bed_id', $bedList);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$data = $this->model
|
|
|
|
|
->with([
|
|
|
|
|
"orderItems",
|
|
|
|
|
"project",
|
|
|
|
|
"product",
|
|
|
|
|
"customer",
|
|
|
|
|
"manager",
|
|
|
|
|
"bed" => function ($query) {
|
|
|
|
|
$query->with(["room", "building", "area"]);
|
|
|
|
|
}
|
|
|
|
|
])
|
|
|
|
|
->orderBy("id", "desc")
|
|
|
|
|
->paginate(10);
|
|
|
|
|
return view($this->bladePath . ".score", compact("data", "project_id"));
|
|
|
|
|
}
|
|
|
|
|
}
|