|
|
@@ -6,6 +6,7 @@ use App\OracleDOCASNHeader;
|
|
|
use App\OracleDOCOrderHeader;
|
|
|
use App\OrderIssue;
|
|
|
use App\OrderIssueProcessLog;
|
|
|
+use App\OrderIssueType;
|
|
|
use App\OrderPackage;
|
|
|
use App\Order;
|
|
|
use App\RejectedBill;
|
|
|
@@ -24,6 +25,11 @@ class OrderIssueService
|
|
|
app()->bind("orderPackageCommoditiesService", OrderPackageCommoditiesService::class);
|
|
|
}
|
|
|
|
|
|
+ public function insert($params)
|
|
|
+ {
|
|
|
+ OrderIssue::query()->insert($params);
|
|
|
+ }
|
|
|
+
|
|
|
public function getQuery(array $arr, array $condition = null)
|
|
|
{
|
|
|
if (!isset($condition)) {
|
|
|
@@ -254,32 +260,52 @@ class OrderIssueService
|
|
|
return compact('orderPackageSql','secondOrderPackageSql','orderIssueSql','rejectedBillItemSql','logSql');
|
|
|
}
|
|
|
|
|
|
- public function paginate(array $arr)
|
|
|
+ public function paginate(array $params)
|
|
|
{
|
|
|
- return $query = $this->getConditionQuery($arr)->paginate($arr['paginate'] ?? 50);
|
|
|
-
|
|
|
+ return $query = $this->getConditionQuery($params)->paginate($params['paginate'] ?? 50);
|
|
|
}
|
|
|
|
|
|
public function orderIssueTag(array $params)
|
|
|
{
|
|
|
$orderNos = $params['orderNos'];
|
|
|
- $meg = ['success' => true];
|
|
|
- foreach ($orderNos as $orderNo) {
|
|
|
- try {
|
|
|
- $orderIssue = $this->createOrFindByOrderNo($orderNo);
|
|
|
- if($orderIssue != null){
|
|
|
- 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' => '创建']);
|
|
|
- LogService::log(__METHOD__, __FUNCTION__, '标记订单问题件' . json_encode($orderNo).json_encode($orderIssue));
|
|
|
- }
|
|
|
- } catch (\Exception $e) {
|
|
|
- LogService::log(__METHOD__, __FUNCTION__, '标记订单问题件error' . json_encode($orderNo).$e->getMessage(),$e->getTraceAsString());
|
|
|
- $meg['success'] = false;
|
|
|
- $meg['fail_info'][]= $orderNo.$e->getMessage();
|
|
|
- }
|
|
|
+ $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails','oracleBASCode'])->whereIn('orderNo',$orderNos)->get();
|
|
|
+ $bool = $this->createOrderIssueByWmsOrder($orderHeaders,$params['typeId'],$params['result_explain']);
|
|
|
+ if($bool){
|
|
|
+ return ['success'=>$bool];
|
|
|
+ }else{
|
|
|
+ return ['success'=>$bool,'fail_info'=>'问题件创建失败'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function createOrderIssueByWmsOrder($orderHeaders,$order_issue_type_id,$result_explain)
|
|
|
+ {
|
|
|
+ /** @var OrderService $orderService */
|
|
|
+ $orderService = app(OrderService::class);
|
|
|
+ $orders = $orderService->createByWmsOrder($orderHeaders);
|
|
|
+ $innerParams = [];
|
|
|
+ foreach ($orders as $order) {
|
|
|
+ $innerParams[] = [
|
|
|
+ 'order_id'=>$order->id,
|
|
|
+ 'order_issue_type_id' => $order_issue_type_id,
|
|
|
+ 'result_explain'=>$result_explain
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ $this->insert($innerParams);
|
|
|
+ $ordersIssues = OrderIssue::query()->whereIn('order_id',data_get($innerParams,'*.order_id'))->get();
|
|
|
+ $param = [
|
|
|
+ 'ids' => data_get($ordersIssues,'*.id'),
|
|
|
+ 'content' =>'',
|
|
|
+ 'user_id' => Auth::user()['id'],
|
|
|
+ 'type' => '创建'
|
|
|
+ ];
|
|
|
+ app(OrderIssueProcessLogService::class)->create($param);
|
|
|
+ LogService::log(__METHOD__,__FUNCTION__,'创建问题件'.count($innerParams).json_encode($innerParams));
|
|
|
+ return true;
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ LogService::log(__METHOD__,__FUNCTION__,'创建问题件 error'.count($innerParams).json_encode($innerParams).$e->getMessage().$e->getTraceAsString());
|
|
|
+ return false;
|
|
|
}
|
|
|
- unset($params,$orderIssues,$orderNos);
|
|
|
- return $meg;
|
|
|
}
|
|
|
|
|
|
public function createOrFindByOrderNo($orderNo)
|
|
|
@@ -379,85 +405,14 @@ class OrderIssueService
|
|
|
return $orderIssue;
|
|
|
}
|
|
|
|
|
|
- public function verifyOrderIssue(array $arr)
|
|
|
- {
|
|
|
- $orders = Order::query()->whereIn('code', $arr)->get();
|
|
|
- if (count($orders) == 0) {
|
|
|
- return [];
|
|
|
- }
|
|
|
- $order_ids = [];
|
|
|
- foreach ($orders as $order){
|
|
|
- $order_ids[] = $order['id'];
|
|
|
- }
|
|
|
- unset($orders,$arr);
|
|
|
- return OrderIssue::query()->with('order')->whereIn('order_id', $order_ids)->get();
|
|
|
- }
|
|
|
-
|
|
|
- public function exportExcel(Request $request)
|
|
|
- {
|
|
|
- $result = null;
|
|
|
- if ($request->getMethod() == 'GET') {
|
|
|
- if ($request->has('checkAllSign')) {
|
|
|
- $result = $this->getConditionQuery($request->all(), null)->get();
|
|
|
- }
|
|
|
- } else if ($request->getMethod() == 'POST') {
|
|
|
- $request['order_issue_ids'] = $request->input('data');
|
|
|
- $result = $this->getConditionQuery($request->all(), null)->get();
|
|
|
- }
|
|
|
- return $result;
|
|
|
- }
|
|
|
-
|
|
|
- public function updateOrderIssue(OrderIssue $orderIssue, array $arr)
|
|
|
- {
|
|
|
- if ($arr['rejectedBill'] ?? false) {
|
|
|
- if ($arr['rejectedBill']['id'] ?? false) {
|
|
|
- $rejectedBill = RejectedBill::query()->where('id', $arr['rejectedBill']['id'])->first();
|
|
|
- $arr['orderIssues']['rejected_bill_id'] = $rejectedBill['id'];
|
|
|
- $arr['orderIssues']['is_new_rejecting'] = '有';
|
|
|
- $rejectedBill->fill($arr['rejectedBill']);
|
|
|
- $rejectedBill->update();
|
|
|
- $rejectedBill->同步问题件();
|
|
|
- $rejectedBill->同步问题件退件状态();
|
|
|
-
|
|
|
- } else if ($arr['rejectedBill']['id_logistic_return'] ?? false && $arr['rejectedBill']['logistic_number_return'] ?? false) {
|
|
|
-
|
|
|
- $owner_id = $orderIssue['order']['owner_id'];
|
|
|
- $rejectedBill = RejectedBill::query()->firstOrCreate([
|
|
|
- 'id_logistic_return' => $arr['rejectedBill']['id_logistic_return'] ?? '',
|
|
|
- 'id_owner' => $owner_id ?? '',
|
|
|
- 'logistic_number_return' => $arr['rejectedBill']['logistic_number_return'],]
|
|
|
- );
|
|
|
- $rejectedBill->save();
|
|
|
- $rejectedBill->同步问题件();
|
|
|
- $rejectedBill->同步问题件退件状态();
|
|
|
- $arr['orderIssues']['rejected_bill_id'] = $rejectedBill['id'];
|
|
|
- $arr['orderIssues']['is_new_rejecting'] = '有';
|
|
|
- }
|
|
|
- }
|
|
|
- if ($arr['order'] ?? false) {
|
|
|
- $order = Order::query()->where('id', $arr['order']['id'])->first();
|
|
|
- $order->fill($arr['order']);
|
|
|
- $order->update();
|
|
|
- }
|
|
|
- $orderIssue->fill($arr['orderIssues']);
|
|
|
- $orderIssue->同步退单状态();
|
|
|
- $orderIssue->update();
|
|
|
- unset($orderIssue,$arr);
|
|
|
- }
|
|
|
-
|
|
|
public function batchDestroy($ids){
|
|
|
- $bool = null;
|
|
|
try {
|
|
|
$bool = OrderIssue::query()->whereIn('id', $ids)->delete();
|
|
|
LogService::log(__METHOD__,__FUNCTION__,json_encode($ids));
|
|
|
+ return ['success'=>$bool];
|
|
|
} catch (\Exception $e) {
|
|
|
LogService::log(__METHOD__,__FUNCTION__,'error'.json_decode($ids).'||'.$e->getMessage().'||'.$e->getTraceAsString());
|
|
|
- } finally {
|
|
|
- if($bool ?? false){
|
|
|
- return ['success'=>true];
|
|
|
- }else{
|
|
|
- return ['success' => false];
|
|
|
- }
|
|
|
+ return ['success' => false];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -474,8 +429,68 @@ class OrderIssueService
|
|
|
{
|
|
|
$order = Order::query()->where('client_code',$secondClientNo)->first();
|
|
|
if(!$order){
|
|
|
- $order = app(OrderService::class)->findOrCreateByClientCode($secondClientNo);
|
|
|
+ /** @var OrderService $orderService */
|
|
|
+ $orderService = app(OrderService::class);
|
|
|
+ $orderHeaders = OracleDOCOrderHeader::query()->where('SoReference1',$secondClientNo)->get();
|
|
|
+ $orders = $orderService->createByWmsOrder($orderHeaders);
|
|
|
+ if($orders->count()>0)$order =$orders->first();
|
|
|
}
|
|
|
return OrderIssue::query()->where('id',$id)->update(['second_client_no'=>$secondClientNo]) > 0;
|
|
|
}
|
|
|
+
|
|
|
+ public function updateSecondLogisticNumber($id,$logisticNumber)
|
|
|
+ {
|
|
|
+ $orderIssue = OrderIssue::query()->where('id',$id)->first();
|
|
|
+ $order = app(OrderService::class)->getOrderByLogisticNumber($logisticNumber);
|
|
|
+ if(!$order){
|
|
|
+ $orderIssue->update(['second_logistic_number' => $logisticNumber]);
|
|
|
+ return ['success'=>true,'second_logistic_number' => $logisticNumber];
|
|
|
+ }
|
|
|
+ $orderIssue->update(['second_client_no' => $order->client_code]);
|
|
|
+ $order = Order::query()->with(['packages.commodities.commodity','logistic'])
|
|
|
+ ->where('id',$order->id)->first();
|
|
|
+ return ['success' => true,'order' =>$order];
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param string $logisticNumber
|
|
|
+ * @param string $type
|
|
|
+ * @param string $result_explain
|
|
|
+ */
|
|
|
+ public function createOrderIssue($logisticNumber,$type,$result_explain)
|
|
|
+ {
|
|
|
+ $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails','oracleBASCode'])
|
|
|
+ ->whereHas('actAllocationDetails',function($query)use($logisticNumber){
|
|
|
+ $query->where('picktotraceid',$logisticNumber);
|
|
|
+ })->get();
|
|
|
+ $orderIssueType = OrderIssueType::query()->where('name',$type)->first();
|
|
|
+ $this->createOrderIssueByWmsOrder($orderHeaders,$orderIssueType->id,$result_explain);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param array $logisticNumbers
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ public function 校验问题件是否存在_快递单号_返回存在的快递单号($logisticNumbers)
|
|
|
+ {
|
|
|
+ $orderIssues = OrderIssue::query()->with('order.packages')->whereHas('order.packages',function($query)use($logisticNumbers){
|
|
|
+ $query->whereIn('logistic_number',$logisticNumbers);
|
|
|
+ })->get();
|
|
|
+ $exits_logistic_number = array_diff(array_unique(data_get($orderIssues,'*.order.packages.*.logistic_number')),['',null]);
|
|
|
+ return array_intersect($exits_logistic_number,$logisticNumbers);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param array $orderNos
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ public function 校验问题件是否存在_WMS订单号_返回存在的订单号($orderNos)
|
|
|
+ {
|
|
|
+ $orderIssues = OrderIssue::query()->with('order')->whereHas('order',function($query)use($orderNos){
|
|
|
+ $query->whereIn('code',$orderNos);
|
|
|
+ })->get();
|
|
|
+ $exits_logistic_number = array_diff(array_unique(data_get($orderIssues,'*.order.code')),['',null]);
|
|
|
+ return array_intersect($exits_logistic_number,$orderNos);
|
|
|
+ }
|
|
|
+
|
|
|
}
|