Files
huangjingfen/pro_v3.5.1_副本/app/jobs/order/OrderPayHandelJob.php

145 lines
7.4 KiB
PHP
Raw Normal View History

feat(fsgx): 完成全部24项开发任务 Phase1-7 Phase1 后端核心: - 新增 fsgx_v1.sql 迁移脚本(is_queue_goods/frozen_points/available_points/no_assess) - SystemConfigServices 返佣设置扩展(周期人数/分档比例/范围/时机) - StoreOrderCreateServices 周期循环佣金计算 - StoreOrderTakeServices 佣金发放后同步冻结积分 - StoreProductServices/StoreProduct 保存 is_queue_goods Phase2 后端接口: - GET /api/hjf/brokerage/progress 佣金周期进度 - GET /api/hjf/assets/overview 资产总览 - HjfPointsServices 每日 frozen_points 0.4‰ 释放定时任务 - PUT /adminapi/hjf/member/{uid}/no_assess 不考核接口 - GET /adminapi/hjf/points/release_log 积分日志接口 Phase3 前端清理: - hjfCustom.js 路由精简(仅保留 points/log) - hjfQueue.js/hjfMember.js API 清理/重定向至 CRMEB 原生接口 - pages.json 公排→推荐佣金/佣金记录/佣金规则 Phase4-5 前端改造: - queue/status.vue 推荐佣金进度页整体重写 - 商品详情/订单确认/支付结果页文案与逻辑改造 - 个人中心/资产页/引导页/规则页文案改造 - HjfQueueProgress/HjfRefundNotice/HjfAssetCard 组件改造 - 推广中心嵌入佣金进度摘要 - hjfMockData.js 全量更新(公排字段→佣金字段) Phase6 Admin 增强: - 用户列表新增 frozen_points/available_points 列及不考核操作按钮 - hjfPoints.js USE_MOCK=false 对接真实积分日志接口 Phase7 配置文档: - docs/fsgx-phase7-config-checklist.md 后台配置与全链路验收清单 Made-with: Cursor
2026-03-23 22:32:19 +08:00
<?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\jobs\order;
use app\services\order\StoreOrderCartInfoServices;
use app\services\order\StoreOrderServices;
use app\services\order\StoreOrderStatusServices;
use app\services\product\sku\StoreProductAttrValueServices;
use app\services\product\sku\StoreProductVirtualServices;
use crmeb\basic\BaseJobs;
use crmeb\traits\QueueTrait;
use think\facade\Log;
/**
* 支付成功:自动发送卡密、处理次卡商品核销信息
* Class OrderPayHandelJob
* @package app\jobs\order
*/
class OrderPayHandelJob extends BaseJobs
{
use QueueTrait;
/**
* @param $orderInfo
* @return bool
*/
public function doJob($orderInfo)
{
if (!$orderInfo) {
return true;
}
//待发货状态
if ($orderInfo['status'] != 0) {
return true;
}
/** @var StoreOrderServices $orderService */
$orderService = app()->make(StoreOrderServices::class);
/** @var StoreOrderStatusServices $statusService */
$statusService = app()->make(StoreOrderStatusServices::class);
/** @var StoreOrderCartInfoServices $services */
$services = app()->make(StoreOrderCartInfoServices::class);
$orderInfo['cart_info'] = $cartInfoList = $services->getOrderCartInfo((int)$orderInfo['id']);
try {
switch ($orderInfo['product_type']) {
case 1://卡密商品:自动发送
$title = $content = '';
$disk_info = $orderInfo['cart_info'][$orderInfo['cart_id'][0] ?? 0]['cart_info']['productInfo']['attrInfo']['disk_info'] ?? '';
$unique = $orderInfo['cart_info'][$orderInfo['cart_id'][0]]['cart_info']['productInfo']['attrInfo']['unique'];
//活动订单共用原商品规格卡密
if ($orderInfo['type'] != 0 && $orderInfo['activity_id']) {
/** @var StoreProductAttrValueServices $skuValueServices */
$skuValueServices = app()->make(StoreProductAttrValueServices::class);
$attrValue = $skuValueServices->getUniqueByActivityUnique($unique, (int)$orderInfo['activity_id'], (int)$orderInfo['type'], ['unique', 'disk_info']);
if ($attrValue) {
$disk_info = $attrValue['disk_info'] ?? '';
$unique = $attrValue['unique'] ?? '';
}
}
if ($disk_info) {
$title = '虚拟密钥发放';
$content = '您购买的密钥商品已支付成功,支付金额' . $orderInfo['pay_price'] . '元,订单号:' . $orderInfo['order_id'] . ',密钥:' . $disk_info . ',感谢您的光临!';
$virtual_info = '密钥自动发放:' . $disk_info;
$value = '密钥:' . $disk_info;
// $remark = '密钥自动发放:' . $disk_info;
} else {
/** @var StoreProductVirtualServices $virtualService */
$virtualService = app()->make(StoreProductVirtualServices::class);
$cardList = $virtualService->getOrderCardList(['store_id' => $orderInfo['store_id'], 'attr_unique' => $unique, 'uid' => 0], (int)$orderInfo['total_num']);
$title = '虚拟卡密发放';
$virtual_info = [];
// $remark = '卡密已自动发放';
$value = '';
if ($cardList) {
$content = '您购买的卡密商品已支付成功,支付金额' . $orderInfo['pay_price'] . '元,订单号:' . $orderInfo['order_id'] . ',';
$update = [];
$update['order_id'] = $orderInfo['order_id'];
$update['uid'] = $orderInfo['uid'];
foreach ($cardList as $virtual) {
$virtualService->update($virtual['id'], $update);
$content .= '卡号:' . $virtual['card_no'] . ';密码:' . $virtual['card_pwd'] . "\n";
$virtual_info[] = ['card_no' => $virtual['card_no'], 'card_pwd' => $virtual['card_pwd']];
$value .= '卡号:' . $virtual['card_no'] . ';密码:' . $virtual['card_pwd'];
// $remark .= ',卡号:' . $virtual['card_no'] . ';密码:' . $virtual['card_pwd'] . ';';
}
$content .= ',感谢您的光临!';
}
}
//修改订单虚拟备注
$orderService->update(['id' => $orderInfo['id']], ['status' => 1, 'delivery_type' => 'fictitious', 'virtual_info' => json_encode($virtual_info)]);
$data['id'] = $orderInfo['id'];
$data['uid'] = $orderInfo['uid'];
$data['order_id'] = $orderInfo['order_id'];
$data['title'] = $title;
$data['value'] = $value;
$data['content'] = $content;
$data['is_integral'] = 0;
event('notice.notice', [$data, 'kami_deliver_goods_code']);
//记录订单状态
OrderStatusJob::dispatch([$orderInfo['id'], 'delivery_fictitious', ['change_message' => '卡密自动发货', 'change_manager_type' => 'system']]);
break;
case 4://次卡商品:处理核销数据
foreach ($cartInfoList as $cart_id => $cartInfo) {
$info = $cartInfo['cart_info'] ?? [];
$attrInfo = $info['productInfo']['attrInfo'] ?? [];
$data = ['write_start' => 0, 'write_end' => 0];
if ($attrInfo) {
switch ($attrInfo['write_valid'] ?? 1) {
case 1://永久
break;
case 2://购买后n天
if (isset($attrInfo['write_days']) && $attrInfo['write_days']) {
$data['write_start'] = time();
$data['write_end'] = bcadd((string)$data['write_start'], (string)bcmul((string)$attrInfo['write_days'], '86400'));
}
break;
case 3://具体时间段
if ((isset($attrInfo['write_start']) && $attrInfo['write_start']) || (isset($attrInfo['write_end']) && $attrInfo['write_end'])) {
$data['write_start'] = $attrInfo['write_start'] ?? 0;
$data['write_end'] = $attrInfo['write_end'] ?? 0;
}
break;
}
}
$services->update(['oid' => $orderInfo['id'], 'cart_id' => $cart_id], $data);
}
break;
}
} catch (\Throwable $e) {
Log::error('订单虚拟商品自动发放失败,原因:' . $e->getMessage());
}
return true;
}
}