订单状态变更

This commit is contained in:
Billy 2025-10-28 14:51:33 +08:00
parent 89e5513272
commit 19d590a60b
2 changed files with 614 additions and 645 deletions

View File

@ -2,6 +2,7 @@
namespace addons\shopro\controller\order;
use addons\shopro\library\ccblife\CcbOrderService;
use think\Db;
use addons\shopro\exception\ShoproException;
use addons\shopro\controller\Common;
@ -182,6 +183,9 @@ class Order extends Common
// 订单未支付,处理 item 状态
$order = $order->setOrderItemStatusByOrder($order); // 这里订单转 数组了
$orderService = new CcbOrderService();
$orderService->updateOrderStatus($id, 4);//取消订单
$this->success('取消成功', $order);
}
@ -206,6 +210,10 @@ class Order extends Common
$order = OrderModel::with(['items', 'invoice'])->find($id);
$order = $order->setOrderItemStatusByOrder($order); // 这里订单转 数组了
$orderService = new CcbOrderService();
$orderService->updateOrderStatus($id, 0,1);//申请退款
$this->success('申请成功', $order);
}

View File

@ -132,7 +132,7 @@ class CcbOrderService
* @param string|null $refundStatus 退款状态0-无退款 1-退款申请 2-已退款 3-部分退款)
* @return array
*/
public function updateOrderStatus($orderId, $status = null, $refundStatus = null)
public function updateOrderStatus($orderId, $status = 0, $refundStatus = 0)
{
$startTime = microtime(true);
$txSeq = CcbMD5::generateTransactionSeq();
@ -151,7 +151,6 @@ class CcbOrderService
}
// 获取支付流水号
// ✅ 修复:订单表字段名是 ccb_pay_flow_id不是 pay_flow_id
$payFlowId = $order['ccb_pay_flow_id'] ?? null;
if (empty($payFlowId)) {
throw new \Exception('订单缺少支付流水号,无法更新状态到建行');
@ -164,8 +163,6 @@ class CcbOrderService
}
// 映射订单状态
$payStatus = $status ?: $this->mapOrderStatus($order['status']);
$mappedRefundStatus = $refundStatus ?: $this->mapRefundStatus($order['refund_status'] ?? 0);
// 确定通知类型0-支付状态修改 1-退款状态修改)
$informId = !empty($refundStatus) && $refundStatus != '0' ? '1' : '0';
@ -174,12 +171,11 @@ class CcbOrderService
$additionalParams = [];
if ($informId == '0') {
// 支付状态修改
$additionalParams['PAY_STATUS'] = $payStatus;
$additionalParams['PAY_STATUS'] = $status;
$additionalParams['PAY_AMT'] = number_format($order['pay_fee'] ?? 0, 2, '.', '');
} else {
// 退款状态修改
$additionalParams['REFUND_STATUS'] = $mappedRefundStatus;
$additionalParams['TOTAL_REFUND_AMT'] = number_format($order['refund_fee'] ?? 0, 2, '.', '');
$additionalParams['REFUND_STATUS'] = $refundStatus;
}
// 添加其他可选参数
@ -462,8 +458,8 @@ class CcbOrderService
'ORDER_ID' => $order['order_sn'], // 订单号
'ORDER_DT' => $orderDt, // 订单日期yyyyMMddHHmmss
'TOTAL_AMT' => $totalAmount, // 订单原金额
'ORDER_STATUS' => $this->mapOrderStatus($order['status']), // 订单状态
'REFUND_STATUS' => $this->mapRefundStatus($order['refund_status'] ?? 0), // 退款状态
'ORDER_STATUS' => 0, // 订单状态
'REFUND_STATUS' => 0, // 退款状态
'MCT_NM' => $this->config['merchant']['name'] ?? '商户名称', // 商户名称
'PAY_FLOW_ID' => $payFlowId, // ✅ 支付流水号(使用控制器传入的统一流水号)
'PAY_MRCH_ID' => $this->config['merchant_id'], // 支付商户号(必填!)
@ -607,39 +603,4 @@ class CcbOrderService
Db::name('shopro_order')->where('id', $orderId)->update($updateData);
}
/**
* 映射订单状态
*
* @param string $status Shopro订单状态
* @return string 建行订单状态
*/
private function mapOrderStatus($status)
{
$statusMap = [
'unpaid' => '0', // 待支付
'paid' => '1', // 已支付
'shipped' => '2', // 已发货
'received' => '3', // 已收货
'completed' => '4', // 已完成
'cancelled' => '5', // 已取消
'refunded' => '6' // 已退款
];
return $statusMap[$status] ?? '0';
}
/**
* 映射退款状态
*
* @param int $refundStatus 退款状态
* @return string
*/
private function mapRefundStatus($refundStatus)
{
if ($refundStatus == 0) return '0'; // 无退款
if ($refundStatus == 1) return '1'; // 退款中
if ($refundStatus == 2) return '2'; // 已退款
return '0';
}
}