2025-09-09 18:02:10 +08:00
|
|
|
<?php
|
|
|
|
|
namespace app\admin\controller;
|
|
|
|
|
|
|
|
|
|
use app\common\controller\BaseController;
|
|
|
|
|
use app\common\traits\crud\CrudControllerTrait;
|
|
|
|
|
use app\common\service\StockOrdersService;
|
|
|
|
|
use support\Request;
|
|
|
|
|
|
|
|
|
|
class StockOrdersController extends BaseController
|
|
|
|
|
{
|
|
|
|
|
protected $noNeedLogin = ['print'];
|
|
|
|
|
|
|
|
|
|
protected $noNeedHeaderData = ['print'];
|
|
|
|
|
|
|
|
|
|
use CrudControllerTrait;
|
|
|
|
|
|
|
|
|
|
protected $service;
|
|
|
|
|
|
|
|
|
|
public function __construct()
|
|
|
|
|
{
|
|
|
|
|
$this->service = new StockOrdersService();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 列表页数据格式化
|
|
|
|
|
*
|
|
|
|
|
* @param array $data
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
protected function indexFormat($data)
|
|
|
|
|
{
|
|
|
|
|
if (isset($data['created_at'])) $data['created_at'] = date('Y-m-d H:i:s', $data['created_at']);
|
|
|
|
|
if (isset($data['updated_at'])) $data['updated_at'] = date('Y-m-d H:i:s', $data['updated_at']);
|
|
|
|
|
if (isset($data['eta_ship_date'])) $data['eta_ship_date'] = date('Y-m-d', $data['eta_ship_date']);
|
|
|
|
|
if (isset($data['biz_date'])) $data['biz_date'] = date('Y-m-d', $data['biz_date']);
|
|
|
|
|
if (isset($data['latest_arrival_date'])) $data['latest_arrival_date'] = date('Y-m-d', $data['latest_arrival_date']);
|
|
|
|
|
|
|
|
|
|
if (isset($data['id'])) {
|
|
|
|
|
$appro = new \app\common\utils\approval\service\ApprovalFlowService();
|
|
|
|
|
$appro = $appro->getBriefStatusByBiz($data['id'], null, 'name');
|
2025-10-11 08:41:11 +00:00
|
|
|
$map = ['processing'=>'审批中','pending'=>'审批中','approved'=>'已通过','rejected'=>'已拒绝','revoked'=>'已撤回','voided'=>'已作废'];
|
2025-09-09 18:02:10 +08:00
|
|
|
if ($appro) {
|
|
|
|
|
$data['appro_status'] = [
|
|
|
|
|
'status' => $appro['status'],
|
|
|
|
|
'status_desc' => $map[$appro['status']],
|
|
|
|
|
'name' => isset($appro['step'])?$appro['step']['name']:''
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected function showFormat($data)
|
|
|
|
|
{
|
|
|
|
|
if (isset($data['created_at'])) $data['created_at'] = date('Y-m-d H:i:s', $data['created_at']);
|
|
|
|
|
if (isset($data['updated_at'])) $data['updated_at'] = date('Y-m-d H:i:s', $data['updated_at']);
|
|
|
|
|
if (isset($data['eta_ship_date'])) $data['eta_ship_date'] = date('Y-m-d', $data['eta_ship_date']);
|
2025-10-21 19:55:36 +08:00
|
|
|
if (isset($data['biz_date']) && $data['biz_date'] > 0) $data['biz_date'] = date('Y-m-d', $data['biz_date']);
|
|
|
|
|
if (isset($data['latest_arrival_date']) && $data['latest_arrival_date'] > 0) $data['latest_arrival_date'] = date('Y-m-d', $data['latest_arrival_date']);
|
|
|
|
|
if (isset($data['pick_up_date']) && $data['pick_up_date'] > 0) $data['pick_up_date'] = date('Y-m-d', $data['pick_up_date']);
|
|
|
|
|
if (isset($data['collect_all_date']) && $data['collect_all_date'] > 0) $data['collect_all_date'] = date('Y-m-d', $data['collect_all_date']);
|
|
|
|
|
|
|
|
|
|
// 处理文件附件
|
|
|
|
|
$fileTypes = [
|
|
|
|
|
'contract' => \app\common\model\StockOrdersFiles::CONTRACT,
|
|
|
|
|
'transaction_slip' => \app\common\model\StockOrdersFiles::TRANSACTION_SLIP,
|
|
|
|
|
'pi_doc' => \app\common\model\StockOrdersFiles::PI_DOC
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
// 初始化文件字段
|
|
|
|
|
foreach (array_keys($fileTypes) as $field) {
|
|
|
|
|
$data[$field] = [];
|
|
|
|
|
$data[$field . '_url'] = [];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 按file_code分组文件
|
|
|
|
|
if (!empty($data['files'])) {
|
|
|
|
|
$groupedFiles = [];
|
|
|
|
|
foreach ($data['files'] as $file) {
|
|
|
|
|
if (!isset($groupedFiles[$file['file_code']])) {
|
|
|
|
|
$groupedFiles[$file['file_code']] = [];
|
|
|
|
|
}
|
2025-11-03 18:16:51 +08:00
|
|
|
$groupedFiles[$file['file_code']][] = [
|
|
|
|
|
'url' => $file['file_url'],
|
|
|
|
|
'original_name' => $file['original_name']
|
|
|
|
|
];
|
2025-10-21 19:55:36 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 映射到对应字段
|
|
|
|
|
foreach ($fileTypes as $field => $fileCode) {
|
|
|
|
|
if (isset($groupedFiles[$fileCode])) {
|
2025-11-03 18:16:51 +08:00
|
|
|
// 文件信息数组,包含url和original_name
|
2025-10-21 19:55:36 +08:00
|
|
|
$data[$field] = $groupedFiles[$fileCode];
|
|
|
|
|
|
|
|
|
|
// 完整URL数组
|
|
|
|
|
$fullUrls = [];
|
2025-11-03 18:16:51 +08:00
|
|
|
foreach ($groupedFiles[$fileCode] as $fileInfo) {
|
|
|
|
|
$fullUrls[] = (new \app\common\service\OssService)->generatePrivateUrl($fileInfo['url']);
|
2025-10-21 19:55:36 +08:00
|
|
|
}
|
|
|
|
|
$data[$field . '_url'] = $fullUrls;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
unset($data['files']);
|
2025-09-09 18:02:10 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (count($data['moneyValues']) > 0) {
|
2025-10-21 19:55:36 +08:00
|
|
|
foreach ($data['moneyValues'] as $mvs) {
|
|
|
|
|
$data[$mvs['field']] = [
|
|
|
|
|
'exchange_rate' => $mvs['exchange_rate'],
|
|
|
|
|
'amount' => $mvs['amount'],
|
|
|
|
|
'currency' => $mvs['currency'],
|
|
|
|
|
'id' => $mvs['id']
|
|
|
|
|
];
|
|
|
|
|
}
|
2025-09-09 18:02:10 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach ($data['items'] as &$item) {
|
|
|
|
|
foreach ($item['moneyValues'] as $mv) {
|
|
|
|
|
$item[$mv['field']] = [
|
|
|
|
|
'exchange_rate' => $mv['exchange_rate'],
|
|
|
|
|
'amount' => $mv['amount'],
|
|
|
|
|
'currency' => $mv['currency'],
|
|
|
|
|
'id' => $mv['id']
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
unset($item['moneyValues']);
|
|
|
|
|
|
|
|
|
|
foreach ($item['options'] as $opt) {
|
|
|
|
|
$item['modify_list'][] = [
|
|
|
|
|
"id" => $opt['id'],
|
|
|
|
|
"order_item_id" => $opt['order_item_id'],
|
|
|
|
|
"option_id" => $opt['option_id'],
|
|
|
|
|
"option_name_snapshot" => $opt['option_name_snapshot'],
|
|
|
|
|
"option_price" => $opt['option_price']
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
unset($item['options']);
|
2026-08-26 11:51:40 +08:00
|
|
|
// 附件 url 响应期重签(历史签名URL会过期)
|
|
|
|
|
if (!empty($item['attachment']) && is_array($item['attachment'])) {
|
|
|
|
|
$item['attachment'] = \app\common\service\OssService::resignAttachmentUrls($item['attachment']);
|
|
|
|
|
}
|
2025-09-09 18:02:10 +08:00
|
|
|
}
|
|
|
|
|
unset($item);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach ($data['accounts'] as $acc) {
|
|
|
|
|
$data['account_list'][] = [
|
|
|
|
|
"id" => $acc['id'],
|
|
|
|
|
"order_id" => $acc['order_id'],
|
|
|
|
|
"seq_no" => $acc['seq_no'],
|
|
|
|
|
"remit_country_id" => $acc['remit_country_id'],
|
|
|
|
|
"remit_country_name_snapshot" => $acc['remit_country_name_snapshot'],
|
|
|
|
|
"remit_date" => date('Y-m-d', $acc['remit_date']),
|
|
|
|
|
"currency_code" => $acc['currency_code'],
|
|
|
|
|
"currency_name_snapshot" => $acc['currency_name_snapshot'],
|
|
|
|
|
"account_id" => $acc['account_id'],
|
|
|
|
|
"account_name_snapshot" => $acc['account_name_snapshot'],
|
|
|
|
|
"remitter_name" => $acc['remitter_name'],
|
|
|
|
|
"amount" => $acc['amount']
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
unset($data['accounts']);
|
|
|
|
|
|
|
|
|
|
$data['veh_list'] = $data['items'];
|
|
|
|
|
unset($data['items']);
|
|
|
|
|
return $data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected function printFormat($data)
|
|
|
|
|
{
|
|
|
|
|
$data['file_url_full'] = (!empty($data['file_url'])) ? (new \app\common\service\OssService)->generatePrivateUrl($data['file_url']) : '';
|
|
|
|
|
return $data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function print(Request $request)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
$raw = $this->service->servicePrint($request);
|
|
|
|
|
$data = $this->transformData($raw, method_exists($this, 'printFormat')
|
|
|
|
|
? [$this, 'printFormat']
|
|
|
|
|
: null);
|
|
|
|
|
return $this->success($data);
|
|
|
|
|
} catch (\Throwable $e) {
|
|
|
|
|
return $this->error($e->getMessage());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-11 17:13:28 +08:00
|
|
|
public function detail(Request $request)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
$raw = $this->service->serviceDetail($request);
|
|
|
|
|
$data = $this->transformData($raw, method_exists($this, 'detailFormat')
|
|
|
|
|
? [$this, 'detailFormat']
|
|
|
|
|
: null);
|
|
|
|
|
return $this->success($data);
|
|
|
|
|
} catch (\Throwable $e) {
|
|
|
|
|
return $this->error($e->getMessage());
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-09-09 18:02:10 +08:00
|
|
|
}
|