You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

780 lines
32 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace App\Http\Controllers\Customer;
use App\Models\Area;
use App\Models\Balance;
use App\Models\Building;
use App\Models\Orders;
use App\Models\Paramedic;
use App\Models\Patient;
use App\Models\Product;
use App\Models\ProductItems;
use App\Models\ProductParamedicLevel;
use App\Models\Recharge;
use App\Notifications\CustomerOrderCreated;
use App\Notifications\RechargePaid;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Notification;
class OrdersController extends CommonController
{
/**
* @OA\Get(
* path="/customer/get-product-by-project/{id}",
* tags={"用户端订单处理"},
* summary="V2-根据医院获取产品详情附带价格因子",
* description="根据医院获取产品详情附带价格因子",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="医院ID"),
* @OA\Response(
* response="200",
* description="根据医院获取产品详情附带价格因子"
* )
* )
*/
public function getProductByProject($id)
{
$product = (new Product())->with([
"factors" => function ($query) {
$query->select("id", "name", "product_id")->orderBy("myindex")
->with(["factorItems" => function ($query) {
$query->select("id", "name", "factor_id")->orderBy("myindex");
}]);
}])
->where("project_id", $id)
->select("id", "name", "project_id")
->orderBy("myindex")
->first();
$product->min_price = (new ProductItems())->where("product_id", $product->id)->min("price");
$max_price = (new ProductItems())->where("product_id", $product->id)->max("price");
$max_paramedic_price = (new ProductParamedicLevel())->where("product_id", $product->id)->max("price");
$max_factor_total = DB::select(DB::raw("select * from (select sum(max_price) as max_total,product_id from (select max(price) as max_price,product.id as product_id from product inner join factor on factor.product_id = product.id inner join factor_items on factor.id = factor_items.factor_id group by factor_items.factor_id) as a group by a.product_id) as b left join product on product.id = b.product_id where product.id=" . $product->id));
$product->max_price = ($max_price + $max_paramedic_price + $max_factor_total[0]->max_total);
return response()->json($product->toArray());
}
/**
* @OA\Get(
* path="/customer/get-areas-by-project/{id}",
* tags={"用户端订单处理"},
* summary="V2-获取医院病区",
* description="获取医院病区",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="project id"),
* @OA\Response(
* response="200",
* description="获取医院床位"
* )
* )
*/
public function getAreasByProject($id)
{
$buildings = (new Building())->where("project_id", $id)->with(["areas" => function ($query) {
$query->select("id", "building_id", "name", "myindex")->orderBy("myindex");
}])->select("id", "project_id", "name", "myindex")->orderBy("myindex")->get();
return response()->json($buildings->toArray());
}
/**
* @OA\Get(
* path="/customer/get-beds-by-area/{id}",
* tags={"用户端订单处理"},
* summary="V2-根据病区获取病床",
* description="根据病区获取病床",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="area id"),
* @OA\Response(
* response="200",
* description="根据病区获取病床"
* )
* )
*/
public function getBedsByArea($id)
{
$area = (new Area())->with(["beds" => function ($query) {
$query->with(["room" => function ($query) {
$query->select("id", "name");
}])->select("id", "name", "area_id", "room_id");
}])->find($id);
return response()->json($area->beds->toArray());
}
/**
* @OA\Get(
* path="/customer/get-available-paramedics",
* tags={"用户端订单处理"},
* summary="V2-获取可用护工列表(已基本准确,需进一步打磨)",
* description="获取可用护工列表",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="bed_id", in="query", @OA\Schema(type="integer"), required=true, description="床位ID"),
* @OA\Parameter(name="sex", in="query", @OA\Schema(type="string"), required=true, description="性别:[男/女]"),
* @OA\Parameter(name="start_date", in="query", @OA\Schema(type="string"), required=false, description="日期,默认为当天"),
* @OA\Parameter(name="factors", in="query", @OA\Schema(type="object"), required=true, description="价格因子选择,[{id:1,factor_item_id:1},{...}],如果为空数组请传[]"),
* @OA\Response(
* response="200",
* description="获取可用护工列表"
* )
* )
*/
public function getAvailableParamedics(Request $request)
{
Log::channel("daily_customer_order_request")->info($request->all());
$paramedics = (new Orders())->getAvailableParamedics();
return response()->json($paramedics);
}
/**
* @OA\Get(
* path="/customer/get-patients",
* tags={"用户端订单处理"},
* summary="获取被护理人列表",
* description="获取被护理人列表",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description="获取被护理人列表"
* )
* )
*/
public function getPatients()
{
$patients = $this->customer->patients;
return response()->json($patients);
}
/**
* @OA\POST(
* path="/customer/create-patient",
* tags={"用户端订单处理"},
* summary="创建被护理人",
* description="创建被护理人",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="name", in="query", @OA\Schema(type="string"), required=true, description="姓名"),
* @OA\Parameter(name="sex", in="query", @OA\Schema(type="string"), required=true, description="性别:[男/女]"),
* @OA\Parameter(name="age", in="query", @OA\Schema(type="integer"), required=true, description="年龄,只需填写入院时的年龄"),
* @OA\Response(
* response="200",
* description="创建被护理人"
* )
* )
*/
public function createPatient()
{
$data = [
"customer_id" => $this->customer->id,
"name" => request()->name,
"sex" => request()->sex,
"age" => request()->age
];
$vo = (new Patient())->create($data);
return response()->json($vo);
}
/**
* @OA\Get(
* path="/customer/get-orders",
* tags={"用户端订单处理"},
* summary="V2-获取订单列表",
* description="获取订单列表",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="keyword", in="query", @OA\Schema(type="string"), required=false, description="查询关键词"),
* @OA\Parameter(name="page", in="query", @OA\Schema(type="integer"), required=false, description="当前页码默认为1"),
* @OA\Parameter(name="page_size", in="query", @OA\Schema(type="integer"), required=false, description="每页数量默认为5"),
* @OA\Parameter(name="status", in="query", @OA\Schema(type="string"), required=false, description="订单状态:[unconfirmed=>待确认,unassigned=>待派单,ongoing=>进行中,finished=>已完成]"),
* @OA\Response(
* response="200",
* description="获取订单列表"
* )
* )
*/
public function list()
{
$data = (new Orders())->ofCustomer($this->customer->id);
//$data = new Orders();
if (request()->keyword) {
$keyword = request()->keyword;
$data = $data->where(function ($query) use ($keyword) {
$query
->where("serial", "like", "%{$keyword}%")
->orWhereHas("patient", function ($query) use ($keyword) {
$query->where("name", "like", "%{$keyword}%");
})->orWhereHas("paramedic", function ($query) use ($keyword) {
$query->where("name", "like", "%{$keyword}%");
});
});
}
try {
$status = "STATUS_" . strtoupper(request()->status);
$data = $data->where("status", constant(Orders::class . "::{$status}"));
} catch (\Exception $exception) {
//
}
$page_size = request()->page_size ? (int)request()->page_size : 5;
$data = $data->with([
"customer",
"project",
"product",
"patient",
"productItem",
"building",
"bed" => function ($query) {
$query->with(["room", "building"]);
},
"paramedic"
])->paginate($page_size);
foreach ($data as $order) {
$order = $order->refreshTotal();
}
return response()->json($data->toArray());
}
/**
* @OA\Get(
* path="/customer/get-order/{id}",
* tags={"用户端订单处理"},
* summary="V2-获取订单详情",
* description="获取订单详情",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="id"),
* @OA\Response(
* response="200",
* description="获取订单详情"
* )
* )
*/
public function getOrder($id)
{
$order = (new Orders())->with([
"orderItems" => function ($query) {
$query->with(["bed", "paramedic", "productParamedicLevel", "paramedicLevel"]);
},
"project",
"product",
"customer",
"manager",
"patient",
"productItem",
"productParamedicLevel",
"paramedicLevel",
"bed" => function ($query) {
$query->with(["room", "building"]);
},
"paramedic"
])->find($id);
$order = $order->refreshTotal();
$order->balance = $order->customer->balance;
return response()->json($order->toArray());
}
/**
* @OA\Get(
* path="/customer/get-project-paramedics/{project_id}",
* tags={"用户端订单处理"},
* summary="V2-获取护工列表",
* description="获取护工列表",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="project_id", in="path", @OA\Schema(type="integer"), required=true, description="project_id"),
* @OA\Parameter(name="order_by", in="query", @OA\Schema(type="string"), required=false, description="排序方式age|work_years|stars(暂不支持)"),
* @OA\Parameter(name="asc_or_desc", in="query", @OA\Schema(type="string"), required=false, description="升序或降序默认升序asc"),
* @OA\Parameter(name="page", in="query", @OA\Schema(type="integer"), required=false, description="当前页码默认为1"),
* @OA\Parameter(name="page_size", in="query", @OA\Schema(type="integer"), required=false, description="每页数量默认为5"),
* @OA\Response(
* response="200",
* description="获取护工列表"
* )
* )
*/
public function getProjectParamedics($project_id)
{
$model = new Paramedic();
$model = $model->ofProject($project_id);
$model = $model->where("status", 1);
$model = $model->with(["project", "levelInProject"]);
$model = $model->withCount(["orders"]);
$model = $model->select("id", "name", "avatar", "sex", "birthday", "hometown", "work_years", "paramedic_level_id", "project_id");
$asc_or_desc = request()->asc_or_desc == "desc" ? "desc" : "asc";
switch (request()->order_by) {
case "age":
$order_by = "birthday";
$asc_or_desc = $asc_or_desc == "desc" ? "asc" : "desc";
break;
case "work_years":
$order_by = "work_years";
break;
default:
$order_by = "id";
}
$page_size = request()->page_size ?? 5;
$paramedics = $model->orderBy($order_by, $asc_or_desc)->paginate($page_size);
return response()->json($paramedics ? $paramedics->toArray() : null);
}
/**
* @OA\Get(
* path="/customer/get-paramedic/{id}",
* tags={"用户端订单处理"},
* summary="V2-获取护工详情",
* description="获取护工详情",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="id"),
* @OA\Response(
* response="200",
* description="获取护工详情"
* )
* )
*/
public function getParamedic($id)
{
$paramedic = (new Paramedic())->with(["level", "project"])->find($id);
return response()->json($paramedic ? $paramedic->toArray() : null);
}
/**
* @OA\POST(
* path="/customer/create-order",
* tags={"用户端订单处理"},
* summary="V2-创建订单",
* description="创建订单",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="product_id", in="query", @OA\Schema(type="integer"), required=true, description="产品id"),
* @OA\Parameter(name="factors", in="query", @OA\Schema(type="object"), required=true, description="价格因子选择,[{id:1,factor_item_id:1},{...}],如果为空数组请传[]"),
* @OA\Parameter(name="bed_id", in="query", @OA\Schema(type="integer"), required=true, description="床位id"),
* @OA\Parameter(name="paramedic_id", in="query", @OA\Schema(type="integer"), required=false, description="护工id"),
* @OA\Parameter(name="patient_name", in="query", @OA\Schema(type="integer"), required=true, description="被看护人姓名"),
* @OA\Parameter(name="patient_sex", in="query", @OA\Schema(type="integer"), required=true, description="被看护人性别"),
* @OA\Parameter(name="from_date", in="query", @OA\Schema(type="string"), required=true, description="开始日期"),
* @OA\Parameter(name="to_date", in="query", @OA\Schema(type="string"), required=true, description="结束日期"),
* @OA\Parameter(name="contact", in="query", @OA\Schema(type="string"), required=false, description="家属姓名"),
* @OA\Parameter(name="mobile", in="query", @OA\Schema(type="string"), required=false, description="家属电话"),
* @OA\Response(
* response="200",
* description="创建订单"
* )
* )
*/
public function createOrder()
{
DB::beginTransaction();
try {
$has_orders = Orders::where("customer_id", $this->customer->id)->whereIn("status", [Orders::STATUS_UNCONFIRMED, Orders::STATUS_UNASSIGNED, Orders::STATUS_ONGOING])->count();
if ($has_orders) {
return response()->json([
"errorcode" => "0",
"errormsg" => "您有即将开始或正在进行中的订单,暂不可以再次下单"
]);
}
$request = request();
$product = Product::find($request->product_id);
if ($request->paramedic_id) {
$paramedic = Paramedic::withCount(["orders" => function ($query) use ($request) {
$query->where("status", Orders::STATUS_ONGOING);
//todo:计算自动结单对当前所选日期的订单数的影响
}])->find($request->paramedic_id);
$product_paramedic_level = (new ProductParamedicLevel())->where("paramedic_level_id", $paramedic->paramedic_level_id)->first();
$product_item = (new ProductItems())->where("patient_quantity", "<=", $paramedic->orders_count + 1)->orderBy("patient_quantity", "desc")->first();
} else {
$product_paramedic_level = (new ProductParamedicLevel())->where("product_id", $request->product_id)->where("price", 0)->first();
$product_item = (new ProductItems())->where("product_id", $request->product_id)->where("patient_quantity", 1)->first();
}
$price = $product_item->price + $product_paramedic_level->price;
$factors = (new Orders())->requestFactorsToOrderFactors();
$price += collect($factors)->sum("price");
$patient = Patient::firstOrCreate([
"customer_id" => $this->customer->id,
"name" => $request->patient_name,
"sex" => $request->patient_sex
]);
$order = (new Orders())->create([
"customer_id" => $this->customer->id,
"project_id" => $product->project_id,
"product_id" => $request->product_id,
"patient_id" => $patient->id,
"contact" => $request->contact,
"mobile" => $request->mobile,
"from_date" => $request->from_date,
"to_date" => $request->to_date,
"product_item_id" => $product_item->id,
"product_paramedic_level_id" => $product_paramedic_level->id,
"bed_id" => $request->bed_id,
"paramedic_id" => $request->paramedic_id,
"price" => $price,
"factors" => json_encode($factors)
]);
$order->getSerial();
if ($order->project->managers) {
foreach ($order->project->managers as $manager) {
Notification::send($manager, new CustomerOrderCreated($order));
}
}
DB::commit();
return $this->getOrder($order->id);
} catch (\Exception $exception) {
DB::rollBack();
return response()->json([
"errorcode" => $exception->getCode(),
"errormsg" => $exception->getMessage()
]);
}
}
/**
* @OA\POST(
* path="/customer/reserve-order/{id}",
* tags={"用户端订单处理"},
* summary="预约/取消预约护工",
* description="预约/取消预约护工",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="订单id"),
* @OA\Parameter(name="paramedic_id", in="query", @OA\Schema(type="integer"), required=false, description="预约的护工id为空表示取消预约护工恢复等待管理老师安排"),
* @OA\Response(
* response="200",
* description="预约/取消预约护工"
* )
* )
*/
public function reserveOrder($id)
{
$order = (new Orders())->with("orderItems")->find($id);
if ($order->status !== Orders::STATUS_UNCONFIRMED && $order->status !== Orders::STATUS_UNASSIGNED) {
return response()->json([
"errorcode" => 50001,
"errormsg" => "订单状态不适配"
]);
}
if (Carbon::parse(date("Y-m-d"))->greaterThanOrEqualTo($order->from_date)) {
return response()->json([
"errorcode" => 50002,
"errormsg" => "开始服务日需晚于当前日期才可以进行预约。请联系管理老师或取消订单"
]);
}
DB::beginTransaction();
try {
$order->update([
"paramedic_id" => request()->paramedic_id
]);
DB::commit();
return response()->json($order);
} catch (\Exception $exception) {
DB::rollBack();
return response()->json([
"errorcode" => $exception->getCode(),
"errormsg" => $exception->getMessage()
]);
}
}
/**
* @OA\POST(
* path="/customer/cancel-order/{id}",
* tags={"用户端订单处理"},
* summary="V2-取消订单",
* description="取消订单",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="订单id"),
* @OA\Response(
* response="200",
* description="取消订单"
* )
* )
*/
public function cancelOrder($id)
{
$order = (new Orders())->with("orderItems")->find($id);
Log::info($order);
if ($order->status !== Orders::STATUS_UNCONFIRMED) {
return response()->json([
"errorcode" => 50001,
"errormsg" => "订单状态不适配"
]);
}
DB::beginTransaction();
try {
foreach ($order->orderItems as $orderItem) {
$orderItem->delete();
}
$order->delete();
DB::commit();
return response()->json($order);
} catch (\Exception $exception) {
DB::rollBack();
return response()->json([
"errorcode" => $exception->getCode(),
"errormsg" => $exception->getMessage()
]);
}
}
/**
* @OA\Get(
* path="/customer/get-reservable-paramedics/{order_id}",
* tags={"用户端订单处理"},
* summary="获取可预约的护工",
* description="获取可预约的护工",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="order_id", in="path", @OA\Schema(type="integer"), required=false, description="订单id"),
* @OA\Response(
* response="200",
* description="获取可预约的护工"
* )
* )
*/
public function getReservableParamedics($order_id)
{
$order = (new Orders())->find($order_id);
if ($order->status !== Orders::STATUS_UNCONFIRMED && $order->status !== Orders::STATUS_UNASSIGNED) {
return response()->json([
"errorcode" => 50001,
"errormsg" => "订单状态不适配"
]);
}
if (Carbon::parse(date("Y-m-d"))->greaterThanOrEqualTo($order->from_date)) {
return response()->json([
"errorcode" => 50002,
"errormsg" => "开始服务日需晚于当前日期才可以进行预约。请联系管理老师或取消订单"
]);
}
$paramedics = (new Paramedic())
->where("status", Paramedic::STATUS_ACTIVE)
->where("project_id", $order->project_id)
->whereDoesntHave("orders", function ($query) use ($order) {
//订单正在进行,或者未确认|未派单
$query->whereIn("status", [Orders::STATUS_UNCONFIRMED, Orders::STATUS_UNASSIGNED, Orders::STATUS_ONGOING]);
})->paginate(10);
return response()->json($paramedics->toArray());
}
/**
* @OA\Get(
* path="/customer/recharge",
* tags={"用户端订单处理"},
* summary="V2-获取充值接口信息",
* description="获取充值接口信息",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="money", in="query", @OA\Schema(type="number"), required=true, description="充值金额"),
* @OA\Parameter(name="order_id", in="query", @OA\Schema(type="integer"), required=false, description="订单id表示需要结单的id"),
* @OA\Response(
* response="200",
* description="获取充值接口信息"
* )
* )
*/
public function recharge()
{
$openid = $this->customer->openid;
$unifiedOrder = new \UnifiedOrderPub();
$jsApi = new \JsApiPub();
$recharge = (new Recharge())->create([
"customer_id" => $this->customer->id,
"money" => request()->money,
"order_id" => request()->order_id,
"payment" => "weixin",
"merchant_id" => env("WEIXINPAY_MCHID")
]);
$recharge = $recharge->getSerial();
//设置统一支付接口参数
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//spbill_create_ip已填,商户无需重复填写
//sign已填,商户无需重复填写
$unifiedOrder->setParameter("openid", $openid);//openid
$unifiedOrder->setParameter("body", "充值" . request()->money . "");//商品描述
$unifiedOrder->setParameter("out_trade_no", $recharge->serial);//商户订单号
$unifiedOrder->setParameter("total_fee", $recharge->money * 100);//总金额
$unifiedOrder->setParameter("notify_url", get_http_type() . $_SERVER["HTTP_HOST"] . "/customer/pay-callback");//通知地址
$unifiedOrder->setParameter("trade_type", "JSAPI");//交易类型
//非必填参数,商户可根据实际情况选填
//$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号
//$unifiedOrder->setParameter("device_info","XXXX");//设备号
//$unifiedOrder->setParameter("attach","XXXX");//附加数据
//$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间
//$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间
//$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记
//$unifiedOrder->setParameter("openid","XXXX");//用户标识
//$unifiedOrder->setParameter("produc,"XXXX");//商品ID
//生成预支付ID
$prepay_id = $unifiedOrder->getPrepayId();
if (!$prepay_id) {
return response()->json([
"errorcode" => "60000",
"errormsg" => "生成支付请求失败"
]);
}
//第三步,前端调起支付
$jsApi->setPrepayId($prepay_id);
$jsApiParameters = $jsApi->getParameters();
return response()->json(compact("recharge", "jsApiParameters"));
}
/**
* @OA\Get(
* path="/customer/get-balances",
* tags={"用户端订单处理"},
* summary="V2-获取资金流水信息",
* description="获取资金流水信息",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="page", in="query", @OA\Schema(type="number"), required=false, description="页码"),
* @OA\Response(
* response="200",
* description="获取资金流水信息"
* )
* )
*/
public function getBalances()
{
$balances = (new Balance())->where("customer_id", $this->customer->id)->with([
"order" => function ($query) {
$query->select("id", "serial");
}
])->select("id", "customer_id", "money", "balance", "belongs_type", "belongs_id", "remark", "order_id", "created_at")->orderBy("id", "desc")->paginate(10);
return response()->json($balances->toArray());
}
/**
* @OA\POST(
* path="/customer/score-order/{id}",
* tags={"用户端订单处理"},
* summary="评价订单",
* description="评价订单",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="订单id"),
* @OA\Parameter(name="score", in="query", @OA\Schema(type="number"), required=true, description="分数5分制0.5分为一个阶梯"),
* @OA\Parameter(name="comment", in="query", @OA\Schema(type="string"), required=false, description="评语不超过255字节"),
* @OA\Response(
* response="200",
* description="评价订单"
* )
* )
*/
public function scoreOrder($id)
{
$order = (new Orders())->where("customer_id", $this->customer->id)->find($id);
if (!$order) {
return response()->json([
"errorcode" => 40004,
"errormsg" => "没找到订单"
]);
}
if ($order->status !== Orders::STATUS_FINISHED) {
return response()->json([
"errorcode" => 50001,
"errormsg" => "订单状态不适配"
]);
}
DB::beginTransaction();
try {
$order->update([
"score" => request()->score,
"comment" => request()->comment,
"scored_at" => date("Y-m-d H:i:s"),
]);
DB::commit();
return response()->json($order);
} catch (\Exception $exception) {
DB::rollBack();
return response()->json([
"errorcode" => $exception->getCode(),
"errormsg" => $exception->getMessage()
]);
}
}
/**
* @OA\POST(
* path="/customer/delete-score-order/{id}",
* tags={"用户端订单处理"},
* summary="删除订单评价",
* description="删除订单评价",
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="订单id"),
* @OA\Response(
* response="200",
* description="删除订单评价"
* )
* )
*/
public function deleteScoreOrder($id)
{
$order = (new Orders())->where("customer_id", $this->customer->id)->find($id);
if (!$order) {
return response()->json([
"errorcode" => 40004,
"errormsg" => "没找到订单"
]);
}
if ($order->status !== Orders::STATUS_FINISHED) {
return response()->json([
"errorcode" => 50001,
"errormsg" => "订单状态不适配"
]);
}
DB::beginTransaction();
try {
$order->update([
"score" => null,
"comment" => null,
"scored_at" =>null
]);
DB::commit();
return response()->json($order);
} catch (\Exception $exception) {
DB::rollBack();
return response()->json([
"errorcode" => $exception->getCode(),
"errormsg" => $exception->getMessage()
]);
}
}
}