1、合作商余额查询
2、分油账户司机可用额度
This commit is contained in:
@@ -370,9 +370,30 @@ class Checkout extends BaseService
|
||||
'balance' => $this->user['balance'],
|
||||
'points' => $this->user['points'],
|
||||
'address_id' => $this->user['address_id'],
|
||||
// 实名信息(分油实名制,下单前必须补全):结算页据此拦截并跳去补全
|
||||
'real_name' => (string)$this->user['real_name'],
|
||||
'id_card' => (string)$this->user['id_card'],
|
||||
'plate_no' => (string)$this->user['plate_no'],
|
||||
'isRealnameReady' => UserModel::isRealnameReady($this->user),
|
||||
'hasOilGoods' => $this->hasOilGoods(),
|
||||
'needRealname' => $this->hasOilGoods() && !UserModel::isRealnameReady($this->user),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 本次结算是否包含油券商品(oilCardType = zsy_ticket)
|
||||
* 油券要走企油通分油,必须有姓名/身份证号/车牌号
|
||||
*/
|
||||
private function hasOilGoods(): bool
|
||||
{
|
||||
foreach ($this->goodsList as $goods) {
|
||||
if (($goods['oilCardType'] ?? '') === 'zsy_ticket') {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前用户可用的优惠券列表
|
||||
* @param float $orderTotalPrice 总金额
|
||||
@@ -757,6 +778,12 @@ class Checkout extends BaseService
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// 油券商品要走企油通分油(实名制:上游做姓名+身份证号二要素认证),
|
||||
// 下单前必须补全实名信息。结算页已拦截,这里是服务端兜底。
|
||||
if ($this->hasOilGoods() && !UserModel::isRealnameReady($this->user)) {
|
||||
$this->error = '请先完善姓名、身份证号和车牌号后再下单';
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ use app\common\lock\RedisLock;
|
||||
use app\common\model\Coupon;
|
||||
use app\common\service\SybOil;
|
||||
use app\common\service\IdingjuOil;
|
||||
use app\common\service\MallOil;
|
||||
use app\store\model\Company as CompanyModel;
|
||||
use app\store\model\Coupon as CouponModel;
|
||||
use app\store\model\GoodsCoupon as GoodsCouponModel;
|
||||
@@ -108,15 +109,6 @@ class PaySuccess extends BaseService
|
||||
}
|
||||
// 获取订单详情
|
||||
$detail = OrderModel::getUserOrderDetail((int)$this->model['order_id']);
|
||||
// 触发分油接口
|
||||
$shareStatus = $this->shareOil($detail);
|
||||
if (!$shareStatus) {
|
||||
// 记录日志
|
||||
log_record(['name' => '分油失败', [
|
||||
'order_id' => $this->model['order_id'],
|
||||
]]);
|
||||
// return false;
|
||||
}
|
||||
// 事务处理
|
||||
$this->model->transaction(function () use ($payType, $payData, $detail) {
|
||||
// 更新订单状态
|
||||
@@ -126,6 +118,16 @@ class PaySuccess extends BaseService
|
||||
// 记录订单支付信息
|
||||
$this->updatePayInfo($payType);
|
||||
});
|
||||
// 触发分油/发券(放在事务之后:企油通发放是真金白银,必须等订单确实置为已支付再发,
|
||||
// 否则事务回滚会出现「订单未支付但油费已下发」)
|
||||
$shareStatus = $this->shareOil($detail);
|
||||
if (!$shareStatus) {
|
||||
// 记录日志;不影响支付成功的结果,发放失败由 7.8 判定后自动退回用户余额
|
||||
log_record(['name' => '分油失败', [
|
||||
'order_id' => $this->model['order_id'],
|
||||
'error' => $this->error,
|
||||
]]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -250,62 +252,30 @@ class PaySuccess extends BaseService
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付成功后的商品发放
|
||||
* · 油券(zsy_ticket) -> 建企油通发放单,由 partners:queue 调 7.7 下发
|
||||
* · 优惠券(coupon) -> 直接发券(原逻辑不变)
|
||||
*
|
||||
* 返回 false 只用于写一条「分油失败」日志,不阻断支付成功:用户已经付过款,
|
||||
* 订单必须正常置为已支付。发放失败由 7.8 判定后自动退回用户余额,或后台「重新发放」。
|
||||
*/
|
||||
private function shareOil($order): bool
|
||||
{
|
||||
$IdingjuOil = new IdingjuOil();
|
||||
$ok = true;
|
||||
// 下单用户(含实名信息:姓名/身份证号/车牌号,结算时已校验必填)
|
||||
$user = Db::name('user')->where('user_id', (int)$order['user_id'])->find() ?: [];
|
||||
foreach ($order->goods as $goods) {
|
||||
/* @var GoodsModel $goods */
|
||||
// 企油通改造:小程序油品发放链路已停用,支付成功后不再触发上游分油(保留优惠券发放)。
|
||||
// 如需恢复小程序侧发放,改走 QytOil 并补齐司机三要素来源。
|
||||
if ($goods['oilCardType'] == 'zsy_ticket') {
|
||||
continue;
|
||||
}
|
||||
if($goods['oilCardType'] == 'zsy_ticket') {
|
||||
$data['amount'] = $goods['total_price']; // 金额
|
||||
$company = CompanyModel::detail(['orgNo' => $this->getCompany($goods['goods_no'])]);
|
||||
if (!$company) {
|
||||
$this->error = '没有可用参数';
|
||||
return false;
|
||||
// 企油通:一个油券商品行建一条发放单,金额取该行实付金额
|
||||
$res = MallOil::create($order->toArray(), $goods->toArray(), $user);
|
||||
if (!$res['ok']) {
|
||||
$this->error = $res['message'];
|
||||
$goods->save(['oil_text' => mb_substr($res['message'], 0, 190)]);
|
||||
$ok = false;
|
||||
}
|
||||
try {
|
||||
// 查找一个未被调用的用户
|
||||
$account = $this->processUserOrders($company['company_id']);
|
||||
} catch (\Throwable $e) {
|
||||
$this->error = $e->getMessage();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 查询公司余额
|
||||
/*if ($data['amount'] > $company['balance']) {
|
||||
$this->error = '公司余额不足';
|
||||
return false;
|
||||
}*/
|
||||
// 对接平台接口
|
||||
$res = $IdingjuOil->oilOilCardShare([
|
||||
'goodsNo'=>$goods['goods_no'],
|
||||
'amount'=>$data['amount'],
|
||||
'userNo'=>$account['userNo'],
|
||||
'mobile'=>$account['mobile'],
|
||||
'saleOrderNo'=>$goods['oilCardNo'],
|
||||
'oilCardType'=>$goods['oilCardType']
|
||||
], $company);
|
||||
//$res = json_decode('{"code":"00","message":"请求成功","errCode":null,"errMessage":null,"data":{"oilCardNo":null,"amount":100,"balance":null,"shareNo":"CDV2408021928160001"}}', true);
|
||||
if ($res['code'] != 1) {
|
||||
$this->error = ($res['errMessage'] ?? $res['message']);
|
||||
return false;
|
||||
}
|
||||
|
||||
$item['account_id'] = $account['account_id'];
|
||||
$item['userNo'] = $account['userNo'];
|
||||
$item['mobile'] = $account['mobile'];
|
||||
$item['company_id'] = $company['company_id'];
|
||||
$item['shareNo'] = $res['data']['trade_no'] ?? '';
|
||||
$item['qrCode'] = $res['data']['useUrl'] ?? '';
|
||||
$item['oil_status_zsy'] = $res['data']['state'] ?? 0;
|
||||
$item['oil_time'] = time();
|
||||
$item['oil_status'] = $item['oil_status_zsy'] == 2 ? 1 : 0; // 已发券 为1
|
||||
$goods->save($item);
|
||||
} elseif($goods['oilCardType'] == 'coupon'){
|
||||
} elseif ($goods['oilCardType'] == 'coupon') {
|
||||
// 发放优惠券
|
||||
$coupons = GoodsCouponModel::getCouponList($goods['goods_id'])->toArray();
|
||||
if($coupons && is_array($coupons)) {
|
||||
@@ -319,7 +289,7 @@ class PaySuccess extends BaseService
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
return $ok;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user