1、合作商余额查询

2、分油账户司机可用额度
This commit is contained in:
2026-10-20 23:21:10 +08:00
parent 45452c1799
commit fafd3e2c16
134 changed files with 2344 additions and 352 deletions
+70
View File
@@ -21,6 +21,7 @@ use think\facade\Request;
use app\common\model\Goods as GoodsModel;
use app\common\model\Order as OrderModel;
use app\common\service\Order as OrderService;
use app\common\service\QytOil;
use app\common\service\Message as MessageService;
use app\common\service\order\Refund as RefundService;
use app\common\enum\order\OrderStatus as OrderStatusEnum;
@@ -121,6 +122,8 @@ class Order extends OrderModel
})
->order(['order.create_time' => 'desc'])
->paginate(10);
// 给每个油券商品行挂上对应的企油通发放单(后台订单页的企油通列与操作按钮用)
$this->setQytData($list);
// 获取数据列表
return [
'list' => $list,
@@ -128,6 +131,55 @@ class Order extends OrderModel
];
}
/**
* 给订单商品行挂上企油通发放单数据(字段名 qyt)
*
* 小程序订单在支付成功后由 MallOil::create 为每个油券商品行建了一条
* yoshop_partners_order(source='mall',mall_order_goods_id 指回商品行),
* 企油通的发放/加油/退款/发票全挂在那张表上。后台订单页要展示这些信息、
* 并复用 /partners.order/* 的操作接口,所以这里按商品行把发放单带出来。
*
* @param \think\Paginator|\think\Collection $list
*/
public function setQytData($list): void
{
$goodsIds = [];
foreach ($list as $order) {
foreach ($order['goods'] as $goods) {
$goodsIds[] = (int)$goods['order_goods_id'];
}
}
if (!$goodsIds) {
return;
}
$rows = Db::name('partners_order')
->where('source', '=', 'mall')
->whereIn('mall_order_goods_id', $goodsIds)
->select()->toArray();
$map = [];
foreach ($rows as $row) {
// 身份证号脱敏(后台展示层)
$row['id_card_mask'] = QytOil::maskIdCard((string)$row['id_card']);
unset($row['id_card']);
// 前端用的是严格相等(item.oil_status_zsy !== 2),这里显式转型,
// 不依赖 PDO 是否把 int 列取成字符串
foreach (['order_id', 'oil_status', 'oil_status_zsy', 'use_status', 'refund_status',
'used_num', 'oil_callback', 'use_callback', 'qyt_enterprise_id',
'mall_order_id', 'mall_order_goods_id', 'user_id'] as $k) {
$row[$k] = (int)$row[$k];
}
// 剩余可退金额 = 发放金额 - 已加油 - 已退款
$row['remain_amount'] = number_format(max(0, (float)$row['total_price']
- (float)$row['used_amount'] - (float)$row['refund_amount']), 2, '.', '');
$map[(int)$row['mall_order_goods_id']] = $row;
}
foreach ($list as $order) {
foreach ($order['goods'] as $goods) {
$goods['qyt'] = $map[(int)$goods['order_goods_id']] ?? null;
}
}
}
/**
* 订单列表(全部)
@@ -173,6 +225,8 @@ class Order extends OrderModel
'pay_status' => -1, // 支付状态
'oil_status' => -1, // 分油状态
'use_status' => -1, // 使用状态
'oil_status_zsy' => -1, // 企油通发放态 0未提交 1发放中 2成功 3失败
'refund_status' => -1, // 退款状态 0未退款 1退款中 2已退款 3退款失败 4待人工确认
'deliveryType' => -1, // 配送方式
'betweenTime' => [], // 起止时间
'userId' => 0, // 会员ID
@@ -233,6 +287,22 @@ class Order extends OrderModel
->column('order_id'); // 获取所有符合条件的 order_id 数组
$filter[] = ['order.order_id', 'in', $subQuery];
}
// 企油通发放态(挂在 partners_order 上,按 mall_order_id 反查)
if($params['oil_status_zsy'] > -1){
$subQuery = Db::name('partners_order')
->where('source', '=', 'mall')
->where('oil_status_zsy', '=', (int)$params['oil_status_zsy'])
->column('mall_order_id');
$filter[] = ['order.order_id', 'in', $subQuery];
}
// 退款状态(同上)
if($params['refund_status'] > -1){
$subQuery = Db::name('partners_order')
->where('source', '=', 'mall')
->where('refund_status', '=', (int)$params['refund_status'])
->column('mall_order_id');
$filter[] = ['order.order_id', 'in', $subQuery];
}
// 配送方式
$params['deliveryType'] > -1 && $filter[] = ['delivery_type', '=', (int)$params['deliveryType']];
// 用户id
@@ -81,10 +81,13 @@ class Order extends OrderModel
'use_status' => -1, // 加油核销状态
'refund_status' => -1, // 退款状态 0未退款 1退款中 2已退款 3退款失败 4待人工确认
'id_card' => '', // 司机身份证号(从司机管理跳转过来时使用)
'source' => 'partner', // 订单来源 partner=下单平台 mall=小程序商城 all=全部
'betweenTime' => [] // 起止时间
]);
// 检索查询条件
$filter = [];
// 来源:本页只管下单平台的单,小程序单在「订单管理」里看,默认过滤掉
$params['source'] !== 'all' && $filter[] = ['order.source', '=', (string)$params['source']];
// 合作商ID
$params['partners_id'] > 0 && $filter[] = ['order.partners_id', '=', $params['partners_id']];
// 司机手机号
@@ -150,8 +153,9 @@ class Order extends OrderModel
if(!empty($partners)) {
$filter[] = ['partners_id', '=', $partners['partners_id']];
}
// 总销售额
// 总销售额(只统计下单平台的单,小程序单不计入合作商口径)
return $query->where('oil_status_zsy', '=', 2)
->where('source', '=', 'partner')
->where($filter)
->sum('total_price');
}