WIN-2308041133\Administrator il y a 2 mois
Parent
commit
f14d2c286e

+ 46 - 1
app/services/order/StoreOrderSuccessServices.php

@@ -153,8 +153,53 @@ class StoreOrderSuccessServices extends BaseServices
         return false !== $res;
     }
 //    礼包商品分额度
-    public function giftQuota($order){
+    public function giftQuota($order)
+    {
+        try {
+            // 检查 cart_info 是否存在且非空
+            if (!isset($order['cart_info']) || empty($order['cart_info'])) {
+                return false;
+            }
+
+            // 获取商品ID和订单金额
+            $product_id = $order['cart_info'][0]['product_id'] ?? 0;
+            $pay_price = $order['cart_info'][0]['truePrice'] ?? 0;
+
+            if (!$product_id || !$pay_price) {
+                return false;
+            }
 
+            // 获取额度倍数配置
+            $quotaMultiple = sys_config('gift_quota', 10);
+            // 计算增加的额度
+            $quotaAmount = $pay_price * $quotaMultiple;
+
+            // 获取用户信息
+            $userServices = app()->make(UserServices::class);
+            $userInfo = $userServices->getOne(['uid' => $order['uid']]);
+
+            // 获取礼包额度服务
+            $userGiftQuotaServices = app()->make(\app\services\user\UserGiftQuotaServices::class);
+
+            // 更新用户额度字段
+            $userServices->bcInc($order['uid'], 'quota', $quotaAmount, 'uid');
+
+            // 记录额度增加记录
+            $balance = bcadd($userInfo['quota'] ?? 0, $quotaAmount, 2);
+            $userGiftQuotaServices->income('order_gift_quota', $order['uid'], [
+                'pay_price' => floatval($pay_price),
+                'number' => $quotaAmount
+            ], $balance, $order['id']);
+
+            @file_put_contents('quanju4.txt', '礼包额度: uid=' . $order['uid'] . ', 订单金额=' . $pay_price . ', 倍数=' . $quotaMultiple . ', 增加额度=' . $quotaAmount . "\r\n", 8);
+
+            return true;
+        } catch (\Exception $e) {
+            @file_put_contents('quanju4.txt', $e->getMessage() . "-礼包额度报错内容\r\n", 8);
+            @file_put_contents('quanju4.txt', $e->getFile() . "-文件\r\n", 8);
+            @file_put_contents('quanju4.txt', $e->getLine() . "-位置\r\n", 8);
+            @file_put_contents('quanju4.txt', $e->getTraceAsString() . "-堆栈\r\n", 8);
+        }
     }
 //    创建礼包推荐关系
     public function createGiftRecommendationRelationship($order)

+ 84 - 0
app/services/user/UserGiftQuotaServices.php

@@ -0,0 +1,84 @@
+<?php
+// +----------------------------------------------------------------------
+// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+// +----------------------------------------------------------------------
+// | Author: CRMEB Team <admin@crmeb.com>
+// +----------------------------------------------------------------------
+declare (strict_types=1);
+
+namespace app\services\user;
+
+use app\dao\user\UserGiftQuotaDao;
+use app\services\BaseServices;
+use crmeb\exceptions\AdminException;
+use think\facade\Log;
+
+/**
+ * 礼包额度服务
+ * Class UserGiftQuotaServices
+ * @package app\services\user
+ */
+class UserGiftQuotaServices extends \app\services\BaseServices
+{
+    /**
+     * 礼包额度记录类型
+     * @var array
+     */
+    protected $incomeData = [
+        'order_gift_quota' => [
+            'title' => '购买礼包赠送额度',
+            'type' => 'order_gift_quota',
+            'mark' => '购买礼包商品消费{%pay_price%}元,赠送额度{%number%}',
+            'status' => 1,
+            'pm' => 1
+        ],
+    ];
+
+    /**
+     * UserGiftQuotaServices constructor.
+     * @param UserGiftQuotaDao $dao
+     */
+    public function __construct(UserGiftQuotaDao $dao)
+    {
+        $this->dao = $dao;
+    }
+
+    /**
+     * 写入礼包额度记录
+     * @param string $type 写入类型
+     * @param int $uid
+     * @param int|string|array $number
+     * @param int|string $balance
+     * @param $linkId
+     * @return bool|mixed
+     */
+    public function income(string $type, int $uid, $number, $balance, $linkId)
+    {
+        $data = $this->incomeData[$type] ?? null;
+        if (!$data) {
+            return true;
+        }
+        $data['uid'] = $uid;
+        $data['balance'] = $balance ?? 0;
+        $data['link_id'] = $linkId;
+        if (is_array($number)) {
+            $key = array_keys($number);
+            $key = array_map(function ($item) {
+                return '{%' . $item . '%}';
+            }, $key);
+            $value = array_values($number);
+            $data['number'] = $number['number'] ?? 0;
+            $data['mark'] = str_replace($key, $value, $data['mark']);
+        } else {
+            $data['number'] = $number;
+            $data['mark'] = str_replace(['{%number%}'], $number, $data['mark']);
+        }
+        $data['add_time'] = time();
+
+        return $this->dao->save($data);
+    }
+}