1、合作商余额查询
2、分油账户司机可用额度
This commit is contained in:
@@ -153,8 +153,10 @@ class Order extends Controller
|
||||
*/
|
||||
public function cancelShare(): Json
|
||||
{
|
||||
// 企油通改造:本功能依赖已下线的上游(智慧油客/定聚),现已停用。
|
||||
return $this->renderError('小程序油品链路已停用');
|
||||
// 企油通改造:小程序订单的发放/加油/退款统一走 yoshop_partners_order,
|
||||
// 后台操作接口复用 app/store/controller/partners/Order.php(/partners.order/*),
|
||||
// 前端订单页传的是商品行上挂的 qyt.order_id。本接口保留仅为兼容老前端。
|
||||
return $this->renderError('该入口已迁移,请使用 /partners.order/ 下的同名接口');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -164,8 +166,10 @@ class Order extends Controller
|
||||
*/
|
||||
public function qrCode(): Json
|
||||
{
|
||||
// 企油通改造:本功能依赖已下线的上游(智慧油客/定聚),现已停用。
|
||||
return $this->renderError('小程序油品链路已停用');
|
||||
// 企油通改造:小程序订单的发放/加油/退款统一走 yoshop_partners_order,
|
||||
// 后台操作接口复用 app/store/controller/partners/Order.php(/partners.order/*),
|
||||
// 前端订单页传的是商品行上挂的 qyt.order_id。本接口保留仅为兼容老前端。
|
||||
return $this->renderError('该入口已迁移,请使用 /partners.order/ 下的同名接口');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -250,7 +254,9 @@ class Order extends Controller
|
||||
*/
|
||||
public function share(): Json
|
||||
{
|
||||
// 企油通改造:本功能依赖已下线的上游(智慧油客/定聚),现已停用。
|
||||
return $this->renderError('小程序油品链路已停用');
|
||||
// 企油通改造:小程序订单的发放/加油/退款统一走 yoshop_partners_order,
|
||||
// 后台操作接口复用 app/store/controller/partners/Order.php(/partners.order/*),
|
||||
// 前端订单页传的是商品行上挂的 qyt.order_id。本接口保留仅为兼容老前端。
|
||||
return $this->renderError('该入口已迁移,请使用 /partners.order/ 下的同名接口');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ declare (strict_types=1);
|
||||
|
||||
namespace app\store\controller\partners;
|
||||
|
||||
use app\common\service\PartnersBalance;
|
||||
use app\common\service\MallOil;
|
||||
use app\common\service\QueueService;
|
||||
use app\common\model\qyt\Enterprise as EnterpriseModel;
|
||||
use app\common\service\QytInvoice;
|
||||
@@ -119,16 +119,10 @@ class Order extends Controller
|
||||
if ($order['use_status'] != 0) {
|
||||
return $this->renderError('该单已加油核销,不可重发');
|
||||
}
|
||||
// 发放失败时余额已回补,重发需重新扣减合作商余额
|
||||
$logId = PartnersBalance::deduct(
|
||||
(int) $order['partners_id'],
|
||||
(float) $order['total_price'],
|
||||
(string) $order['partners_order_no'],
|
||||
$orderId,
|
||||
(int) $order['store_id']
|
||||
);
|
||||
if ($logId === false) {
|
||||
return $this->renderError('合作商余额不足,请先充值后再重发');
|
||||
// 发放失败时额度已原路退回,重发需重新扣减:
|
||||
// 合作商单扣合作商余额,小程序单扣下单用户余额
|
||||
if (!MallOil::take($order, (float) $order['total_price'])) {
|
||||
return $this->renderError(MallOil::notEnoughText($order));
|
||||
}
|
||||
// 仅允许从「发放失败(3)」重置为「未提交(0)」,避免与「发放中(1)」的单冲突。
|
||||
// 同时清空编号并把重发次数 +1:企油通按 batch_no 幂等,沿用老批次的话
|
||||
@@ -148,17 +142,13 @@ class Order extends Controller
|
||||
'update_time' => time(),
|
||||
]);
|
||||
if (!$reset) {
|
||||
// 状态已被其它进程改变 -> 回补刚扣的余额
|
||||
PartnersBalance::refund(
|
||||
(int) $order['partners_id'],
|
||||
(float) $order['total_price'],
|
||||
(string) $order['partners_order_no'],
|
||||
$orderId,
|
||||
(int) $order['store_id']
|
||||
);
|
||||
// 状态已被其它进程改变 -> 回补刚扣的额度
|
||||
MallOil::giveBack($order, (float) $order['total_price'], '重发撤销');
|
||||
return $this->renderError('当前状态不允许重发(仅「发放失败」的订单可重发)');
|
||||
}
|
||||
(new QueueService())->push('partners_queue', json_encode(['order_id' => $orderId], 320));
|
||||
// 小程序单把「重新发放」状态同步回订单商品行,用户端立刻能看到
|
||||
MallOil::syncGoods($order);
|
||||
return $this->renderSuccess('已提交重新发放,请稍后刷新查看结果');
|
||||
}
|
||||
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user