diff --git a/application/admin/controller/shopro/split/Order.php b/application/admin/controller/shopro/split/Order.php index 1fb3337..cb07931 100644 --- a/application/admin/controller/shopro/split/Order.php +++ b/application/admin/controller/shopro/split/Order.php @@ -9,6 +9,7 @@ use addons\shopro\library\split\SplitExecutor; use addons\shopro\library\split\ProfitSharingService; use app\admin\model\shopro\order\Order as ShopOrder; use app\admin\model\shopro\user\User as ShopUser; +use think\Db; class Order extends Base { @@ -32,7 +33,7 @@ class Order extends Base { $this->request->filter(['strip_tags']); if ($this->request->isAjax()) { - $nobuildfields = ['buyer_keyword', 'order_sn', 'status', 'channel', 'createtime']; + $nobuildfields = ['buyer_keyword', 'order_sn', 'wx_transaction_id', 'status', 'channel', 'createtime']; list($where, $sort, $order, $offset, $limit) = $this->custombuildparams(null, $nobuildfields); $query = $this->buildSearch(); @@ -71,6 +72,17 @@ class Order extends Base $orderIds = ShopOrder::where('order_sn', 'like', '%' . trim($filter['order_sn']) . '%')->column('id'); $query = $query->where('order_id', 'in', $orderIds ?: [0]); } + if (!empty($filter['wx_transaction_id'])) { + $orderIds = $this->resolveOrderIdsByWxTransactionId($filter['wx_transaction_id']); + $query = $query->where(function ($q) use ($orderIds, $filter) { + $txn = trim($filter['wx_transaction_id']); + $like = '%' . $txn . '%'; + $q->where('transaction_id', 'like', $like); + if ($orderIds) { + $q->whereOr('order_id', 'in', $orderIds); + } + }); + } if (!empty($filter['buyer_keyword'])) { $kw = trim($filter['buyer_keyword']); $userIds = ShopUser::where('nickname|mobile', 'like', '%' . $kw . '%')->column('id'); @@ -99,6 +111,26 @@ class Order extends Base return $query; } + /** + * 微信交易单号 → 商城 order_id(汇付单号在 payment_json / pay_ext.extra) + */ + protected function resolveOrderIdsByWxTransactionId($txn) + { + $txn = trim((string) $txn); + if ($txn === '') { + return []; + } + $like = '%' . $txn . '%'; + $ids = ShopOrder::where('transaction_id', 'like', $like)->column('id'); + $ids = array_merge($ids, ShopOrder::where('payment_json', 'like', $like)->column('id')); + try { + $ids = array_merge($ids, Db::name('shopro_huifu_pay_ext')->where('extra', 'like', $like)->column('order_id')); + } catch (\Exception $e) { + // table may not exist + } + return array_values(array_unique(array_filter(array_map('intval', $ids)))); + } + protected function formatSplitOrderList($list) { $rows = []; diff --git a/application/admin/view/shopro/split/order/index.html b/application/admin/view/shopro/split/order/index.html index 9cca58c..72eae3a 100644 --- a/application/admin/view/shopro/split/order/index.html +++ b/application/admin/view/shopro/split/order/index.html @@ -199,6 +199,7 @@