| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- <?php
- namespace App\Services;
- use App\OracleDOCOrderHeader;
- use App\OrderLogistic;
- use App\Traits\ServiceAppAop;
- use App\Waybill;
- use Illuminate\Support\Carbon;
- use Illuminate\Support\Facades\DB;
- class DbOpenService
- {
- use ServiceAppAop;
- protected $modelClass = DbOpenService::class;
- /**
- * 创建德邦订单,生成快递单号
- * @param array $params
- */
- public function getDbOrderNo($params = [])
- {
- //获取系统无快递单号订单信息
- $order_info = Waybill::query()
- ->with(['owner:id,name,phone_number', 'orderByCode', 'orderByCode.shop:id,name',
- 'orderByCode.warehouse:id,province_id,city_id,county_id,address',
- 'orderByCode.warehouse.province:id,name', 'orderByCode.warehouse.city:id,name',
- 'orderByCode.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->orderByCode)) return false;
- $res = $model->isExist($order_info->orderByCode->id);
- if (!$res || $res->status == 0 ?? 0) {
- $data = [
- 'logisticID' => config('api_logistic.DB.prod.sign') . date("YmdHis") . mt_rand(1000, 9999) . $order_info->orderByCode->id,
- 'custOrderNo' => $order_info->orderByCode->client_code ?? '',
- // 'mailNo' => '', // 不传会创建新的 运单号
- 'needTraceInfo' => config('api_logistic.DB.prod.needTraceInfo'),
- 'companyCode' => config('api_logistic.DB.prod.company_code'),
- 'orderType' => config('api_logistic.DB.prod.orderType'),
- 'transportType' => config('api_logistic.DB.prod.transportType'),
- 'customerCode' => config('api_logistic.DB.prod.customer_Code'),
- 'sender' => [
- 'companyName' => $order_info->orderByCode->shop->name ?? '',
- 'businessNetworkNo' => '',
- 'name' => $order_info->owner->name ?? '',
- 'mobile' => $order_info->owner->phone_number ?? '',
- 'phone' => $order_info->owner->phone_number ?? '',
- 'province' => $order_info->orderByCode->warehouse->province->name ?? '',
- 'city' => $order_info->orderByCode->warehouse->city->name ?? '',
- 'country' => $order_info->orderByCode->warehouse->county->name ?? '',
- 'town' => '',
- 'address' => $order_info->orderByCode->warehouse->address ?? '',
- ],
- 'receiver' => [
- 'toNetworkNo' => '',
- 'name' => $order_info->orderByCode->consignee_name ?? '',
- 'phone' => $order_info->orderByCode->consignee_phone ?? '',
- 'mobile' => $order_info->orderByCode->consignee_phone ?? '',
- 'province' => $order_info->orderByCode->province ?? '',
- 'city' => $order_info->orderByCode->city ?? "",
- 'county' => $order_info->orderByCode->district ?? '',
- 'town' => '',
- 'address' => $order_info->orderByCode->address ?? '',
- 'companyName' => ''
- ],
- 'packageInfo' => [
- 'cargoName' => $order_info->cargo_name ?? '',
- 'totalNumber' => $order_info->total_number ?? '',
- 'totalWeight' => $order_info->total_weight ?? '',
- 'totalVolume' => '',
- 'packageService' => '',
- 'deliveryType' => $order_info->deliveryType->name ?? '',
- ],
- 'gmtCommit' => date('Y-m-d H:i:s'),
- 'payType' => config('api_logistic.DB.prod.payType'),
- 'addServices' => [
- 'insuranceValue' => '',
- 'codType' => '',
- 'reciveLoanAccount' => '',
- 'accountName' => '',
- 'codValue' => '',
- 'backSignBill' => config('api_logistic.DB.prod.backSignBill')
- ],
- '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' => '',
- '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']
- $add_data = [
- 'order_id' => $order_info->orderByCode->id,
- 'status' => $return['result'] == 'true' ? 1 : 0,
- 'code' => $return['mailNo'] ?? '',
- 'uniquer_request_number' => $return['uniquerRequestNumber'],
- 'reason' => $return['reason'] ?? '',
- 'created_at' => date('Y-m-d H:i:s')
- ];
- $roe = OrderLogistic::query()->insertGetId($add_data);
- //成功
- if ($return['result'] == 'true' && $roe) {
- $order_no = $order_info->wms_bill_number;
- $mail_no = $return['mailNo'];
- $row = 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')]);
- });
- if ($row) return true;
- }
- }
- }
- }
- return false;
- }
- }
|