|
|
@@ -2,7 +2,7 @@
|
|
|
|
|
|
namespace App\Services;
|
|
|
|
|
|
-use App\OracleDOCASNHeader;
|
|
|
+use App\Http\Controllers\Controller;
|
|
|
use App\OracleDOCOrderHeader;
|
|
|
use App\OrderIssue;
|
|
|
use App\OrderIssueProcessLog;
|
|
|
@@ -10,6 +10,7 @@ use App\OrderPackage;
|
|
|
use App\Order;
|
|
|
use App\RejectedBill;
|
|
|
use App\RejectedBillItem;
|
|
|
+use App\Services\common\QueryService;
|
|
|
use Illuminate\Http\Request;
|
|
|
use Illuminate\Support\Arr;
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
@@ -29,32 +30,23 @@ class OrderIssueService
|
|
|
if (!isset($condition)) {
|
|
|
$condition = $arr;
|
|
|
}
|
|
|
+
|
|
|
$user = Auth::user();
|
|
|
$owner_ids = $user ? $user->getPermittingOwnerIdsAttribute() : [];
|
|
|
- $order_ids = [];
|
|
|
if ($condition['owner_id'] ?? false) {
|
|
|
$owner_ids = explode(',', $condition['owner_id']);
|
|
|
}
|
|
|
+
|
|
|
$query = OrderIssue::with(['top', 'userWorkGroup', 'issueType', 'logs' => function ($query) {
|
|
|
- $query->with(['user'])->orderByDesc('created_at');
|
|
|
+ $query->with('user')->orderByDesc('created_at');
|
|
|
}, 'order' => function ($query) {
|
|
|
- $query->with(['shop', 'logistic', 'owner', 'packages' => function ($query) {
|
|
|
- $query->with(['commodities' => function ($query) {
|
|
|
- return $query->with('commodity');
|
|
|
- }]);
|
|
|
- }]);
|
|
|
+ $query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity' ]);
|
|
|
}, 'rejectedBill' => function ($query) {
|
|
|
$query->with(['items']);
|
|
|
}, 'secondOrder' => function ($query) {
|
|
|
- $query->with(['shop', 'logistic', 'owner', 'packages' => function ($query) {
|
|
|
- return $query->with(['commodities' => function ($query) {
|
|
|
- return $query->with('commodity');
|
|
|
- }]);
|
|
|
- }]);
|
|
|
- }])->whereHas('order', function ($query) use ($owner_ids) {
|
|
|
- $query->whereHas('owner', function ($query) use ($owner_ids) {
|
|
|
- return $query->whereIn('id', $owner_ids);
|
|
|
- });
|
|
|
+ $query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity' ]);
|
|
|
+ }])->whereHas('order.owner', function ($query) use ($owner_ids) {
|
|
|
+ $query->whereIn('id', $owner_ids);
|
|
|
});
|
|
|
|
|
|
$query->selectRaw('order_issues.* ,order_issue_on_tops.id top_id ,order_issue_on_tops.remark,order_issue_on_tops.updated_at top_update')
|
|
|
@@ -62,39 +54,32 @@ class OrderIssueService
|
|
|
->whereNull('order_issue_on_tops.deleted_at')
|
|
|
->orderBy('order_issue_on_tops.updated_at', 'desc')
|
|
|
->orderBy('order_issues.id', 'desc');
|
|
|
+
|
|
|
return $query;
|
|
|
}
|
|
|
|
|
|
private function getOrderQuery(array $arr, $query)
|
|
|
{
|
|
|
$query->whereHas('order', function ($query) use ($arr) {
|
|
|
- if ($arr['client_code'] ?? false) {
|
|
|
- $query->where('client_code', $arr['client_code']);
|
|
|
- }
|
|
|
- if ($arr['consignee_name'] ?? false) {
|
|
|
- $query->where('consignee_name', 'like', $arr['consignee_name']);
|
|
|
- }
|
|
|
- if ($arr['consignee_phone'] ?? false) {
|
|
|
- $query->where('consignee_phone', 'like', $arr['consignee_phone']);
|
|
|
- }
|
|
|
+ $params = [
|
|
|
+ 'consignee_name' => $arr['consignee_name'] ?? '',
|
|
|
+ 'consignee_phone' => $arr['consignee_phone'] ?? '',
|
|
|
+ 'client_code' => $arr['client_code'] ?? '',
|
|
|
+ ];
|
|
|
+
|
|
|
+ $columnQueryRules=['consignee_phone' => ['like' => ''], 'consignee_name' => ['like' => ''],];
|
|
|
+ $query = app(QueryService::class)->query($params,$query,$columnQueryRules);
|
|
|
+
|
|
|
if ($arr['logistic_number'] ?? false) {
|
|
|
- $logistic_number = $arr['logistic_number'];
|
|
|
- $query->whereHas('packages', function ($query) use ($logistic_number) {
|
|
|
- $query->where('logistic_number', $logistic_number);
|
|
|
+ $query->whereHas('packages', function ($query) use ($arr) {
|
|
|
+ $query->where('logistic_number', $arr['logistic_number']);
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
if (($arr['good_barcode'] ?? false) || ($arr['good_name'] ?? false)) {
|
|
|
- $query->whereHas('packages', function ($query) use ($arr) {
|
|
|
- $query->whereHas('commodities', function ($query) use ($arr) {
|
|
|
- $query->whereHas('commodity', function ($query) use ($arr) {
|
|
|
- if ($arr['good_barcode'] ?? false) {
|
|
|
- $query->where('sku', $arr['good_barcode']);
|
|
|
- }
|
|
|
- if ($arr['good_name'] ?? false) {
|
|
|
- $query->where('name', $arr['good_name']);
|
|
|
- }
|
|
|
- });
|
|
|
- });
|
|
|
+ $query->whereHas('packages.commodities.commodity', function ($query) use ($arr) {
|
|
|
+ $params = ['sku' => $arr['good_barcode'] ?? '', 'name' => $arr['good_name'] ?? '',];
|
|
|
+ $query = app(QueryService::class)->query($params,$query,[]);
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
@@ -103,22 +88,19 @@ class OrderIssueService
|
|
|
$query->where('client_code', $arr['send_client_code']);
|
|
|
});
|
|
|
}
|
|
|
-
|
|
|
return $query;
|
|
|
}
|
|
|
|
|
|
public function getRejectedBillQuery(array $arr, $query)
|
|
|
{
|
|
|
- if( ($arr['logistic_number_return'] ?? false) || ($arr['id_quality_label'] ?? false)){
|
|
|
+ if($arr['logistic_number_return'] ?? false){
|
|
|
$query->whereHas('rejectedBill', function ($query) use (&$arr) {
|
|
|
- if ($arr['logistic_number_return'] ?? false) {
|
|
|
- $query->where('logistic_number_return', 'like', $arr['logistic_number_return']);
|
|
|
- }
|
|
|
- if ($arr['id_quality_label'] ?? false) {
|
|
|
- $query->whereHas('items', function ($query) use ($arr) {
|
|
|
- $query->where('id_quality_label', $arr['id_quality_label']);
|
|
|
- });
|
|
|
- }
|
|
|
+ $query->where('logistic_number_return', 'like', $arr['logistic_number_return']);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if($arr['id_quality_label'] ?? false){
|
|
|
+ $query->whereHas('rejectedBill.items', function ($query) use (&$arr) {
|
|
|
+ $query->where('id_quality_label', $arr['id_quality_label']);
|
|
|
});
|
|
|
}
|
|
|
return $query;
|
|
|
@@ -129,41 +111,33 @@ class OrderIssueService
|
|
|
$query = $this->getQuery($arr, $condition);
|
|
|
$query = $this->getOrderQuery($condition ?? $arr, $query);
|
|
|
$query = $this->getRejectedBillQuery($condition ?? $arr, $query);
|
|
|
-
|
|
|
if (!isset($condition)) {
|
|
|
$condition = $arr;
|
|
|
}
|
|
|
- if (isset($condition['created_at_start'])) {
|
|
|
- $query->where('order_issues.created_at', '>=', $condition['created_at_start'] . " 00:00:00");
|
|
|
- }
|
|
|
- if (isset($condition['created_at_end'])) {
|
|
|
- $query->where('order_issues.created_at', '<=', $condition['created_at_end'] . " 23:59:59");
|
|
|
- }
|
|
|
- if (isset($condition['final_status'])) {
|
|
|
- $query->where('final_status', $condition['final_status']);
|
|
|
- }
|
|
|
- if (isset($condition['order_issue_type_id'])) {
|
|
|
- $query->where('order_issue_type_id', $condition['order_issue_type_id']);
|
|
|
- }
|
|
|
+ $params =[
|
|
|
+ 'created_at_start' => $condition['created_at_start'] ??'',
|
|
|
+ 'final_status' => $condition['final_status'] ??'',
|
|
|
+ 'order_issue_type_id' => $condition['order_issue_type_id'] ??'',
|
|
|
+ 'logistic_indemnity_money' => $condition['logistic_indemnity_money'] ??'',
|
|
|
+ 'baoshi_indemnity_money' => $condition['baoshi_indemnity_money'] ??'',
|
|
|
+ 'order_issues.id' => $condition['order_issue_ids'] ?? '',
|
|
|
+ ];
|
|
|
+ $columnQueryRules=[
|
|
|
+ 'order_issues.id' => ['alias'=>'order_issues.id','multi' => ','],
|
|
|
+ 'created_at_start' => ['alias' => 'order_issues.created_at' , 'startDate' => ' 00:00:00'],
|
|
|
+ ];
|
|
|
+ $query = app(QueryService::class)->query($params,$query,$columnQueryRules);
|
|
|
+
|
|
|
if (!($condition['is_handle'] ?? false) && !($condition['final_status'] ?? false)) {
|
|
|
$query->where(function ($query) {
|
|
|
$query->where('final_status', '<>', '已解决')->orWhereNull('final_status');
|
|
|
});
|
|
|
}
|
|
|
- if (isset($condition['logistic_indemnity_money'])) {
|
|
|
- $query->where('logistic_indemnity_money', $condition['logistic_indemnity_money']);
|
|
|
- }
|
|
|
- if (isset($condition['baoshi_indemnity_money'])) {
|
|
|
- $query->where('baoshi_indemnity_money', $condition['baoshi_indemnity_money']);
|
|
|
- }
|
|
|
- if (isset($condition['order_issue_ids'])) {
|
|
|
- $orderIssuesId = $condition['order_issue_ids'];
|
|
|
- if (is_string($orderIssuesId)) {
|
|
|
- $orderIssuesId = explode(',', $orderIssuesId);
|
|
|
- }
|
|
|
- $query->whereIn('order_issues.id', $orderIssuesId);
|
|
|
+ if($condition['created_at_end'] ?? false){
|
|
|
+ $query->whereHas('logs',function($query) use ($condition){
|
|
|
+ $query->where('created_at',$condition['created_at_end'])->where('type','结束');
|
|
|
+ });
|
|
|
}
|
|
|
-
|
|
|
return $query;
|
|
|
}
|
|
|
|
|
|
@@ -172,26 +146,27 @@ class OrderIssueService
|
|
|
return $this->getConditionQuery($arr)->paginate($arr['paginate'] ?? 50);
|
|
|
}
|
|
|
|
|
|
- public function orderIssueTag(array $arr)
|
|
|
+ public function orderIssueTag(array $params)
|
|
|
{
|
|
|
- $orderNos = $arr['orderNos'];
|
|
|
+ $orderNos = $params['orderNos'];
|
|
|
$meg = ['success' => false];
|
|
|
- if ($this->verifyOrderIssue($arr)) {
|
|
|
+ if ($this->verifyOrderIssue($orderNos)) {
|
|
|
$meg['fail_info'] = '传入订单编号中对应的订单问题已有生成';
|
|
|
return $meg;
|
|
|
}
|
|
|
foreach ($orderNos as $orderNo) {
|
|
|
$orderIssue = $this->createOrFindByOrderNo($orderNo);
|
|
|
- OrderIssue::where('id',$orderIssue['id'])->update(['order_issue_type_id'=>$arr['typeId'],'result_explain'=>$arr['result_explain']]);
|
|
|
- OrderIssueProcessLog::create(['order_issue_id' => $orderIssue['id'], 'user_id' => Auth::user()['id'], 'content' => '标记创建订单问题件', 'type' => '创建']);
|
|
|
+ OrderIssue::query()->where('id',$orderIssue['id'])->update(['order_issue_type_id'=>$params['typeId'],'result_explain'=>$params['result_explain']]);
|
|
|
+ OrderIssueProcessLog::query()->create(['order_issue_id' => $orderIssue['id'], 'user_id' => Auth::user()['id'], 'content' => '标记创建订单问题件', 'type' => '创建']);
|
|
|
}
|
|
|
+ Controller::logS(__METHOD__,__FUNCTION__,'标记订单问题件'.$orderNos,Auth::user()['id']);
|
|
|
$meg['success'] = true;
|
|
|
return $meg;
|
|
|
}
|
|
|
|
|
|
public function createOrFindByOrderNo($orderNo)
|
|
|
{
|
|
|
- $orderHeader = OracleDOCOrderHeader::where('orderNo', $orderNo)->first();
|
|
|
+ $orderHeader = OracleDOCOrderHeader::query()->where('orderNo', $orderNo)->first();
|
|
|
if (!$orderHeader) {
|
|
|
return null;
|
|
|
}
|
|
|
@@ -201,17 +176,17 @@ class OrderIssueService
|
|
|
public function createOrFind($clientCode)
|
|
|
{
|
|
|
$orderService = app('orderService');
|
|
|
- $orderHeader = OracleDOCOrderHeader::where('SOREFERENCE1', $clientCode)->first();
|
|
|
+ $orderHeader = OracleDOCOrderHeader::query()->where('SOREFERENCE1', $clientCode)->first();
|
|
|
if (!$orderHeader) {
|
|
|
return null;
|
|
|
}
|
|
|
$order = $orderService->findOrCreateByClientCode($clientCode);
|
|
|
- $rejectedBill = RejectedBill::where('order_number', $orderHeader['soreference1'])->first();
|
|
|
+ $rejectedBill = RejectedBill::query()->where('order_number', $orderHeader['soreference1'])->first();
|
|
|
$arr = [
|
|
|
'order_id' => $order['id'],
|
|
|
- 'rejecetd_bill_id' => $rejectedBill['id'],
|
|
|
+ 'rejected_bill_id' => $rejectedBill['id'],
|
|
|
];
|
|
|
- $orderIssue = OrderIssue::create($arr);
|
|
|
+ $orderIssue = OrderIssue::query()->create($arr);
|
|
|
$this->judgeRejectingStatus($orderIssue);
|
|
|
$orderIssue->order = $order;
|
|
|
return $orderIssue;
|
|
|
@@ -264,7 +239,7 @@ class OrderIssueService
|
|
|
return $orderIssue;
|
|
|
}
|
|
|
|
|
|
- public function judgeRejectingStatus(OrderIssue $orderIssue)
|
|
|
+ public function judgeRejectingStatus($orderIssue)
|
|
|
{
|
|
|
$orderPackageCommoditiesService = new OrderPackageCommoditiesService();
|
|
|
$rejectedItems = [];
|
|
|
@@ -272,16 +247,12 @@ class OrderIssueService
|
|
|
if ($orderIssue->rejected_bill_id) {
|
|
|
$rejectedBill = RejectedBill::find($orderIssue->rejected_bill_id)->first();
|
|
|
$rejectedBillItems = RejectedBillItem::where('id_rejected_bill', $rejectedBill->id)->get();
|
|
|
- if ($rejectedBillItems) {
|
|
|
- foreach ($rejectedBillItems as $item) {
|
|
|
- if (!isset($rejectedItems[$item->barcode_goods])) {
|
|
|
- $rejectedItems[$item->barcode_goods] = 0;
|
|
|
- }
|
|
|
- $rejectedItems[$item->barcode_goods] = $item->amount + $rejectedItems[$item->barcode_goods] ?? 0;
|
|
|
- }
|
|
|
+ foreach ($rejectedBillItems as $item) {
|
|
|
+ if (!isset($rejectedItems[$item->barcode_goods])) {$rejectedItems[$item->barcode_goods] = 0;}
|
|
|
+ $rejectedItems[$item->barcode_goods] = $item->amount + $rejectedItems[$item->barcode_goods] ?? 0;
|
|
|
}
|
|
|
} else {
|
|
|
- $orderIssue->update(['rejecting' => '无']);
|
|
|
+ $orderIssue->update(['rejecting_status' => '无']);
|
|
|
$orderIssue->save();
|
|
|
return;
|
|
|
}
|
|
|
@@ -361,8 +332,7 @@ class OrderIssueService
|
|
|
|
|
|
public function verifyOrderIssue(array $arr)
|
|
|
{
|
|
|
- $orderIds = $arr['orderNos'];
|
|
|
- $orders = Order::whereIn('code', $orderIds)->get();
|
|
|
+ $orders = Order::whereIn('code', $arr)->get();
|
|
|
if (count($orders) == 0) {
|
|
|
return false;
|
|
|
}
|
|
|
@@ -382,9 +352,7 @@ class OrderIssueService
|
|
|
$result = $this->getConditionQuery($request->all(), null)->get();
|
|
|
}
|
|
|
} else if ($request->getMethod() == 'POST') {
|
|
|
- $orderIssueIds = $request->input('data');
|
|
|
- $ids = explode(',', $orderIssueIds);
|
|
|
- $request['order_issue_ids'] = $ids;
|
|
|
+ $request['order_issue_ids'] = $request->input('data');
|
|
|
$result = $this->getConditionQuery($request->all(), null)->get();
|
|
|
}
|
|
|
return $result;
|