Files
huangjingfen/pro_v3.5.1/app/services/order/StoreOrderTakeServices.php
mac 451918bc73 fix(fsgx): 修复5个未修复Bug — 积分解耦/定时任务/积分日志/团队统计/历史补偿
Bug3: 解耦积分奖励与佣金发放,报单订单只要推荐人存在即触发积分,
不再依赖 brokeragePrice > 0;grantFrozenPointsByBrokerage 移至
佣金判断之前独立执行。

Bug1: 定时任务手动触发返回真实结果 —— 补充 fsgx_release_frozen_points
到 taskName 映射;runNow() try/catch 后抛出异常;控制器捕获并返回
fail;修复 SystemTimer listener catch 块运算符优先级 bug。

Bug5: PointsReleaseServices 每日释放同步写入 eb_user_bill,使管理
后台积分日志页面可见;UserPointServices::pointRecord $status 数组
补充 hjf_frozen_direct/hjf_frozen_umbrella/frozen_points_release 等
fsgx 类型映射,防止未知类型报错。

Bug2: hjfMember.js getTeamData 改为 POST 与路由匹配;loadTeamData
字段映射 total/totalLevel/order_count → 界面展示字段。

Bug4: 新增 HjfPatchMissingRewards 命令(hjf:patch-rewards),支持
扫描全量/指定订单补发缺失积分奖励,支持 --dry-run 预览;注册命令
到 config/console.php。

Made-with: Cursor
2026-03-24 20:40:46 +08:00

662 lines
28 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
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\services\order;
use app\dao\order\StoreOrderDao;
use app\jobs\order\AutoTakeOrderJob;
use app\jobs\notice\SmsAdminJob;
use app\jobs\order\OrderStatusJob;
use app\jobs\user\UserLevelJob;
use app\services\activity\holiday\HolidayGiftPushServices;
use app\services\BaseServices;
use app\services\message\service\StoreServiceServices;
use app\services\message\sms\SmsSendServices;
use app\services\user\member\MemberCardServices;
use app\services\hjf\PointsRewardServices;
use app\services\user\UserBillServices;
use app\services\user\UserBrokerageServices;
use app\services\user\UserServices;
use think\annotation\Inject;
use think\exception\ValidateException;
use think\facade\Log;
/**
* 订单收货
* Class StoreOrderTakeServices
* @package app\services\order
* @mixin StoreOrderDao
*/
class StoreOrderTakeServices extends BaseServices
{
/**
* @var StoreOrderDao
*/
#[Inject]
protected StoreOrderDao $dao;
/**
* 小程序订单服务收货
* @param $order_id
* @return bool
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*
* @date 2023/05/18
* @author yyw
*/
public function miniOrderTakeOrder($order_id)
{
$orderArr = explode('_', $order_id);
if (count($orderArr) == 2) {
$order_id = $orderArr[1] ?? $order_id;
}
//查找订单信息
$order = $this->dao->getOne(['order_id' => $order_id]);
if (!$order) {
return true;
}
if ($order['pid'] == -1) { // 有子订单
// 查找待收货的子订单
$son_order_list = $this->dao->getSubOrderNotSendList((int)$order['id']);
foreach ($son_order_list as $son_order) {
$this->takeOrder($son_order['order_id'], $son_order['uid']);
}
} else {
$this->takeOrder($order_id, $order['uid']);
}
return true;
}
/**
* 用户订单收货
* @param $uni
* @param $uid
* @return bool
*/
public function takeOrder(string $uni, int $uid)
{
$order = $this->dao->getUserOrderDetail($uni, $uid);
if (!$order) {
throw new ValidateException('订单不存在!');
}
/** @var StoreOrderServices $orderServices */
$orderServices = app()->make(StoreOrderServices::class);
$order = $orderServices->tidyOrder($order);
if ($order['_status']['_type'] != 2) {
throw new ValidateException('订单状态错误!');
}
//存在拆分发货 需要分开收货
if ($this->dao->count(['pid' => $order['id']])) {
throw new ValidateException('拆分发货,请去订单详情中包裹确认收货');
}
$order->status = 2;
$res = $order->save();
OrderStatusJob::dispatch([$order['id'], 'user_take_delivery', ['change_message' => '用户已收货', 'change_manager_type' => 'user']]);
$res = $res && $this->storeProductOrderUserTakeDelivery($order);
if (!$res) {
throw new ValidateException('收货失败');
}
//核销订单 修改订单商品核销状态
if ($order['shipping_type'] == 2 || (in_array($order['shipping_type'], [1, 3]) && $order['delivery_type'] == 'send')) {
//修改原来订单商品信息
$cartData['is_writeoff'] = 1;
$cartData['write_surplus_times'] = 0;
/** @var StoreOrderCartInfoServices $cartInfoServices */
$cartInfoServices = app()->make(StoreOrderCartInfoServices::class);
$cartInfoServices->update(['oid' => $order['id']], $cartData);
}
return $order;
}
/**
* 订单确认收货
* @param $order
* @return bool
*/
public function storeProductOrderUserTakeDelivery($order, bool $isTran = true, bool $isRecord = true)
{
$res = true;
//获取购物车内的商品标题
/** @var StoreOrderCartInfoServices $orderInfoServices */
$orderInfoServices = app()->make(StoreOrderCartInfoServices::class);
$storeName = $orderInfoServices->getCarIdByProductTitle((int)$order['id']);
$storeTitle = substrUTf8($storeName, 20, 'UTF-8', '');
if ($order['uid']) {
/** @var UserServices $userServices */
$userServices = app()->make(UserServices::class);
$userInfo = $userServices->getUserCacheInfo((int)$order['uid']);
$res = $this->transaction(function () use ($order, $userInfo, $storeTitle) {
//赠送积分
$res1 = $this->gainUserIntegral($order, $userInfo, $storeTitle);
// fsgx: brokerage_timing=on_pay 时佣金已在支付时发放,此处跳过
$brokerageTiming = sys_config('brokerage_timing', 'on_confirm');
$res2 = ($brokerageTiming === 'on_pay') ? true : $this->backOrderBrokerage($order, $userInfo);
//经验
$res3 = $this->gainUserExp($order, $userInfo);
//事业部
$res4 = $this->divisionBrokerage($order, $userInfo);
if (!($res1 && $res2 && $res3)) {
throw new ValidateException('收货失败!');
}
return true;
}, $isTran);
}
if ($res) {
//订单收货事件
event('order.take', [$order, $storeTitle, $isRecord]);
return true;
} else {
return false;
}
}
/**
* 赠送积分
* @param $order
* @param $userInfo
* @param $storeTitle
* @return bool
*/
public function gainUserIntegral($order, $userInfo, $storeTitle)
{
$res2 = true;
if (!$userInfo) {
return true;
}
// 营销产品送积分
if (!isset($order['type']) || $order['type'] != 0) {
return true;
}
/** @var UserBillServices $userBillServices */
$userBillServices = app()->make(UserBillServices::class);
$balance = $userInfo['integral'];
if ($order['gain_integral'] > 0) {
$balance = bcadd((string)$balance, (string)$order['gain_integral']);
$res2 = false != $userBillServices->income('pay_give_integral', $order['uid'], (int)$order['gain_integral'], (int)$balance, $order['id']);
}
$order_integral = 0;
$res3 = true;
$order_give_integral = sys_config('order_give_integral');
if ($order['pay_price'] && $order_give_integral) {
//积分倍数
$multiple = 0;
//会员消费返积分翻倍
if ($userInfo['is_money_level'] > 0) {
//看是否开启消费返积分翻倍奖励
/** @var MemberCardServices $memberCardService */
$memberCardService = app()->make(MemberCardServices::class);
$integral_rule_number = $memberCardService->isOpenMemberCardCache('integral');
$multiple = bcadd((string)$multiple, (string)$integral_rule_number, 0);
}
//节日任务赠送积分倍数
$integral_multiple = app()->make(HolidayGiftPushServices::class)->receiveHolidayGift($userInfo['uid'], 2);
if($integral_multiple){
$multiple = bcadd((string)$multiple, (string)$integral_multiple, 0);
}
if($multiple){
$order_integral = bcmul((string)$order['pay_price'], (string)$multiple, 2);
}
$order_integral = bcmul((string)$order_give_integral, (string)($order_integral ? $order_integral : $order['pay_price']), 0);
$balance = bcadd((string)$balance, (string)$order_integral);
$res3 = false != $userBillServices->income('order_give_integral', $order['uid'], (int)$order_integral, (int)$balance, $order['id']);
}
$give_integral = $order_integral + $order['gain_integral'];
if ($give_integral > 0) {
$integral = $userInfo['integral'] + $give_integral;
$userInfo->integral = $integral;
$res1 = false != $userInfo->save();
$res = $res1 && $res2 && $res3;
//发送消息
event('notice.notice', [['order' => $order, 'storeTitle' => $storeTitle, 'give_integral' => $give_integral, 'integral' => $integral], 'integral_accout']);
return $res;
}
return true;
}
/**
* 一级返佣
* @param $orderInfo
* @param $userInfo
* @return bool
*/
public function backOrderBrokerage($orderInfo, $userInfo)
{
// 当前订单|用户不存在 直接返回
if (!$orderInfo || !$userInfo) {
return true;
}
//商城分销功能是否开启 0关闭1开启
if (!sys_config('brokerage_func_status')) return true;
// 营销产品不返佣金但报单商品is_queue_goods=1无论 type 均需参与返佣
$isQueueOrder = !empty($orderInfo['is_queue_goods']);
$relaxBrokeragePromoter = $isQueueOrder || (int)sys_config('store_brokerage_statu', 1) === 2;
if (!$isQueueOrder && (!isset($orderInfo['type']) || in_array($orderInfo['type'], [4, 5, 7, 8]))) {
return true;
}
//绑定失效
if (isset($orderInfo['spread_uid']) && $orderInfo['spread_uid'] == -1) {
return true;
}
//是否开启自购返佣
$isSelfBrokerage = sys_config('is_self_brokerage', 0);
if (!isset($orderInfo['spread_uid']) || !$orderInfo['spread_uid']) {//兼容之前订单表没有spread_uid情况
//没开启自购返佣 没有上级 或者 当用用户上级时自己 直接返回
if (!$isSelfBrokerage && (!$userInfo['spread_uid'] || $userInfo['spread_uid'] == $orderInfo['uid'])) {
return true;
}
$one_spread_uid = $isSelfBrokerage ? $userInfo['uid'] : $userInfo['spread_uid'];
} else {
$one_spread_uid = $orderInfo['spread_uid'];
}
$one_spread_uid = (int)$one_spread_uid;
//冻结时间
$broken_time = intval(sys_config('extract_time'));
$frozen_time = time() + $broken_time * 86400;
//检测是否是分销员(报单/人人分销时不强制要求 is_promoter否则周期返现与积分奖励无法落库
/** @var UserServices $userServices */
$userServices = app()->make(UserServices::class);
if (!$relaxBrokeragePromoter && !$userServices->checkUserPromoter($one_spread_uid)) {//一级不是分销员 直接二级返佣
return $this->backOrderBrokerageTwo($orderInfo, $userInfo, $isSelfBrokerage, $frozen_time);
}
//订单中取出
$brokeragePrice = $orderInfo['one_brokerage'] ?? 0;
// fsgx: 积分奖励独立于佣金金额,只要是报单订单且推荐人存在就触发
if ($isQueueOrder && $one_spread_uid > 0) {
$this->grantFrozenPointsByBrokerage($one_spread_uid, $brokeragePrice, $orderInfo);
}
// 返佣金额小于等于0 直接返回不返佣金
if ($brokeragePrice <= 0) {
return true;
}
// 获取上级推广员信息
$spreadPrice = $userServices->value(['uid' => $one_spread_uid], 'brokerage_price');
// 上级推广员返佣之后的金额
$balance = bcadd($spreadPrice, $brokeragePrice, 2);
// 添加佣金记录
/** @var UserBrokerageServices $userBrokerageServices */
$userBrokerageServices = app()->make(UserBrokerageServices::class);
//自购返佣 上级
$type = $one_spread_uid == $orderInfo['uid'] ? 'get_self_brokerage' : 'get_brokerage';
$res1 = $userBrokerageServices->income($type, $one_spread_uid, [
'nickname' => $userInfo['nickname'],
'pay_price' => floatval($orderInfo['pay_price']),
'number' => floatval($brokeragePrice),
'frozen_time' => $frozen_time
], $balance, $orderInfo['id']);
// 添加用户佣金
$res2 = $userServices->bcInc($one_spread_uid, 'brokerage_price', $brokeragePrice, 'uid');
//给上级发送获得佣金的模板消息
$this->sendBackOrderBrokerage($orderInfo, $one_spread_uid, $brokeragePrice);
// 一级返佣成功 跳转二级返佣
$res = $res1 && $res2 && $this->backOrderBrokerageTwo($orderInfo, $userInfo, $isSelfBrokerage, $frozen_time);
return $res;
}
/**
* fsgx: 按照 eb_agent_level 配置的「直推/伞下奖励积分」发放 frozen_points
*
* 积分奖励规则:
* - 直推上级:获得其等级 direct_reward_points 配置的积分
* - 更上级(伞下):按级差规则获得 umbrella_reward_points 积分
* - 具体计算由 PointsRewardServices::reward() 统一实现
*
* @param int $spreadUid 直推上级uid仅用于前置校验
* @param string|float $brokeragePrice 本次佣金金额(仅日志参考,不再作为前置条件)
* @param array $orderInfo 订单信息(需含 uid、order_id
*/
protected function grantFrozenPointsByBrokerage(int $spreadUid, $brokeragePrice, array $orderInfo): void
{
try {
if ($spreadUid <= 0) return;
$buyerUid = (int)($orderInfo['uid'] ?? 0);
$orderId = (string)($orderInfo['order_id'] ?? '');
if ($buyerUid <= 0 || $orderId === '') return;
$orderDbId = (int)($orderInfo['id'] ?? 0);
/** @var PointsRewardServices $pointsServices */
$pointsServices = app()->make(PointsRewardServices::class);
$pointsServices->reward($buyerUid, $orderId, $orderDbId);
} catch (\Throwable $e) {
Log::error('fsgx grantFrozenPointsByBrokerage error: ' . $e->getMessage());
}
}
/**
* 二级推广返佣
* @param $orderInfo
* @param $userInfo
* @param int $isSelfbrokerage
* @param int $frozenTime
* @return bool
*/
public function backOrderBrokerageTwo($orderInfo, $userInfo, $isSelfbrokerage = 0, $frozenTime = 0)
{
//绑定失效
if (isset($orderInfo['spread_two_uid']) && $orderInfo['spread_two_uid'] == -1) {
return true;
}
/** @var UserServices $userServices */
$userServices = app()->make(UserServices::class);
if (isset($orderInfo['spread_two_uid']) && $orderInfo['spread_two_uid']) {
$spread_two_uid = $orderInfo['spread_two_uid'];
} else {
// 获取上推广人
$userInfoTwo = $userServices->get((int)$userInfo['spread_uid']);
// 订单|上级推广人不存在 直接返回
if (!$orderInfo || !$userInfoTwo) {
return true;
}
//没开启自购返佣 或者 上推广人没有上级 或者 当用用户上上级时自己 直接返回
if (!$isSelfbrokerage && (!$userInfoTwo['spread_uid'] || $userInfoTwo['spread_uid'] == $orderInfo['uid'])) {
return true;
}
$spread_two_uid = $isSelfbrokerage ? $userInfoTwo['uid'] : $userInfoTwo['spread_uid'];
}
$spread_two_uid = (int)$spread_two_uid;
$isQueueOrder = !empty($orderInfo['is_queue_goods']);
$relaxBrokeragePromoter = $isQueueOrder || (int)sys_config('store_brokerage_statu', 1) === 2;
if (!$relaxBrokeragePromoter && !$userServices->checkUserPromoter($spread_two_uid)) {
return true;
}
//订单中取出
$brokeragePrice = $orderInfo['two_brokerage'] ?? 0;
// 返佣金额小于等于0 直接返回不返佣金
if ($brokeragePrice <= 0) {
return true;
}
// 获取上上级推广员信息
$spreadPrice = $userServices->value(['uid' => $spread_two_uid], 'brokerage_price');
// 获取上上级推广员返佣之后余额
$balance = bcadd($spreadPrice, $brokeragePrice, 2);
// 添加佣金记录
/** @var UserBrokerageServices $userBrokerageServices */
$userBrokerageServices = app()->make(UserBrokerageServices::class);
$res1 = $userBrokerageServices->income('get_two_brokerage', $spread_two_uid, [
'nickname' => $userInfo['nickname'],
'pay_price' => floatval($orderInfo['pay_price']),
'number' => floatval($brokeragePrice),
'frozen_time' => $frozenTime
], $balance, $orderInfo['id']);
// 添加用户佣金
$res2 = $userServices->bcInc($spread_two_uid, 'brokerage_price', $brokeragePrice, 'uid');
//给上级发送获得佣金的模板消息
$this->sendBackOrderBrokerage($orderInfo, $spread_two_uid, $brokeragePrice);
return $res1 && $res2;
}
/**
* 佣金到账发送模板消息
* @param $orderInfo
* @param $spread_uid
* @param $brokeragePrice
*/
public function sendBackOrderBrokerage($orderInfo, $spread_uid, $brokeragePrice, string $type = 'order')
{
/** @var UserServices $userServices */
$userServices = app()->make(UserServices::class);
$user = $userServices->getUserInfo($spread_uid, 'phone,user_type');
$goodsName = '';
$goodsPrice = 0;
if ($type == 'order') {
/** @var StoreOrderCartInfoServices $storeOrderCartInfoService */
$storeOrderCartInfoService = app()->make(StoreOrderCartInfoServices::class);
$cartInfo = $storeOrderCartInfoService->getOrderCartInfo($orderInfo['id']);
if ($cartInfo) {
$cartInfo = array_column($cartInfo, 'cart_info');
foreach ($cartInfo as $k => $v) {
$goodsName .= $v['productInfo']['store_name'];
$price = $v['productInfo']['attrInfo']['price'] ?? $v['productInfo']['price'] ?? 0;
$goodsPrice = bcadd((string)$goodsPrice, (string)bcmul((string)$price, (string)$v['cart_num'], 2), 2);
}
}
} else {
$goodsName = '推广用户获取佣金';
$goodsPrice = $brokeragePrice;
}
//提醒推送
event('notice.notice', [['spread_uid' => $spread_uid, 'phone' => $user['phone'], 'userType' => $user['user_type'], 'brokeragePrice' => $brokeragePrice, 'goodsName' => $goodsName, 'goodsPrice' => $goodsPrice, 'add_time' => $orderInfo['add_time'] ?? time()], 'order_brokerage']);
return true;
}
/**
* 发送短信
* @param $order
* @param $storeTitle
*/
public function smsSend($order, $storeTitle)
{
/** @var SmsSendServices $smsServices */
$smsServices = app()->make(SmsSendServices::class);
$switch = (bool)sys_config('confirm_take_over_switch');
//模板变量
$store_name = $storeTitle;
$order_id = $order['order_id'];
$smsServices->send($switch, $order['user_phone'], compact('store_name', 'order_id'), 'TAKE_DELIVERY_CODE');
}
/**
* 发送确认收货管理员短信
* @param $order
*/
public function smsSendTake($order)
{
$switch = (bool)sys_config('admin_confirm_take_over_switch');
/** @var StoreServiceServices $services */
$services = app()->make(StoreServiceServices::class);
$adminList = $services->getStoreServiceOrderNotice();
SmsAdminJob::dispatchDo('sendAdminConfirmTakeOver', [$switch, $adminList, $order]);
return true;
}
/**
* 赠送经验
* @param $order
* @param $userInfo
* @return bool
*/
public function gainUserExp($order, $userInfo)
{
if (!$userInfo) {
return true;
}
//用户等级是否开启
if (!sys_config('member_func_status', 1)) {
return true;
}
//用户等级未激活
if (isset($userInfo['level_status']) && !$userInfo['level_status']) {
return true;
}
/** @var UserBillServices $userBillServices */
$userBillServices = app()->make(UserBillServices::class);
$order_exp = 0;
$res3 = true;
$order_give_exp = sys_config('order_give_exp');
$balance = $userInfo['exp'];
if ($order['pay_price'] && $order_give_exp) {
$order_exp = bcmul($order_give_exp, (string)$order['pay_price'], 2);
$balance = bcadd((string)$balance, (string)$order_exp, 2);
$res3 = false != $userBillServices->income('order_give_exp', $order['uid'], $order_exp, $balance, $order['id']);
}
$res = true;
if ($order_exp > 0) {
$userInfo->exp = $balance;
$res1 = false != $userInfo->save();
$res = $res1 && $res3;
}
//检测用户等级升级
UserLevelJob::dispatch([(int)$order['uid']]);
return $res;
}
/**
* 执行自动收货
* @param array $where
* @param int $page
* @param int $maxLimit
* @return bool
*/
public function runAutoTakeOrder(array $where, int $page = 0, int $maxLimit = 0)
{
/** @var StoreOrderStoreOrderStatusServices $service */
$service = app()->make(StoreOrderStoreOrderStatusServices::class);
$orderList = $service->getOrderIds($where, $page, $maxLimit);
/** @var StoreOrderRefundServices $storeOrderRefundServices */
$storeOrderRefundServices = app()->make(StoreOrderRefundServices::class);
foreach ($orderList as $order) {
if ($order['status'] == 2) {
continue;
}
if ($order['paid'] == 1 && $order['status'] == 1) {
$data['status'] = 2;
} else if ($order['pay_type'] == 'offline') {
$data['status'] = 2;
} else {
continue;
}
if ($storeOrderRefundServices->count(['store_order_id' => $order['id'], 'refund_type' => [0, 1, 2, 4, 5], 'is_cancel' => 0, 'is_del' => 0])) {
continue;
}
try {
$res = $this->dao->update($order['id'], $data);
$res = $res && $this->storeProductOrderUserTakeDelivery($order);
OrderStatusJob::dispatch([$order['id'], 'take_delivery', ['change_message' => '已收货[自动收货]', 'change_manager_type' => 'system']]);
if (!$res) {
throw new ValidateException('订单号' . $order['order_id'] . '自动收货失败');
}
} catch (\Throwable $e) {
Log::error('自动收货失败,失败原因:' . $e->getMessage());
}
}
return true;
}
/**
* 自动收货
* @return bool
*/
public function autoTakeOrder()
{
//7天前时间戳
$systemDeliveryTime = (int)sys_config('system_delivery_time', 0);
//0为取消自动收货功能
if ($systemDeliveryTime == 0) {
return true;
}
$sevenDay = strtotime(date('Y-m-d H:i:s', strtotime('-' . $systemDeliveryTime . ' day')));
/** @var StoreOrderStoreOrderStatusServices $service */
$service = app()->make(StoreOrderStoreOrderStatusServices::class);
$where = [
'change_time' => $sevenDay,
'is_del' => 0,
'paid' => 1,
'status' => 1,
'change_type' => ['delivery_goods', 'delivery_fictitious', 'delivery', 'city_delivery']
];
$maxLimit = 20;
$count = $service->getOrderCount($where);
if ($count > $maxLimit) {
$page = ceil($count / $maxLimit);
for ($i = 1; $i <= $page; $i++) {
AutoTakeOrderJob::dispatch([$where, $i, $maxLimit]);
}
} else {
$this->runAutoTakeOrder($where);
}
return true;
}
/**
* 事业部返佣
* @param $orderInfo
* @param $userInfo
* @return bool
*/
public function divisionBrokerage($orderInfo, $userInfo)
{
// 当前订单|用户不存在 直接返回
if (!$orderInfo || !$userInfo) {
return true;
}
// 营销产品不返佣金
if (!isset($orderInfo['type']) || in_array($orderInfo['type'], [4, 5, 7, 8])) {
return true;
}
/** @var UserServices $userServices */
$userServices = app()->make(UserServices::class);
if ($orderInfo['division_staff_id'] && $orderInfo['division_staff_brokerage'] > 0) {
$spreadPrice = $userServices->value(['uid' => $orderInfo['division_staff_id']], 'brokerage_price');
$balance = bcadd($spreadPrice, $orderInfo['division_staff_brokerage'], 2);
$userServices->bcInc($orderInfo['division_staff_id'], 'brokerage_price', $orderInfo['division_staff_brokerage'], 'uid');
//冻结时间
$broken_time = intval(sys_config('extract_time'));
$frozen_time = time() + $broken_time * 86400;
// 添加佣金记录
/** @var UserBrokerageServices $userBrokerageServices */
$userBrokerageServices = app()->make(UserBrokerageServices::class);
$userBrokerageServices->income('get_staff_brokerage', $orderInfo['division_staff_id'], [
'nickname' => $userInfo['nickname'],
'pay_price' => floatval($orderInfo['pay_price']),
'number' => floatval($orderInfo['division_staff_brokerage']),
'frozen_time' => $frozen_time
], $balance, $orderInfo['id']);
}
if ($orderInfo['division_agent_id'] && $orderInfo['division_agent_brokerage'] > 0) {
$spreadPrice = $userServices->value(['uid' => $orderInfo['division_agent_id']], 'brokerage_price');
$balance = bcadd($spreadPrice, $orderInfo['division_agent_brokerage'], 2);
$userServices->bcInc($orderInfo['division_agent_id'], 'brokerage_price', $orderInfo['division_agent_brokerage'], 'uid');
//冻结时间
$broken_time = intval(sys_config('extract_time'));
$frozen_time = time() + $broken_time * 86400;
// 添加佣金记录
/** @var UserBrokerageServices $userBrokerageServices */
$userBrokerageServices = app()->make(UserBrokerageServices::class);
$userBrokerageServices->income('get_agent_brokerage', $orderInfo['division_agent_id'], [
'nickname' => $userInfo['nickname'],
'pay_price' => floatval($orderInfo['pay_price']),
'number' => floatval($orderInfo['division_agent_brokerage']),
'frozen_time' => $frozen_time
], $balance, $orderInfo['id']);
}
if ($orderInfo['division_id'] && $orderInfo['division_brokerage'] > 0) {
$spreadPrice = $userServices->value(['uid' => $orderInfo['division_id']], 'brokerage_price');
$balance = bcadd($spreadPrice, $orderInfo['division_brokerage'], 2);
$userServices->bcInc($orderInfo['division_id'], 'brokerage_price', $orderInfo['division_brokerage'], 'uid');
//冻结时间
$broken_time = intval(sys_config('extract_time'));
$frozen_time = time() + $broken_time * 86400;
// 添加佣金记录
/** @var UserBrokerageServices $userBrokerageServices */
$userBrokerageServices = app()->make(UserBrokerageServices::class);
$userBrokerageServices->income('get_division_brokerage', $orderInfo['division_id'], [
'nickname' => $userInfo['nickname'],
'pay_price' => floatval($orderInfo['pay_price']),
'number' => floatval($orderInfo['division_brokerage']),
'frozen_time' => $frozen_time
], $balance, $orderInfo['id']);
}
return true;
}
}