DbOpenService.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace App\Services;
  3. use App\OracleDOCOrderHeader;
  4. use App\OrderLogistic;
  5. use App\Traits\ServiceAppAop;
  6. use App\Waybill;
  7. use Illuminate\Support\Carbon;
  8. use Illuminate\Support\Facades\DB;
  9. class DbOpenService
  10. {
  11. use ServiceAppAop;
  12. protected $modelClass = DbOpenService::class;
  13. /**
  14. * 创建德邦订单,生成快递单号
  15. * @param array $params
  16. */
  17. public function getDbOrderNo($params = [])
  18. {
  19. //获取系统无快递单号订单信息
  20. $order_info = Waybill::query()
  21. ->with(['owner:id,name,phone_number', 'orderByCode', 'orderByCode.shop:id,name',
  22. 'orderByCode.warehouse:id,province_id,city_id,county_id,address',
  23. 'orderByCode.warehouse.province:id,name', 'orderByCode.warehouse.city:id,name',
  24. 'orderByCode.warehouse.county:id,name', 'deliveryType:id,name'])
  25. ->where('id', '=', $params['id'])
  26. ->first();
  27. //请求德邦API 生成新订单
  28. $model = new OrderLogistic();
  29. $uri = "http://dpsanbox.deppon.com/sandbox-web/dop-standard-ewborder/createOrderNotify.action";
  30. $header = [
  31. 'Content-Type' => 'application/x-www-form-urlencoded;charset=utf-8',
  32. "Accept" => "application/json"
  33. ];
  34. if ($order_info) {
  35. if (empty($order_info->orderByCode)) return false;
  36. $res = $model->isExist($order_info->orderByCode->id);
  37. if (!$res || $res->status == 0 ?? 0) {
  38. $data = [
  39. 'logisticID' => config('api_logistic.DB.prod.sign') . date("YmdHis") . mt_rand(1000, 9999) . $order_info->orderByCode->id,
  40. 'custOrderNo' => $order_info->orderByCode->client_code ?? '',
  41. // 'mailNo' => '', // 不传会创建新的 运单号
  42. 'needTraceInfo' => config('api_logistic.DB.prod.needTraceInfo'),
  43. 'companyCode' => config('api_logistic.DB.prod.company_code'),
  44. 'orderType' => config('api_logistic.DB.prod.orderType'),
  45. 'transportType' => config('api_logistic.DB.prod.transportType'),
  46. 'customerCode' => config('api_logistic.DB.prod.customer_Code'),
  47. 'sender' => [
  48. 'companyName' => $order_info->orderByCode->shop->name ?? '',
  49. 'businessNetworkNo' => '',
  50. 'name' => $order_info->owner->name ?? '',
  51. 'mobile' => $order_info->owner->phone_number ?? '',
  52. 'phone' => $order_info->owner->phone_number ?? '',
  53. 'province' => $order_info->orderByCode->warehouse->province->name ?? '',
  54. 'city' => $order_info->orderByCode->warehouse->city->name ?? '',
  55. 'country' => $order_info->orderByCode->warehouse->county->name ?? '',
  56. 'town' => '',
  57. 'address' => $order_info->orderByCode->warehouse->address ?? '',
  58. ],
  59. 'receiver' => [
  60. 'toNetworkNo' => '',
  61. 'name' => $order_info->orderByCode->consignee_name ?? '',
  62. 'phone' => $order_info->orderByCode->consignee_phone ?? '',
  63. 'mobile' => $order_info->orderByCode->consignee_phone ?? '',
  64. 'province' => $order_info->orderByCode->province ?? '',
  65. 'city' => $order_info->orderByCode->city ?? "",
  66. 'county' => $order_info->orderByCode->district ?? '',
  67. 'town' => '',
  68. 'address' => $order_info->orderByCode->address ?? '',
  69. 'companyName' => ''
  70. ],
  71. 'packageInfo' => [
  72. 'cargoName' => $order_info->cargo_name ?? '',
  73. 'totalNumber' => $order_info->total_number ?? '',
  74. 'totalWeight' => $order_info->total_weight ?? '',
  75. 'totalVolume' => '',
  76. 'packageService' => '',
  77. 'deliveryType' => $order_info->deliveryType->name ?? '',
  78. ],
  79. 'gmtCommit' => date('Y-m-d H:i:s'),
  80. 'payType' => config('api_logistic.DB.prod.payType'),
  81. 'addServices' => [
  82. 'insuranceValue' => '',
  83. 'codType' => '',
  84. 'reciveLoanAccount' => '',
  85. 'accountName' => '',
  86. 'codValue' => '',
  87. 'backSignBill' => config('api_logistic.DB.prod.backSignBill')
  88. ],
  89. 'smsNotify' => config('api_logistic.DB.prod.smsNotify'),
  90. 'sendStartTime' => date("Y-m-d H:i:s"),
  91. 'sendEndTime' => $order_info->deliver_at ?? date("Y-m-d H:i:s", strtotime('+1 day')),
  92. 'originalWaybillNumber' => $order_info->wms_bill_number ?? '',
  93. 'remark' => $order_info->dispatch_remark ?? '',
  94. 'isOut' => '',
  95. 'passwordSigning' => config('api_logistic.DB.prod.passwordSigning'),
  96. 'isdispatched' => '',
  97. 'ispresaleorder' => '',
  98. 'isCenterDelivery' => '',
  99. 'orderExtendFields' => [
  100. 'value' => '',
  101. 'key' => ''
  102. ]
  103. ];
  104. $param = json_encode($data, true);
  105. $dd["params"] = $param;
  106. $dd["timestamp"] = (integer)getMillisecond();
  107. $dd["digest"] = base64_encode(md5($param . config('api_logistic.DB.prod.app_key') . $dd['timestamp']));
  108. $dd["companyCode"] = config('api_logistic.DB.prod.company_code');
  109. $return = httpPost($uri, $dd, $header);
  110. unset($data);
  111. if (array_key_exists('result', $return)) {
  112. //请求成功 快递单号 $return['mailNo'] 请求编号 $return['uniquerRequestNumber']
  113. $add_data = [
  114. 'order_id' => $order_info->orderByCode->id,
  115. 'status' => $return['result'] == 'true' ? 1 : 0,
  116. 'code' => $return['mailNo'] ?? '',
  117. 'uniquer_request_number' => $return['uniquerRequestNumber'],
  118. 'reason' => $return['reason'] ?? '',
  119. 'created_at' => date('Y-m-d H:i:s')
  120. ];
  121. $roe = OrderLogistic::query()->insertGetId($add_data);
  122. //成功
  123. if ($return['result'] == 'true' && $roe) {
  124. $order_no = $order_info->wms_bill_number;
  125. $mail_no = $return['mailNo'];
  126. $row = DB::connection('oracle')->transaction(function () use ($order_no, $mail_no) {
  127. OracleDOCOrderHeader::query()->where('orderno', $order_no)->update(['edittime' => Carbon::now(), 'soreference5' => $mail_no]);
  128. LogService::log(__METHOD__, "申请快递单号回传WMS", ['orderno' => $order_no, 'soreference5' => $mail_no, 'edittime' => date('Y-m-d H:i:s')]);
  129. });
  130. if ($row) return true;
  131. }
  132. }
  133. }
  134. }
  135. return false;
  136. }
  137. }