領収証発行サービス
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

187 lines
7.2KB

  1. <?php
  2. namespace App\Util\Custom\HelloTechno;
  3. use App\Exceptions\AppCommonException;
  4. use App\Models\ReceiptIssuingHTParkingCustomOrder;
  5. use App\Models\ReceiptIssuingOrder;
  6. use Exception;
  7. use Illuminate\Support\Carbon;
  8. use Illuminate\Support\Facades\Http;
  9. use Illuminate\Support\Facades\Log;
  10. class API
  11. {
  12. private const RESULT_CODE = 'result_code';
  13. private const RESULT_CODE_SUCCESS = 'SUCCESS';
  14. private const FIELD_DATA = 'data';
  15. private const URL_CUSTOMERS = 'customers';
  16. private const URL_PARKINGS = 'parkings';
  17. private const URL_ADJUST_DATA = 'adjust-data';
  18. private const URL_RECEIPT_ISSUING_ORDER = 'receipt-issuing';
  19. private const CONFIG_KEY_API_HOST = "logic.custom.hellotechno.host";
  20. public static function getCustomers(?string $customerCode = null)
  21. {
  22. $query = [];
  23. if ($customerCode) {
  24. $query['customer_code'] = $customerCode;
  25. }
  26. return static::get(static::getCustomersUrl(), $query);
  27. }
  28. public static function getParkings(?string $customerCode, ?string $parkingManagementCode = null)
  29. {
  30. if ($customerCode) {
  31. $query['customer_code'] = $customerCode;
  32. }
  33. if ($parkingManagementCode) {
  34. $query['parking_management_code'] = $parkingManagementCode;
  35. }
  36. return static::get(static::getParkingsUrl(), $query);
  37. }
  38. public static function getAdjustData(string $customerCode, string $parkingManagementCode, int $adjustSeqNo)
  39. {
  40. $query['customer_code'] = $customerCode;
  41. $query['parking_management_code'] = $parkingManagementCode;
  42. $query['adjust_seq_no'] = $adjustSeqNo;
  43. return static::get(static::getAdjustDataUrl(), $query);
  44. }
  45. public static function sendReceiptIssuingOrder(ReceiptIssuingOrder $order, ReceiptIssuingHTParkingCustomOrder $customOrder)
  46. {
  47. $param = static::makeReceiptIssuingOrderParams($order, $customOrder);
  48. return static::post(static::getReceiptIssuingOrderUrl(), $param);
  49. }
  50. private static function getHost(): string
  51. {
  52. return config(static::CONFIG_KEY_API_HOST, "http://localhost");
  53. }
  54. private static function getCustomersUrl()
  55. {
  56. $condition = [static::getHost(), static::URL_CUSTOMERS];
  57. return implode('/', $condition);
  58. }
  59. private static function getParkingsUrl()
  60. {
  61. // $condition = [static::getHost(), static::URL_PARKINGS];
  62. $condition = [static::getHost(), static::URL_PARKINGS, "9990"];
  63. return implode('/', $condition);
  64. }
  65. private static function getAdjustDataUrl()
  66. {
  67. $condition = [static::getHost(), static::URL_ADJUST_DATA];
  68. return implode('/', $condition);
  69. }
  70. private static function getReceiptIssuingOrderUrl()
  71. {
  72. $condition = [static::getHost(), static::URL_RECEIPT_ISSUING_ORDER];
  73. return implode('/', $condition);
  74. }
  75. public static function makeReceiptIssuingOrderParams(ReceiptIssuingOrder $order, ReceiptIssuingHTParkingCustomOrder $customOrder): array
  76. {
  77. $param = [];
  78. $param['id'] = $order->id;
  79. $param['customer_code'] = $customOrder->customer_code;
  80. $param['parking_management_code'] = $customOrder->parking_management_code;
  81. $param['adjust_seq_no'] = $customOrder->adjust_seq_no;
  82. $param['order_datetime'] = static::formatDateTimeStr($order->order_datetime);
  83. $param['status_done'] = $order->status_done;
  84. $param['status_sms_send_datetime'] = static::formatDateTimeStr($order->status_sms_send_datetime);
  85. $param['status_first_access_datetime'] = static::formatDateTimeStr($order->status_first_access_datetime);
  86. $param['status_receipt_confirm_datetime'] = static::formatDateTimeStr($order->status_receipt_confirm_datetime);
  87. $param['status_order_mail_datetime'] = static::formatDateTimeStr($order->status_order_mail_datetime);
  88. $param['status_mail_download_datetime'] = static::formatDateTimeStr($order->status_mail_download_datetime);
  89. $param['status_mail_post_date'] = static::formatDateStr($order->status_mail_post_date);
  90. $param['status_receipt_download_datetime'] = static::formatDateTimeStr($order->status_receipt_download_datetime);
  91. $param['status_receipt_email_send_order_datetime'] = static::formatDateTimeStr($order->status_receipt_email_send_order_datetime);
  92. $param['status_receipt_email_send_datetime'] = static::formatDateTimeStr($order->status_receipt_email_send_datetime);
  93. $param['sms_phone_number'] = $order->sms_phone_number;
  94. $param['sms_send_success'] = $order->sms_send_success;
  95. $param['receipt_no'] = $order->receipt_no;
  96. $param['receipt_use_date'] = static::formatDateStr($order->receipt_use_date);
  97. $param['receipt_shop_name'] = $order->receipt_shop_name;
  98. $param['receipt_issuer'] = $order->receipt_issuer;
  99. $param['receipt_purpose'] = $order->receipt_purpose;
  100. $param['receipt_name'] = $order->receipt_name;
  101. $param['receipt_invoice_no'] = $order->receipt_invoice_no;
  102. $param['receipt_amount'] = $order->receipt_amount;
  103. $param['email'] = $order->email;
  104. $param['mail_pref_code'] = $order->mail_pref_code;
  105. $param['mail_zip_code'] = $order->mail_zip_code;
  106. $param['mail_address1'] = $order->mail_address1;
  107. $param['mail_address2'] = $order->mail_address2;
  108. $param['mail_address3'] = $order->mail_address3;
  109. $param['mail_name'] = $order->mail_name;
  110. $param['updated_at'] = static::formatDateStr($order->updated_at);
  111. return $param;
  112. }
  113. private static function formatDateStr(?Carbon $date): ?string
  114. {
  115. if ($date === null) return null;
  116. return $date->format('Y-m-d');
  117. }
  118. private static function formatDateTimeStr(?Carbon $date): ?string
  119. {
  120. if ($date === null) return null;
  121. return $date->format('Y-m-d H:i:s');
  122. }
  123. private static function get(string $url, array $query = [])
  124. {
  125. try {
  126. $res = Http::get($url, $query);
  127. if ($res->failed()) {
  128. throw $res->throw();
  129. }
  130. $data = $res->json();
  131. if (data_get($data, static::RESULT_CODE) !== static::RESULT_CODE_SUCCESS) {
  132. Log::error("HT RESPONSE ERROR");
  133. Log::error($data);
  134. throw new AppCommonException('HT API 失敗');
  135. }
  136. return data_get($data, static::FIELD_DATA, []);
  137. } catch (Exception $e) {
  138. Log::error("HelloTechno API エラー URL:${url}]");
  139. throw $e;
  140. }
  141. }
  142. private static function post(string $url, array $param = [])
  143. {
  144. try {
  145. $res = Http::post($url, $param);
  146. if ($res->failed()) {
  147. throw $res->throw();
  148. }
  149. $data = $res->json();
  150. if (data_get($data, static::RESULT_CODE) !== static::RESULT_CODE_SUCCESS) {
  151. Log::error("HT RESPONSE ERROR");
  152. Log::error($data);
  153. throw new AppCommonException('HT API 失敗');
  154. }
  155. return data_get($data, static::FIELD_DATA, []);
  156. } catch (Exception $e) {
  157. Log::error("HelloTechno API エラー URL:${url}]");
  158. throw $e;
  159. }
  160. }
  161. }