This commit is contained in:
hongwenwu 2023-09-11 11:21:08 +08:00
commit 8e972bb2dd
2 changed files with 59 additions and 12 deletions

View File

@ -17,9 +17,19 @@ composer require ykxiao/dmmes
# 使用 # 使用
```php ```php
// secretKey 必填
// callback url 选填业务逻辑需要时填写详情查看SDK文档
// options 选填(日志选项,默认写入日志)
$secretKey = 'gFBfirGATxafTeq74RAngaL74Ksdxhuy'; $secretKey = 'gFBfirGATxafTeq74RAngaL74Ksdxhuy';
$w = new Order($secretKey); $options = [
'logger' => true,
'logs_path' => storage_path('logs/mes-sdk'),
];
$w = new Order($secretKey, 'callback url', $options);
// 获取工单数据 // 获取工单数据
$response = $w->getProductOrder('SN5436745676543'); $response = $w->getProductOrder('SN5436745676543');

View File

@ -10,6 +10,7 @@ namespace Ykxiao\Dmmes\OrderActions;
use GuzzleHttp\Client; use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Exception\GuzzleException;
use Ykxiao\Dmmes\Exceptions\Exception;
use Ykxiao\Dmmes\Exceptions\HttpException; use Ykxiao\Dmmes\Exceptions\HttpException;
class Order class Order
@ -23,12 +24,14 @@ class Order
protected $secretKey; protected $secretKey;
protected $callback; protected $callback;
protected $options = [];
public function __construct($secretKey, $callback = '') public function __construct($secretKey, $callback = '', $options = [])
{ {
$this->secretKey = $secretKey; $this->secretKey = $secretKey;
$this->httpClient = new Client($this->guzzleOptions); $this->httpClient = new Client($this->guzzleOptions);
$this->callback = $callback; $this->callback = $callback;
$this->options = $options;
} }
public function getHttpClient(): Client public function getHttpClient(): Client
@ -46,12 +49,45 @@ class Order
return (new Sign())->generateHmacSignature($this->secretKey, $params); return (new Sign())->generateHmacSignature($this->secretKey, $params);
} }
/**
* 日志
* @param array $logs
* @return void
* @throws Exception
*/
private function logger(array $logs)
{
$logFolder = './storage/logs/mes-sdk'; // 默认日志文件夹路径
$logFile = $logFolder . '/logs.log'; // 默认日志文件路径
// 如果有自定义日志路径,则使用自定义路径
if (!empty($this->options['logger']) && !empty($this->options['logs_path'])) {
$logFolder = $this->options['logs_path'];
$logFile = $logFolder . '/logs.log';
}
// 判断文件夹是否存在,如果不存在则创建文件夹
if (!is_dir($logFolder)) {
if (!mkdir($logFolder, 0777, true)) {
throw new Exception("Failed to create log folder: $logFolder");
}
}
$timestamp = date('Y-m-d H:i:s');
$logContent = "[$timestamp] " . json_encode($logs, JSON_UNESCAPED_UNICODE) . PHP_EOL;
// 打开日志文件并追加内容
if (file_put_contents($logFile, $logContent, FILE_APPEND) === false) {
throw new Exception("Failed to write to log file: $logFile");
}
}
/** /**
* 接口请求 * 接口请求
* @param $api * @param $api
* @param $data * @param $data
* @return mixed|string * @return mixed|string
* @throws HttpException|GuzzleException * @throws \Exception|GuzzleException
*/ */
private function sendRequest($api, $data) private function sendRequest($api, $data)
{ {
@ -86,8 +122,12 @@ class Order
->getBody() ->getBody()
->getContents(); ->getContents();
return 'json' === self::DEFAULT_FORMAT ? json_decode($response, true) : $response; $result = 'json' === self::DEFAULT_FORMAT ? json_decode($response, true) : $response;
// 日志
$this->logger(['request' => $body, 'response' => $result]);
return $result;
} catch (\Exception $e) { } catch (\Exception $e) {
$this->logger(['request' => $body, 'response' => $e]);
throw new HttpException($e->getMessage(), $e->getCode(), $e); throw new HttpException($e->getMessage(), $e->getCode(), $e);
} }
} }
@ -96,7 +136,7 @@ class Order
* 获取工单信息 * 获取工单信息
* @param $order_sn * @param $order_sn
* @return mixed|string * @return mixed|string
* @throws HttpException|GuzzleException * @throws GuzzleException
*/ */
public function getProductOrder($order_sn) public function getProductOrder($order_sn)
{ {
@ -110,29 +150,26 @@ class Order
* 加工工单原木材种 * 加工工单原木材种
* @return mixed|string * @return mixed|string
* @throws GuzzleException * @throws GuzzleException
* @throws HttpException
* @throws InvalidArgumentException
*/ */
public function getWoodTypeOptions($data) public function getWoodTypeOptions($data)
{ {
return $this->baseFun($data, 'Wood.types'); return $this->sendRequest('Wood.types', $data);
} }
/** /**
* 加工等级 * 加工等级
* @return mixed|string * @return mixed|string
* @throws GuzzleException * @throws GuzzleException
* @throws HttpException
* @throws InvalidArgumentException
*/ */
public function getProductionLevelOptions($data) public function getProductionLevelOptions($data)
{ {
return $this->baseFun($data, 'production.levels'); return $this->sendRequest('production.levels', $data);
} }
/** /**
* 加工工单创建 * 加工工单创建
* @return mixed|string * @return mixed|string
* @throws HttpException|GuzzleException * @throws GuzzleException
*/ */
public function createProductOrder($data) public function createProductOrder($data)
{ {