with(['owner:id,name,phone_number', 'order', 'order.shop:id,name', 'order.warehouse:id,province_id,city_id,county_id,address', 'order.warehouse.province:id,name', 'order.warehouse.city:id,name', 'order.warehouse.county:id,name', 'deliveryType:id,name']) ->where('id', '=', $params['id']) ->first(); //请求德邦API 生成新订单 $model = new OrderLogistic(); $uri = "http://dpsanbox.deppon.com/sandbox-web/dop-standard-ewborder/createOrderNotify.action"; $header = [ 'Content-Type' => 'application/x-www-form-urlencoded;charset=utf-8', "Accept" => "application/json" ]; if ($order_info) { if (empty($order_info->order) || empty($order_info->owner) || empty($order_info->order->shop)) return ['code' => 0, 'msg' => '订单关联信息错误,请核实']; $res = $model->isExist($order_info->order->id); if (!$res || $res->status == 0 ?? 0) { $data = [ 'logisticID' => config('api_logistic.DB.prod.sign') . date("YmdHis") . mt_rand(1000, 9999) . $order_info->order->id, 'custOrderNo' => $order_info->order->client_code ?? '', // 'mailNo' => '', // 不传会创建新的 运单号 'needTraceInfo' => config('api_logistic.DB.prod.needTraceInfo'), 'companyCode' => config('api_logistic.DB.prod.company_code'), 'orderType' => $order_info->order_type, 'transportType' => $order_info->transport_type, 'customerCode' => config('api_logistic.DB.prod.customer_Code'), 'sender' => [ 'companyName' => $order_info->order->shop->name ?? '', 'businessNetworkNo' => '', 'name' => $order_info->owner->name ?? '', 'mobile' => $order_info->owner->phone_number ?? '', 'phone' => $order_info->owner->phone_number ?? '', 'province' => $order_info->order->warehouse->province->name ?? '', 'city' => $order_info->order->warehouse->city->name ?? '', 'country' => $order_info->order->warehouse->county->name ?? '', 'town' => '', 'address' => $order_info->order->warehouse->address ?? '', ], 'receiver' => [ 'toNetworkNo' => '', 'name' => $order_info->order->consignee_name ?? '', 'phone' => $order_info->order->consignee_phone ?? '', 'mobile' => $order_info->order->consignee_phone ?? '', 'province' => $order_info->order->province ?? '', 'city' => $order_info->order->city ?? "", 'county' => $order_info->order->district ?? '', 'town' => '', 'address' => $order_info->order->address ?? '', 'companyName' => '' ], 'packageInfo' => [ 'cargoName' => $order_info->cargo_name ?? '', 'totalNumber' => $order_info->total_number ?? '', 'totalWeight' => $order_info->total_weight ?? '', 'totalVolume' => '', 'packageService' => $order_info->package_service ?? '', 'deliveryType' => $order_info->deliveryType->name ?? '', ], 'gmtCommit' => date('Y-m-d H:i:s'), 'payType' => $order_info->pay_type, 'addServices' => [ 'insuranceValue' => '', 'codType' => '', 'reciveLoanAccount' => '', 'accountName' => '', 'codValue' => '', 'backSignBill' => $order_info->back_sign_bill ], 'smsNotify' => config('api_logistic.DB.prod.smsNotify'), 'sendStartTime' => date("Y-m-d H:i:s"), 'sendEndTime' => $order_info->deliver_at ?? date("Y-m-d H:i:s", strtotime('+1 day')), 'originalWaybillNumber' => $order_info->wms_bill_number ?? '', 'remark' => $order_info->dispatch_remark ?? '', 'isOut' => 'N', 'passwordSigning' => config('api_logistic.DB.prod.passwordSigning'), 'isdispatched' => '', 'ispresaleorder' => '', 'isCenterDelivery' => '', 'orderExtendFields' => [ 'value' => '', 'key' => '' ] ]; $param = json_encode($data, true); $dd["params"] = $param; $dd["timestamp"] = (integer)getMillisecond(); $dd["digest"] = base64_encode(md5($param . config('api_logistic.DB.prod.app_key') . $dd['timestamp'])); $dd["companyCode"] = config('api_logistic.DB.prod.company_code'); $return = httpPost($uri, $dd, $header); unset($data); if (array_key_exists('result', $return)) { //请求成功 快递单号 $return['mailNo'] 请求编号 $return['uniquerRequestNumber'] //返回日志记录 $id = $params['id']; $order_no = $order_info->wms_bill_number; $mail_no = $return['mailNo']??''; $add_data = [ 'order_id' => $order_info->order->id, 'status' => $return['result'] == 'true' ? 1 : 0, 'code' => $mail_no ?? '', 'uniquer_request_number' => $return['uniquerRequestNumber'], 'reason' => $return['reason'] ?? '', 'created_at' => date('Y-m-d H:i:s') ]; $roe = OrderLogistic::query()->insertGetId($add_data); if ($roe && $return['result'] == 'true') { DB::connection('mysql')->transaction(function () use ($id, $order_no, $mail_no) { $update_data = [ 'type' => '德邦物流', 'waybill_number' => $mail_no, 'updated_at' => date('Y-m-d H:i:s') ]; Waybill::query()->where('id', '=', $id)->update($update_data); DB::connection('oracle')->transaction(function () use ($order_no, $mail_no) { OracleDOCOrderHeader::query()->where('orderno', $order_no)->update(['edittime' => Carbon::now(), 'soreference5' => $mail_no]); }); LogService::log(__METHOD__, "申请快递单号回传WMS", ['orderno' => $order_no, 'soreference5' => $mail_no, 'edittime' => date('Y-m-d H:i:s')]); }); return ['code' => 1, 'msg' => '申请德邦物流单号成功']; } } LogService::log(__METHOD__, "申请快递单号回传WMS", ['orderno' => $order_no, 'content'=> $return]); return ['code' => 0, 'msg' => $return['reason']]; } elseif($res->status == 1 ?? 0 ) return ['code' => 1, 'msg'=> '德邦快递单号已存在']; } return ['code' => 0, 'msg' => '订单信息错误,请核实']; } /** * 根据 德邦运单号 获取 订单物流轨迹 * @param array $params * @return array */ public function getOrderStatus($params = []) { if ( ($params['mailNo']??'') == '') return ['code' => 0 , 'msg' => '德邦运单号不能为空']; $uri = "http://dpsanbox.deppon.com/sandbox-web/standard-order/newTraceQuery.action"; $header = [ 'Content-Type' => 'application/x-www-form-urlencoded;charset=utf-8', "Accept" => "application/json" ]; $data = [ 'mailNo' => $params['mailNo']??'' ]; $param = json_encode($data, true); $dd["params"] = $param; $dd["timestamp"] = (integer)getMillisecond(); $dd["digest"] = base64_encode(md5($param . config('api_logistic.DB.prod.app_key') . $dd['timestamp'])); $dd["companyCode"] = config('api_logistic.DB.prod.company_code'); $return = httpPost($uri, $dd, $header); if (array_key_exists('result', $return) && $return['result'] == 'true' && array_key_exists('resultCode', $return) && $return['resultCode'] == '1000'){ return ['code'=> 1, 'msg'=> '正在加载中。。。', 'data' => $return['responseParam']]; } return ['code' => 0, 'msg' => '暂无物流信息']; } }