DbOpenService.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <?php
  2. namespace App\Services;
  3. use App\Log;
  4. use App\OracleDOCOrderHeader;
  5. use App\OrderLogistic;
  6. use App\Traits\ServiceAppAop;
  7. use App\Waybill;
  8. use Illuminate\Support\Carbon;
  9. use Illuminate\Support\Facades\DB;
  10. class DbOpenService
  11. {
  12. use ServiceAppAop;
  13. protected $modelClass = DbOpenService::class;
  14. /**
  15. * 创建德邦订单,生成快递单号
  16. * @param array $params
  17. */
  18. public function getDbOrderNo(array $params = []):array
  19. {
  20. //获取系统无快递单号订单信息
  21. $order_info = Waybill::query()
  22. ->with(['owner:id,name,phone_number', 'order', 'order.shop:id,name',
  23. 'order.warehouse:id,province_id,city_id,county_id,address',
  24. 'order.warehouse.province:id,name', 'order.warehouse.city:id,name',
  25. 'order.warehouse.county:id,name', 'deliveryType:id,name'])
  26. ->where('id', '=', $params['id'])
  27. ->first();
  28. //请求德邦API 生成新订单
  29. $model = new OrderLogistic();
  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->order) || empty($order_info->owner) || empty($order_info->order->shop)) return ['code' => 0, 'msg' => '订单关联信息错误,请核实'];
  36. $res = $model->isExist($order_info->order->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->order->id,
  40. 'custOrderNo' => $order_info->order->client_code ?? '',
  41. // 'mailNo' => '', // 不传会创建新的 运单号
  42. 'needTraceInfo' => config('api_logistic.DB.prod.needTraceInfo'),
  43. 'companyCode' => config('api_logistic.DB.prod.company_code'),
  44. 'orderType' => $order_info->order_type,
  45. 'transportType' => $order_info->transport_type,
  46. 'customerCode' => config('api_logistic.DB.prod.customer_Code'),
  47. 'sender' => [
  48. 'companyName' => $order_info->order->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->order->warehouse->province->name ?? '',
  54. 'city' => $order_info->order->warehouse->city->name ?? '',
  55. 'country' => $order_info->order->warehouse->county->name ?? '',
  56. 'town' => '',
  57. 'address' => $order_info->order->warehouse->address ?? '',
  58. ],
  59. 'receiver' => [
  60. 'toNetworkNo' => '',
  61. 'name' => $order_info->order->consignee_name ?? '',
  62. 'phone' => $order_info->order->consignee_phone ?? '',
  63. 'mobile' => $order_info->order->consignee_phone ?? '',
  64. 'province' => $order_info->order->province ?? '',
  65. 'city' => $order_info->order->city ?? "",
  66. 'county' => $order_info->order->district ?? '',
  67. 'town' => '',
  68. 'address' => $order_info->order->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' => $order_info->package_service ?? '',
  77. 'deliveryType' => $order_info->deliveryType->name ?? '',
  78. ],
  79. 'gmtCommit' => date('Y-m-d H:i:s'),
  80. 'payType' => $order_info->pay_type,
  81. 'addServices' => [
  82. 'insuranceValue' => '',
  83. 'codType' => '',
  84. 'reciveLoanAccount' => '',
  85. 'accountName' => '',
  86. 'codValue' => '',
  87. 'backSignBill' => $order_info->back_sign_bill
  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' => 'N',
  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,1);
  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(config('api_logistic.DB.prod.uri')['create_order'], $dd, $header);
  110. unset($data);
  111. $id = $params['id'];
  112. $order_no = $order_info->wms_bill_number;
  113. if (array_key_exists('result', $return)) {
  114. //请求成功 快递单号 $return['mailNo'] 请求编号 $return['uniquerRequestNumber']
  115. //返回日志记录
  116. $mail_no = $return['mailNo']??'';
  117. $add_data = [
  118. 'order_id' => $order_info->order->id,
  119. 'status' => $return['result'] == 'true' ? 1 : 0,
  120. 'code' => $mail_no ?? '',
  121. 'uniquer_request_number' => $return['uniquerRequestNumber'],
  122. 'reason' => $return['reason'] ?? '',
  123. 'created_at' => date('Y-m-d H:i:s')
  124. ];
  125. $roe = OrderLogistic::query()->insertGetId($add_data);
  126. if ($roe && $return['result'] == 'true') {
  127. DB::connection('mysql')->transaction(function () use ($id, $order_no, $mail_no) {
  128. $update_data = [
  129. 'type' => '德邦物流',
  130. 'waybill_number' => $mail_no,
  131. 'updated_at' => date('Y-m-d H:i:s')
  132. ];
  133. Waybill::query()->where('id', '=', $id)->update($update_data);
  134. DB::connection('oracle')->transaction(function () use ($order_no, $mail_no) {
  135. OracleDOCOrderHeader::query()->where('orderno', $order_no)->update(['edittime' => Carbon::now(), 'soreference5' => $mail_no]);
  136. });
  137. LogService::log(__METHOD__, "申请快递单号回传WMS", ['orderno' => $order_no, 'soreference5' => $mail_no, 'edittime' => date('Y-m-d H:i:s')]);
  138. });
  139. return ['code' => 1, 'msg' => '申请德邦物流单号成功'];
  140. }
  141. }
  142. LogService::log(__METHOD__, "申请快递单号回传WMS", ['orderno' => $order_no, 'content'=> $return]);
  143. return ['code' => 0, 'msg' => $return['reason']];
  144. }
  145. elseif($res->status == 1 ?? 0 ) return ['code' => 1, 'msg'=> '德邦快递单号已存在'];
  146. }
  147. return ['code' => 0, 'msg' => '订单信息错误,请核实'];
  148. }
  149. /**
  150. * 根据 德邦运单号 获取 订单物流轨迹
  151. * @param array $params
  152. * @return array
  153. */
  154. public function getOrderStatus(array $params = []):array
  155. {
  156. if ( ($params['mailNo']??'') == '') return ['code' => 0 , 'msg' => '德邦运单号不能为空'];
  157. $header = [
  158. 'Content-Type' => 'application/x-www-form-urlencoded;charset=utf-8',
  159. "Accept" => "application/json"
  160. ];
  161. $data = [
  162. 'mailNo' => $params['mailNo']??''
  163. ];
  164. $param = json_encode($data, 1);
  165. $dd["params"] = $param;
  166. $dd["timestamp"] = (integer)getMillisecond();
  167. $dd["digest"] = base64_encode(md5($param . config('api_logistic.DB.prod.app_key') . $dd['timestamp']));
  168. $dd["companyCode"] = config('api_logistic.DB.prod.company_code');
  169. $return = httpPost(config('api_logistic.DB.prod.uri')['order_locus'], $dd, $header);
  170. if (array_key_exists('result', $return) && $return['result'] == 'true' && array_key_exists('resultCode', $return) && $return['resultCode'] == '1000'){
  171. return ['code'=> 1, 'msg'=> '正在加载中。。。', 'data' => $return['responseParam']];
  172. }
  173. return ['code' => 0, 'msg' => '暂无物流信息'];
  174. }
  175. }