|
|
@@ -10,6 +10,7 @@ use App\Traits\ServiceAppAop;
|
|
|
use App\WorkOrder;
|
|
|
use App\WorkOrderType;
|
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
|
+use Illuminate\Database\Eloquent\Collection;
|
|
|
use Illuminate\Support\Carbon;
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
|
|
@@ -19,18 +20,9 @@ class WorkOrderService
|
|
|
|
|
|
protected $modelClass = WorkOrder::class;
|
|
|
|
|
|
- protected $work_type_relation = [
|
|
|
- '拦截' => '订单拦截',
|
|
|
- '信息更改' => '订单收件信息修改',
|
|
|
- '其他' => '订单其他异常',
|
|
|
- '快递异常' => '订单快递异常',
|
|
|
- '错漏发' => '快递错漏发',
|
|
|
- '破损' => '快递破损',
|
|
|
- ];
|
|
|
-
|
|
|
/**
|
|
|
* 获取可生成工单的问题件类型
|
|
|
- * @return Builder[]|\Illuminate\Database\Eloquent\Collection
|
|
|
+ * @return Builder[]|Collection
|
|
|
*/
|
|
|
public function getIssueType()
|
|
|
{
|
|
|
@@ -44,75 +36,107 @@ class WorkOrderService
|
|
|
*/
|
|
|
public function build($params): array
|
|
|
{
|
|
|
- $types = [];
|
|
|
- $work_order_types = [];
|
|
|
- $data = Carbon::now();
|
|
|
- $creator_id = Auth::user()['id'];
|
|
|
- $parent = WorkOrderType::query()->firstOrCreate(['name' => '订单', 'prent_id' => 0, 'level' => 1]);
|
|
|
foreach ($params as $param) {
|
|
|
- $order = Order::query()->where('code', $param['order_no'])->first();
|
|
|
$type_name = $param['order_issue_type'];
|
|
|
- if (!$param['order_issue_type']) {
|
|
|
- $order_issue_type_id = 0;
|
|
|
- $work_order_type_id = 0;
|
|
|
+ if ($type_name == '拦截') {
|
|
|
+ $this->createInterceptWorkOrder($param);
|
|
|
+ } else if ($type_name == '信息更改') {
|
|
|
+ $this->createInformationChangeWorkOrder($param);
|
|
|
+ } else if ($type_name == '快递异常') {
|
|
|
+ $this->createExpressAbnormalWorkOrder($param);
|
|
|
+ } else if ($type_name == '错漏发') {
|
|
|
+ $this->createMistakeWorkOrder($param);
|
|
|
+ } else if ($type_name == '破损') {
|
|
|
+ $this->createDamagedWorkOrder($param);
|
|
|
} else {
|
|
|
- if (!array_key_exists($type_name, $types)) {
|
|
|
- $types[$type_name] = OrderIssueType::query()->where('name', $type_name)->first();
|
|
|
- $work_order_type_name = $this->work_type_relation[$type_name] ?? $type_name;
|
|
|
- $work_order_types[$type_name] = WorkOrderType::query()->firstOrCreate(
|
|
|
- ['name' => $work_order_type_name],
|
|
|
- ['prent_id' => $parent['id'], 'table_name' => 'orders', 'level' => 2]
|
|
|
- );
|
|
|
- }
|
|
|
- $order_issue_type_id = $types[$type_name]['id'] ?? 0;
|
|
|
- $work_order_type_id = $work_order_types[$type_name]['id'] ?? 0;
|
|
|
- }
|
|
|
- switch ($type_name) {
|
|
|
- case '拦截':
|
|
|
- $remark = "拦截订单";
|
|
|
- break;
|
|
|
- case '信息更改':
|
|
|
- case '其他':
|
|
|
- case '快递异常':
|
|
|
- case '错漏发':
|
|
|
- case '破损':
|
|
|
- $remark = $param['remark'] ?? '';
|
|
|
- break;
|
|
|
- default:
|
|
|
- $work_order_type_id = 0;
|
|
|
- $remark = $param['remark'] ?? '';
|
|
|
- $order_issue_type_id = 0;
|
|
|
- break;
|
|
|
- }
|
|
|
- $inner_params[] = [
|
|
|
- 'order_id' => $order['id'],
|
|
|
- 'creator_id' => $creator_id,
|
|
|
- 'work_order_type_id' => $work_order_type_id ?? 0,
|
|
|
- 'owner_id' => $order['owner_id'] ?? '',
|
|
|
- 'grad' => $param['grad'] ?? 1,
|
|
|
- 'remark' => $remark,
|
|
|
- 'outer_table_name' => 'orders',
|
|
|
- 'order_issue_type_id' => $order_issue_type_id ?? 0,
|
|
|
- 'uniquely_tag' => $order['code'] ?? null,
|
|
|
- 'status' => 1,
|
|
|
- 'created_at' => $data,
|
|
|
- 'updated_at' => $data,
|
|
|
- ];
|
|
|
- }
|
|
|
- if (isset($inner_params)) {
|
|
|
- WorkOrder::query()->insert($inner_params);
|
|
|
- $workOrders = WorkOrder::query()->with('owner','order')->whereIn('order_id',data_get($inner_params,"*.order_id"))->where('created_at',">=",$data)->get();
|
|
|
- foreach ($workOrders as $workOrder){
|
|
|
- $user = Auth::user();
|
|
|
- $remark = $workOrder->remark;
|
|
|
- $ownerName = $workOrder->owner->name ?? '';
|
|
|
- $clientCode = $workOrder->order->client_code ?? '';
|
|
|
- $msg = $user["name"]."建立了新工单<br/>".$ownerName.":".$clientCode."<br/>".$remark;
|
|
|
- NotificationService::SingleRegister($msg,$clientCode,"订单管理-问题件");
|
|
|
+ $this->createDefaultWorkOrder($param);
|
|
|
}
|
|
|
- return ['success' => true];
|
|
|
}
|
|
|
- return ['success' => false, 'message' => '参数异常'];
|
|
|
+ return ['success' => true];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function createAndNotification($order, $orderIssueType, $remake): WorkOrder
|
|
|
+ {
|
|
|
+ $user = Auth::user();
|
|
|
+ /** @var WorkOrder $workOrder */
|
|
|
+ $workOrder = WorkOrder::query()->create([
|
|
|
+ 'order_id' => $order->id,
|
|
|
+ 'creator_id' => $user["id"],
|
|
|
+ 'owner_id' => $order->owner_id,
|
|
|
+ 'remark' => $remake,
|
|
|
+ 'outer_table_name' => 'orders',
|
|
|
+ 'order_issue_type_id' => $orderIssueType->id,
|
|
|
+ 'uniquely_tag' => $order->code,
|
|
|
+ 'status' => 1,
|
|
|
+ ]);
|
|
|
+ $workOrder->notification();
|
|
|
+ return $workOrder;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 拦截
|
|
|
+ */
|
|
|
+ public function createInterceptWorkOrder($param): WorkOrder
|
|
|
+ {
|
|
|
+ $orderIssueType = OrderIssueType::query()->firstOrCreate(['name' => '拦截']);
|
|
|
+ $order = Order::query()->where('code', $param['order_no'])->first();
|
|
|
+ $remake = '拦截订单';
|
|
|
+ return $this->createAndNotification($order, $orderIssueType, $remake);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 错漏发
|
|
|
+ */
|
|
|
+ public function createMistakeWorkOrder($param): WorkOrder
|
|
|
+ {
|
|
|
+ $orderIssueType = OrderIssueType::query()->firstOrCreate(['name' => '错漏发']);
|
|
|
+ $order = Order::query()->where('code', $param['order_no'])->first();
|
|
|
+ $remake = $param['remake'] ?? '';
|
|
|
+ return $this->createAndNotification($order, $orderIssueType, $remake);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 破损
|
|
|
+ */
|
|
|
+ public function createDamagedWorkOrder($param): WorkOrder
|
|
|
+ {
|
|
|
+ $orderIssueType = OrderIssueType::query()->firstOrCreate(['name' => '破损']);
|
|
|
+ $order = Order::query()->where('code', $param['order_no'])->first();
|
|
|
+ $remake = $param['remake'] ?? '';
|
|
|
+ return $this->createAndNotification($order, $orderIssueType, $remake);
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 快递异常
|
|
|
+ */
|
|
|
+ public function createExpressAbnormalWorkOrder($param): WorkOrder
|
|
|
+ {
|
|
|
+ $orderIssueType = OrderIssueType::query()->firstOrCreate(['name'=> '快递异常']);
|
|
|
+ $order = Order::query()->where('code', $param['order_no'])->first();
|
|
|
+ $remake = $param['remake'] ?? '';
|
|
|
+ return $this->createAndNotification($order, $orderIssueType, $remake);
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 信息更改
|
|
|
+ */
|
|
|
+ public function createInformationChangeWorkOrder($param): WorkOrder
|
|
|
+ {
|
|
|
+ $orderIssueType = OrderIssueType::query()->firstOrCreate(['name' => '信息更改']);
|
|
|
+ $order = Order::query()->where('code', $param['order_no'])->first();
|
|
|
+ $remake = $param['remake'] ?? '';
|
|
|
+ return $this->createAndNotification($order, $orderIssueType, $remake);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 其他
|
|
|
+ */
|
|
|
+ public function createDefaultWorkOrder($param): WorkOrder
|
|
|
+ {
|
|
|
+ $orderIssueType = OrderIssueType::query()->firstOrCreate(['name' => '其他']);
|
|
|
+ $order = Order::query()->where('code', $param['order_no'])->first();
|
|
|
+ $remake = $param['remake'] ?? '';
|
|
|
+ return $this->createAndNotification($order, $orderIssueType, $remake);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -191,7 +215,7 @@ class WorkOrderService
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 标记已有 问题件的工单
|
|
|
+ * 标记已有 问题件 的工单
|
|
|
* @param $workOrders
|
|
|
*/
|
|
|
public function tags(&$workOrders)
|
|
|
@@ -222,4 +246,6 @@ class WorkOrderService
|
|
|
$order_issue_query = OrderIssueType::query()->select('id')->where('name', '拦截');
|
|
|
return WorkOrder::query()->whereIn('order_id', $package_query)->whereIn('order_issue_type_id', $order_issue_query)->exists();
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|