Files
oil/server-tp6/app/store/model/partners/Order.php
T
vipnub fafd3e2c16 1、合作商余额查询
2、分油账户司机可用额度
2026-10-20 23:21:10 +08:00

164 lines
6.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
// +----------------------------------------------------------------------
// | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2017~2023 https://www.yiovo.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
// +----------------------------------------------------------------------
// | Author: 萤火科技 <admin@yiovo.com>
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\store\model\partners;
use app\common\model\partners\Order as OrderModel;
use app\common\service\QytOil;
/**
* 合作商订单
* Class Order
* @package app\store\model\partners
*/
class Order extends OrderModel
{
/**
* 身份证号脱敏(仅后台展示层)
* 注意:本访问器只挂在 store 模型上;发放流程用的是 app\common\model\partners\Order,
* 取到的仍是明文,不会把打码后的身份证号发给企油通。
* @param string|null $value
* @return string
*/
public function getIdCardAttr($value): string
{
return QytOil::maskIdCard((string) $value);
}
/**
* 获取余额变动明细列表
* @param array $param
* @return mixed
*/
public function getList(array $param = [])
{
// 设置查询条件
$filter = $this->getFilter($param);
// 先查询总金额
$totalPayPrice = $this->with(['partners'])
->alias('order')
->field('order.*')
->where($filter)
->sum('order.total_pay_price');
// 获取列表数据
$list = $this->with(['partners'])
->alias('order')
->field('order.*')
->where($filter)
->order(['order.create_time' => 'desc'])
->paginate(15);
// 获取数据列表
return [
'list' => $list,
'total_money' => $totalPayPrice,
];
}
/**
* 设置查询条件
* @param array $param
* @return array
*/
private function getFilter(array $param): array
{
// 设置默认的检索数据
$params = $this->setQueryDefaultValue($param, [
'partners_id' => 0, // 合作商ID
'search' => '', // 司机手机号
'driver_name' => '', // 司机姓名
'orderNo' => '', // 单号:油卡编号/下单平台单号/批次号/运单号
'oil_status' => -1, // 分油(发放)状态
'oil_status_zsy' => -1, // 企油通发放态 0未提交 1发放中 2成功 3失败
'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']];
// 司机手机号
!empty($params['search']) && $filter[] = ['order.mobile', 'like', "%{$params['search']}%"];
// 司机姓名
!empty($params['driver_name']) && $filter[] = ['order.driver_name', 'like', "%{$params['driver_name']}%"];
// 单号模糊检索(油卡编号 / 下单平台销售单号 / 企油通批次号 / 运单号)
if (!empty($params['orderNo'])) {
$kw = $params['orderNo'];
$filter[] = ['order.oilCardNo|order.partners_order_no|order.batch_no|order.waybill_no', 'like', "%{$kw}%"];
}
// 分油(发放)状态
$params['oil_status'] > -1 && $filter[] = ['oil_status', '=', (int)$params['oil_status']];
// 企油通发放态
$params['oil_status_zsy'] > -1 && $filter[] = ['oil_status_zsy', '=', (int)$params['oil_status_zsy']];
// 加油核销状态
$params['use_status'] > -1 && $filter[] = ['use_status', '=', (int)$params['use_status']];
// 退款状态
$params['refund_status'] > -1 && $filter[] = ['order.refund_status', '=', (int)$params['refund_status']];
// 司机身份证号(精确匹配)
!empty($params['id_card']) && $filter[] = ['order.id_card', '=', strtoupper(trim((string)$params['id_card']))];
// 起止时间
if (!empty($params['betweenTime'])) {
$times = between_time($params['betweenTime']);
$filter[] = ['order.create_time', '>=', strtotime(date('Y-m-d',$times['start_time']))];
$filter[] = ['order.create_time', '<', strtotime(date('Y-m-d',$times['end_time'])) + 86400];
}
return $filter;
}
/**
* 获取全部记录
* @param array $param
* @return \think\Collection
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getAll(array $param = [])
{
return $this->where($param)
->order(['order_id' => 'asc'])
->select();
}
/**
* 获取某天的总销售额
* @param null $startDate
* @param null $endDate
* @param array $partners
* @return float
*/
public function getOrderTotalPrice($startDate = null, $endDate = null,$partners=[]): float
{
// 查询对象
$query = $this->getNewQuery();
$filter = [];
// 设置查询条件
if (!is_null($startDate) && !is_null($endDate)) {
$filter[] = ['create_time', '>=', strtotime($startDate)];
$filter[] = ['create_time', '<', strtotime($endDate) + 86400];
}
if(!empty($partners)) {
$filter[] = ['partners_id', '=', $partners['partners_id']];
}
// 总销售额(只统计下单平台的单,小程序单不计入合作商口径)
return $query->where('oil_status_zsy', '=', 2)
->where('source', '=', 'partner')
->where($filter)
->sum('total_price');
}
}