添加:豆豆积分抵扣功能

This commit is contained in:
wuhui_zzw 2023-12-29 18:00:48 +08:00
parent 767be1851e
commit 854aa6f99c
3 changed files with 162 additions and 69 deletions

View File

@ -2,7 +2,9 @@
namespace app\common\repositories\store\order;
use app\common\model\store\platformCommission\LegumesLog;
use app\common\repositories\system\config\ConfigValueRepository;
use app\jobs\store\platformCommission\UseLegumesIntegralJob;
use crmeb\jobs\SendSmsJob;
use crmeb\services\SwooleTaskService;
use think\exception\ValidateException;
@ -34,11 +36,13 @@ use think\facade\{Cache,Db,Log,Queue};
class StoreOrderCreateRepository extends StoreOrderRepository
{
public function v2CartIdByOrderInfo($user, array $cartId, array $takes = null, array $useCoupon = null, bool $usePlatformIntegral = false, bool $useMerIntegral = false, int $addressId = null, $createOrder = false)
// public function v2CartIdByOrderInfo($user, array $cartId, array $takes = null, array $useCoupon = null, bool $usePlatformIntegral = false, bool $useMerIntegral = false, int $addressId = null, $createOrder = false)
public function v2CartIdByOrderInfo($user, array $cartId, array $takes = null, array $useCoupon = null, bool $useLegumesIntegral = false, int $addressId = null, $createOrder = false)
{
$uid = $user->uid;
// $userIntegral = $user->integral;
$key = md5(json_encode(compact('cartId', 'takes', 'useCoupon', 'usePlatformIntegral','useMerIntegral', 'addressId'))) . $uid;
// $key = md5(json_encode(compact('cartId', 'takes', 'useCoupon', 'usePlatformIntegral','useMerIntegral', 'addressId'))) . $uid;
$key = md5(json_encode(compact('cartId', 'takes', 'useCoupon', 'useLegumesIntegral', 'addressId'))) . $uid;
//去掉过期的优惠券信息
app()->make(StoreCouponUserRepository::class)->failCoupon();
@ -746,22 +750,32 @@ class StoreOrderCreateRepository extends StoreOrderRepository
$order_total_integral_price = 0;
$order_total_give_integral = 0;
$allow_no_address = true;
$order_use_mer_integral = 0;// 使用的商户积分(总)
$order_use_mer_integral_price = 0;// 使用的商户积分抵扣的金额
$order_use_platform_integral = 0;// 使用的平台积分(总)
$order_use_platform_integral_price = 0;// 使用平台积分抵扣的金额
$hold_mer_integral = 0;// 用户持有的当前订单相关商户总商户积分
$hold_platform_integral = app()->make(IntegralRepository::class)->getMerIntegral((int)$uid,(int)0);// 用户持有的平台积分总数
// $order_use_mer_integral = 0;// 使用的商户积分(总)
// $order_use_mer_integral_price = 0;// 使用的商户积分抵扣的金额
// $order_use_platform_integral = 0;// 使用的平台积分(总)
// $order_use_platform_integral_price = 0;// 使用平台积分抵扣的金额
// $hold_mer_integral = 0;// 用户持有的当前订单相关商户总商户积分
// $hold_platform_integral = app()->make(IntegralRepository::class)->getMerIntegral((int)$uid,(int)0);// 用户持有的平台积分总数
// 豆豆积分相关处理
$order_use_legumes_integral = 0;// 使用的豆豆积分(总)
$order_use_legumes_integral_price = 0;// 使用的豆豆积分抵扣的金额
$legumesModel = (new LegumesLog())->where('uid', (int)$uid)->where('status', 1);
$totalGetIntegral = $legumesModel->sum('get_integral');// 总获取积分
$totalUseIntegral = $legumesModel->sum('use_integral');// 总已使用积分
$hold_legumes_integral = (float)sprintf("%.2f",$totalGetIntegral - $totalUseIntegral);// 持有可使用积分
foreach ($merchantCartList as &$merchantCart) {
// 获取用户在当前店铺的积分 || 平台积分
$integralInfo = app()->make(IntegralRepository::class)->getUseIntegral((int)$uid,(int)$merchantCart['mer_id']);
$integralInfo['integral'] = bcsub($hold_platform_integral,$order_use_platform_integral,2);// 剩余可用平台积分
$integralInfo['convert_integral'] = (float)sprintf("%.2f",$integralInfo['integral'] / $integralInfo['convert_rate']);// 剩余可用平台积分转换后的积分
// $integralInfo = app()->make(IntegralRepository::class)->getUseIntegral((int)$uid,(int)$merchantCart['mer_id']);
// $integralInfo['integral'] = bcsub($hold_platform_integral,$order_use_platform_integral,2);// 剩余可用平台积分
// $integralInfo['convert_integral'] = (float)sprintf("%.2f",$integralInfo['integral'] / $integralInfo['convert_rate']);// 剩余可用平台积分转换后的积分
$hold_mer_integral = bcadd($hold_mer_integral,$integralInfo['mer_integral'],2);// 持有商户积分叠加
if(!$useMerIntegral) $integralInfo['mer_integral'] = (float)0;// 不使用本商户积分
if(!$usePlatformIntegral) $integralInfo['convert_integral'] = (float)0;// 不使用平台积分
// $hold_mer_integral = bcadd($hold_mer_integral,$integralInfo['mer_integral'],2);// 持有商户积分叠加
// if(!$useMerIntegral) $integralInfo['mer_integral'] = (float)0;// 不使用本商户积分
// if(!$usePlatformIntegral) $integralInfo['convert_integral'] = (float)0;// 不使用平台积分
$integralInfo['legumes_integral'] = bcsub($hold_legumes_integral,$order_use_legumes_integral,2);// 剩余可用豆豆积分
if(!$useLegumesIntegral) $integralInfo['legumes_integral'] = 0;// 不使用豆豆积分
// 配置信息
$merchantCart['take'] = [
'mer_integral_rate' => 0,
@ -779,10 +793,12 @@ class StoreOrderCreateRepository extends StoreOrderRepository
$merIntegralConfig['mer_integral_rate'] = min(1, $merIntegralConfig['mer_integral_rate'] > 0 ? bcdiv($merIntegralConfig['mer_integral_rate'], 100, 4) : $merIntegralConfig['mer_integral_rate']);
$total_integral = 0;// 总使用积分
$total_integral_price = 0;// 总抵扣金额
$use_mer_integral = 0;// 使用的商户积分(本商户订单)
$use_mer_integral_price = 0;// 使用商户积分抵扣的金额(本商户订单)
$use_platform_integral = 0;// 使用的平台积分(本商户订单)
$use_platform_integral_price = 0;// 使用平台积分抵扣的金额(本商户订单)
// $use_mer_integral = 0;// 使用的商户积分(本商户订单)
// $use_mer_integral_price = 0;// 使用商户积分抵扣的金额(本商户订单)
// $use_platform_integral = 0;// 使用的平台积分(本商户订单)
// $use_platform_integral_price = 0;// 使用平台积分抵扣的金额(本商户订单)
$use_legumes_integral = 0;// 使用的豆豆积分(本商户订单)
$use_legumes_integral_price = 0;// 使用豆豆积分抵扣的金额(本商户订单)
$merIntegralFlag = $merIntegralFlag || ((bool)$merIntegralConfig['mer_integral_status']);
// 是否使用积分抵扣 使用抵扣、平台开启、商户开启、积分抵用金额大于0
@ -808,31 +824,41 @@ class StoreOrderCreateRepository extends StoreOrderRepository
$isParticipation = $merchantCart['order']['true_price'] > 0 && $cart['product_type'] == 0 && $integralFlag && $productIntegralPrice > 0;
if($isParticipation) $is_has_integral_use = 1;// 是否存在积分使用情况 只要存在一个则存在
// 只有普通商品可以抵扣
if ($isParticipation && ($integralInfo['mer_integral'] > 0 || $integralInfo['convert_integral'] > 0) && ($usePlatformIntegral || $useMerIntegral)) {
// if ($isParticipation && ($integralInfo['mer_integral'] > 0 || $integralInfo['convert_integral'] > 0) && ($usePlatformIntegral || $useMerIntegral)) {
if ($isParticipation && $hold_legumes_integral > 0 && $useLegumesIntegral) {
// 抵扣需要的积分
$productIntegral = (int)ceil(bcdiv($productIntegralPrice, $integralMoney, 3));
if ($productIntegral > 0 && ($productIntegral <= $integralInfo['mer_integral'] || $productIntegral <= $integralInfo['convert_integral'])) {
// $productIntegral = (int)ceil(bcdiv($productIntegralPrice, $integralMoney, 3));
// if ($productIntegral > 0 && ($productIntegral <= $integralInfo['mer_integral'] || $productIntegral <= $integralInfo['convert_integral'])) {
if ($productIntegralPrice > 0 && $productIntegralPrice <= $hold_legumes_integral) {
// 判断:使用的积分类型
if($useMerIntegral){
// 使用商户积分抵扣
$integralInfo['mer_integral'] = (float)bcsub($integralInfo['mer_integral'], $productIntegral, 2);
$integralInfo['use_integral_type'] = 'mer_integral';
// if($useMerIntegral){
// // 使用商户积分抵扣
// $integralInfo['mer_integral'] = (float)bcsub($integralInfo['mer_integral'], $productIntegral, 2);
// $integralInfo['use_integral_type'] = 'mer_integral';
// // 判断:积分不足 不使用积分抵扣
// if($integralInfo['mer_integral'] < 0) continue;
// }else if($usePlatformIntegral) {
// // 使用平台积分抵扣
// $integralInfo['convert_integral'] = bcsub($integralInfo['convert_integral'], $productIntegral, 2);// 减少转换后的积分
// $productIntegral = bcmul($productIntegral, $integralInfo['convert_rate'],2);// 刷新使用积分(使用平台积分,需要根据比例刷新平台积分减少数量)
// $integralInfo['integral'] = bcsub($integralInfo['integral'], $productIntegral, 2);// 减少未转化的平台积分
// $integralInfo['use_integral_type'] = 'platform_integral';
// // 判断:积分不足 不使用积分抵扣
// if($integralInfo['convert_integral'] < 0) continue;
// }
// 使用豆豆积分抵扣
$integralInfo['legumes_integral'] = bcsub($integralInfo['legumes_integral'], $productIntegralPrice, 2);// 减少豆豆积分
$integralInfo['use_integral_type'] = 'legumes_integral';
// 判断:积分不足 不使用积分抵扣
if($integralInfo['mer_integral'] < 0) continue;
}else if($usePlatformIntegral) {
// 使用平台积分抵扣
$integralInfo['convert_integral'] = bcsub($integralInfo['convert_integral'], $productIntegral, 2);// 减少转换后的积分
$productIntegral = bcmul($productIntegral, $integralInfo['convert_rate'],2);// 刷新使用积分(使用平台积分,需要根据比例刷新平台积分减少数量)
$integralInfo['integral'] = bcsub($integralInfo['integral'], $productIntegral, 2);// 减少未转化的平台积分
$integralInfo['use_integral_type'] = 'platform_integral';
// 判断:积分不足 不使用积分抵扣
if($integralInfo['convert_integral'] < 0) continue;
}
if($integralInfo['legumes_integral'] < 0) continue;
// 使用多少积分抵扣了多少金额
$cart['integral'] = [
'use' => $productIntegral,
'use' => $productIntegralPrice,
'price' => $productIntegralPrice,
'use_integral_type' => $integralInfo['use_integral_type']
];
@ -842,14 +868,19 @@ class StoreOrderCreateRepository extends StoreOrderRepository
$merchantCart['order']['true_price'] = bcsub($merchantCart['order']['true_price'], $cart['integral']['price'], 2);
if($integralInfo['use_integral_type'] == 'mer_integral') {
$use_mer_integral = bcadd($use_mer_integral, $productIntegral, 2);// 使用的商户积分
$use_mer_integral_price = bcadd($use_mer_integral_price,$productIntegralPrice,2);// 使用商户积分抵扣的金额
}
else {
$use_platform_integral = bcadd($use_platform_integral, $productIntegral, 2);;// 使用的平台积分
$use_platform_integral_price = bcadd($use_platform_integral_price, $productIntegralPrice, 2);;// 使用平台积分抵扣的金额
}
// if($integralInfo['use_integral_type'] == 'mer_integral') {
// $use_mer_integral = bcadd($use_mer_integral, $productIntegral, 2);// 使用的商户积分
// $use_mer_integral_price = bcadd($use_mer_integral_price,$productIntegralPrice,2);// 使用商户积分抵扣的金额
// }
// else {
// $use_platform_integral = bcadd($use_platform_integral, $productIntegral, 2);;// 使用的平台积分
// $use_platform_integral_price = bcadd($use_platform_integral_price, $productIntegralPrice, 2);;// 使用平台积分抵扣的金额
// }
// 使用的豆豆积分
$use_legumes_integral = bcadd($use_legumes_integral, $productIntegralPrice, 2);
$use_legumes_integral_price = bcadd($use_legumes_integral_price,$productIntegralPrice,2);
$total_integral_price = bcadd($total_integral_price, $cart['integral']['price'], 2);
@ -864,10 +895,15 @@ class StoreOrderCreateRepository extends StoreOrderRepository
$order_total_integral = bcadd($order_total_integral, $total_integral, 2);
$order_total_integral_price = bcadd($order_total_integral_price, $total_integral_price, 2);
$order_use_mer_integral = bcadd($order_use_mer_integral, $use_mer_integral, 2);
$order_use_mer_integral_price = bcadd($order_use_mer_integral_price, $use_mer_integral_price, 2);
$order_use_platform_integral = bcadd($order_use_platform_integral, $use_platform_integral, 2);
$order_use_platform_integral_price = bcadd($order_use_platform_integral_price, $use_platform_integral_price, 2);
// $order_use_mer_integral = bcadd($order_use_mer_integral, $use_mer_integral, 2);
// $order_use_mer_integral_price = bcadd($order_use_mer_integral_price, $use_mer_integral_price, 2);
// $order_use_platform_integral = bcadd($order_use_platform_integral, $use_platform_integral, 2);
// $order_use_platform_integral_price = bcadd($order_use_platform_integral_price, $use_platform_integral_price, 2);
$order_use_legumes_integral = bcadd($order_use_legumes_integral, $use_legumes_integral, 2);
$order_use_legumes_integral_price = bcadd($order_use_legumes_integral_price, $use_legumes_integral_price, 2);
$_pay_price = $merchantCart['order']['true_price'];
@ -931,10 +967,12 @@ class StoreOrderCreateRepository extends StoreOrderRepository
}
$merchantCart['order']['use_mer_integral'] = $use_mer_integral;
$merchantCart['order']['use_mer_integral_price'] = $use_mer_integral_price;
$merchantCart['order']['use_platform_integral'] = $use_platform_integral;
$merchantCart['order']['use_platform_integral_price'] = $use_platform_integral_price;
// $merchantCart['order']['use_mer_integral'] = $use_mer_integral;
// $merchantCart['order']['use_mer_integral_price'] = $use_mer_integral_price;
// $merchantCart['order']['use_platform_integral'] = $use_platform_integral;
// $merchantCart['order']['use_platform_integral_price'] = $use_platform_integral_price;
$merchantCart['order']['use_legumes_integral'] = $use_legumes_integral;
$merchantCart['order']['use_legumes_integral_price'] = $use_legumes_integral_price;
$merchantCart['order']['order_type'] = $order_type;
$merchantCart['order']['total_give_integral'] = $total_give_integral;
$merchantCart['order']['total_integral_price'] = $total_integral_price;
@ -980,13 +1018,16 @@ class StoreOrderCreateRepository extends StoreOrderRepository
'usePlatformCouponId',
'order_total_integral',
'order_total_integral_price',
'order_use_mer_integral',
'order_use_mer_integral_price',
'order_use_platform_integral',
'order_use_platform_integral_price',
// 'order_use_mer_integral',
// 'order_use_mer_integral_price',
// 'order_use_platform_integral',
// 'order_use_platform_integral_price',
'is_has_integral_use',
'hold_mer_integral',
'hold_platform_integral',
// 'hold_mer_integral',
// 'hold_platform_integral',
'order_use_legumes_integral',
'order_use_legumes_integral_price',
'hold_legumes_integral',
'order_total_give_integral',
'order_svip_discount',
'total_platform_coupon_price',
@ -995,8 +1036,9 @@ class StoreOrderCreateRepository extends StoreOrderRepository
'status',
'address',
'openIntegral',
'usePlatformIntegral',
'useMerIntegral',
// 'usePlatformIntegral',
// 'useMerIntegral',
'useLegumesIntegral',
'key',
'order_refund_switch',
'order'
@ -1196,10 +1238,12 @@ class StoreOrderCreateRepository extends StoreOrderRepository
'integral' => $merchantCart['order']['total_integral'],
'integral_price' => $merchantCart['order']['total_integral_price'],
'give_integral' => $merchantCart['order']['total_give_integral'],
'use_mer_integral' => (float)$merchantCart['order']['use_mer_integral'] ?? 0,
'use_mer_integral_price' => (float)$merchantCart['order']['use_mer_integral_price'] ?? 0,
'use_platform_integral' => (float)$merchantCart['order']['use_platform_integral'] ?? 0,
'use_platform_integral_price' => (float)$merchantCart['order']['use_platform_integral_price'] ?? 0,
// 'use_mer_integral' => (float)$merchantCart['order']['use_mer_integral'] ?? 0,
// 'use_mer_integral_price' => (float)$merchantCart['order']['use_mer_integral_price'] ?? 0,
// 'use_platform_integral' => (float)$merchantCart['order']['use_platform_integral'] ?? 0,
// 'use_platform_integral_price' => (float)$merchantCart['order']['use_platform_integral_price'] ?? 0,
'use_legumes_integral' => (float)$merchantCart['order']['use_legumes_integral'] ?? 0,
'use_legumes_integral_price' => (float)$merchantCart['order']['use_legumes_integral_price'] ?? 0,
'mer_id' => $merchantCart['mer_id'],
'cost' => $cost,
'order_extend' => count($extend) ? json_encode($extend,JSON_UNESCAPED_UNICODE) : '',
@ -1326,7 +1370,7 @@ class StoreOrderCreateRepository extends StoreOrderRepository
$_order = $this->dao->create($order);
// 积分抵扣处理 由于区分平台积分和商户积分 这里只能每个订单单独处理
if ($order['integral'] > 0) {
// 修改用户持有的平台积分
/* // 修改用户持有的平台积分
if((float)$order['use_platform_integral'] > 0) {
$user->integral = bcsub($user->integral, $order['use_platform_integral'], 2);
$integralRepositoryMake->changeIntegral((int)$uid,(int)0,(float)sprintf("%.2f",0 - $order['use_platform_integral']));
@ -1391,6 +1435,14 @@ class StoreOrderCreateRepository extends StoreOrderRepository
'mer_id' => $order['mer_id'],
'status' => 1
];
}*/
// 修改:用户持有的豆豆积分
if((float)$order['use_legumes_integral'] > 0) {
// 推广员佣金结算
Queue::push(UseLegumesIntegralJob::class,[
'order_id' => $_order->order_id
]);
}
}

View File

@ -50,13 +50,15 @@ class StoreOrder extends BaseController
$addressId = (int)$this->request->param('address_id');
$couponIds = (array)$this->request->param('use_coupon', []);
$takes = (array)$this->request->param('takes', []);
$usePlatformIntegral = (bool)$this->request->param('use_platform_integral', false);
$useMerIntegral = (bool)$this->request->param('use_mer_integral', false);
// $usePlatformIntegral = (bool)$this->request->param('use_platform_integral', false);
// $useMerIntegral = (bool)$this->request->param('use_mer_integral', false);
$useLegumesIntegral = (bool)$this->request->param('use_legumes_integral', false);
$user = $this->request->userInfo();
$uid = $user->uid;
if (!($count = count($cartId)) || $count != count($cartRepository->validIntersection($cartId, $uid)))
return app('json')->fail('数据无效');
$orderInfo = $orderCreateRepository->v2CartIdByOrderInfo($user, $cartId, $takes, $couponIds, $usePlatformIntegral,$useMerIntegral, $addressId);
// $orderInfo = $orderCreateRepository->v2CartIdByOrderInfo($user, $cartId, $takes, $couponIds, $usePlatformIntegral,$useMerIntegral, $addressId);
$orderInfo = $orderCreateRepository->v2CartIdByOrderInfo($user, $cartId, $takes, $couponIds, $useLegumesIntegral, $addressId);
return app('json')->success($orderInfo);
}

View File

@ -0,0 +1,39 @@
<?php
namespace app\jobs\store\platformCommission;
use crmeb\interfaces\JobInterface;
use think\facade\Log;
/**
* Common: 豆豆积分使用 减少积分
* Author: wu-hui
* Time: 2023/12/29 17:52
* Class UseLegumesIntegralJob
* @package app\jobs\store\platformCommission
*/
class UseLegumesIntegralJob implements JobInterface{
public function fire($job,$data){
try{
Log::info('豆豆积分使用 - 开始处理: '.var_export($data,1));
}
catch(\Exception $e){
$data['error_msg'] = $e->getMessage();
Log::info('豆豆积分使用 - 失败: '.var_export($data,1));
}
$job->delete();
}
public function failed($data){
Log::info('豆豆积分使用 - 失败(failed): '.var_export($data,1));
}
}