Files
fdesk/app/crm/controller/StockOrdersController.php
T

268 lines
10 KiB
PHP
Raw Normal View History

2025-09-04 10:26:28 +08:00
<?php
namespace app\crm\controller;
use app\common\controller\BaseController;
use app\common\traits\crud\CrudControllerTrait;
2025-09-10 13:39:06 +08:00
use app\crm\service\StockOrdersService;
2025-09-04 10:26:28 +08:00
use support\Request;
class StockOrdersController extends BaseController
{
2025-09-08 11:34:19 +08:00
protected $noNeedLogin = ['print'];
protected $noNeedHeaderData = ['print'];
2025-09-04 10:26:28 +08:00
use CrudControllerTrait;
protected $service;
public function __construct()
{
$this->service = new StockOrdersService();
}
/**
* 列表页数据格式化
*
* @param array $data
* @return array
*/
2025-09-04 18:22:24 +08:00
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']);
2025-09-09 17:30:39 +08:00
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 17:30:39 +08:00
if ($appro) {
$data['appro_status'] = [
'status' => $appro['status'],
'status_desc' => $map[$appro['status']],
'name' => isset($appro['step'])?$appro['step']['name']:''
];
}
}
2025-09-04 18:22:24 +08:00
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-09-11 16:52:10 +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']);
2025-09-08 11:34:19 +08:00
2025-11-03 18:07:56 +08:00
// 处理文件附件:只允许 _url 字段调用 OSS 生成私有链接
2025-10-21 19:53:21 +08:00
$fileTypes = [
'contract' => \app\common\model\StockOrdersFiles::CONTRACT,
'transaction_slip' => \app\common\model\StockOrdersFiles::TRANSACTION_SLIP,
'pi_doc' => \app\common\model\StockOrdersFiles::PI_DOC
];
2025-11-03 18:07:56 +08:00
2025-10-21 19:53:21 +08:00
// 初始化文件字段
foreach (array_keys($fileTypes) as $field) {
2025-11-03 18:07:56 +08:00
$data[$field] = []; // 存储原始文件信息(不包含签名链接)
$data[$field . '_url'] = []; // 存储通过OSS生成的私有链接
2025-10-21 19:53:21 +08:00
}
2025-11-03 18:07:56 +08:00
// 按 file_code 分组文件
2025-10-21 19:53:21 +08:00
if (!empty($data['files'])) {
$groupedFiles = [];
foreach ($data['files'] as $file) {
2025-11-03 18:07:56 +08:00
$code = $file['file_code'];
if (!isset($groupedFiles[$code])) {
$groupedFiles[$code] = [];
2025-10-21 19:53:21 +08:00
}
2025-11-03 18:07:56 +08:00
$groupedFiles[$code][] = [
'url' => $file['file_url'], // 原始路径
'original_name' => $file['original_name'] // 原始文件名
];
2025-10-21 19:53:21 +08:00
}
2025-11-03 18:07:56 +08:00
// 映射到对应字段,并仅对 _url 调用 OSS 服务
2025-10-21 19:53:21 +08:00
foreach ($fileTypes as $field => $fileCode) {
if (isset($groupedFiles[$fileCode])) {
2025-11-03 18:07:56 +08:00
// 主字段存储基本信息(无签名链接)
2025-10-21 19:53:21 +08:00
$data[$field] = $groupedFiles[$fileCode];
2025-11-03 18:07:56 +08:00
// 只有 *_url 字段才生成带签名的完整 URL
$signedUrls = [];
foreach ($groupedFiles[$fileCode] as $fileInfo) {
$signedUrls[] = (new \app\common\service\OssService)->generatePrivateUrl($fileInfo['url']);
2025-10-21 19:53:21 +08:00
}
2025-11-03 18:07:56 +08:00
$data[$field . '_url'] = $signedUrls;
2025-10-21 19:53:21 +08:00
}
}
2025-11-03 18:07:56 +08:00
// 清理临时数据
2025-10-21 19:53:21 +08:00
unset($data['files']);
2025-09-08 11:34:19 +08:00
}
2025-09-04 18:22:24 +08:00
if (count($data['moneyValues']) > 0) {
2025-09-11 15:31:37 +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-04 18:22:24 +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']);
}
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;
}
2025-09-04 10:26:28 +08:00
2025-09-09 16:15:48 +08:00
protected function printFormat($data)
{
$data['file_url_full'] = (!empty($data['file_url'])) ? (new \app\common\service\OssService)->generatePrivateUrl($data['file_url']) : '';
return $data;
}
2025-09-05 09:26:29 +08:00
2025-09-10 18:34:20 +08:00
/**
* 获取打印数据
*/
2025-09-08 11:34:19 +08:00
public function print(Request $request)
{
try {
$raw = $this->service->servicePrint($request);
2025-09-09 16:15:48 +08:00
$data = $this->transformData($raw, method_exists($this, 'printFormat')
? [$this, 'printFormat']
: null);
return $this->success($data);
2025-09-08 11:34:19 +08:00
} catch (\Throwable $e) {
return $this->error($e->getMessage());
}
2025-09-11 15:31:37 +08:00
}
public function detail(Request $request)
{
try {
$raw = $this->service->serviceDetail($request);
2025-09-11 16:52:10 +08:00
$data = $this->transformData($raw, method_exists($this, 'detailFormat')
? [$this, 'detailFormat']
2025-09-11 15:31:37 +08:00
: null);
return $this->success($data);
} catch (\Throwable $e) {
return $this->error($e->getMessage());
}
2025-09-08 11:34:19 +08:00
}
2025-09-11 16:52:10 +08:00
protected function detailFormat($data)
{
// if (!isset($data['profit_total'])) $data['profit_total'] = 0.00;
return $data;
}
2025-09-05 09:26:29 +08:00
2025-09-10 18:34:20 +08:00
/**
* 启动审批
*/
public function approval(Request $request)
{
try {
$raw = $this->service->serviceApproval($request);
$data = $this->transformData($raw, method_exists($this, 'approvalFormat')
? [$this, 'approvalFormat']
: null);
return $this->success($data);
} catch (\Throwable $e) {
return $this->error($e->getMessage());
}
}
2025-09-04 10:26:28 +08:00
2025-10-10 11:09:37 +00:00
public function approvalNullify(Request $request)
{
try {
$raw = $this->service->serviceApprovalNullify($request);
$data = $this->transformData($raw, method_exists($this, 'approvalFormat')
? [$this, 'approvalFormat']
: null);
return $this->success($data);
} catch (\Throwable $e) {
return $this->error($e->getMessage());
}
}
public function approvalRevoke(Request $request)
{
try {
$raw = $this->service->serviceApprovalRevoke($request);
$data = $this->transformData($raw, method_exists($this, 'approvalFormat')
? [$this, 'approvalFormat']
: null);
return $this->success($data);
} catch (\Throwable $e) {
return $this->error($e->getMessage());
}
}
/**
* 最终审批
*/
public function ultimateApproval(Request $request)
{
try {
$raw = $this->service->serviceUltimateApproval($request);
$data = $this->transformData($raw, method_exists($this, 'approvalFormat')
? [$this, 'approvalFormat']
: null);
return $this->success($data);
} catch (\Throwable $e) {
return $this->error($e->getMessage());
}
}
2025-09-04 10:26:28 +08:00
}