From 854aa6f99c3e34edfd18babf8d296d54d7527985 Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Fri, 29 Dec 2023 18:00:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=E8=B1=86=E8=B1=86?= =?UTF-8?q?=E7=A7=AF=E5=88=86=E6=8A=B5=E6=89=A3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/StoreOrderCreateRepository.php | 184 +++++++++++------- app/controller/api/store/order/StoreOrder.php | 8 +- .../UseLegumesIntegralJob.php | 39 ++++ 3 files changed, 162 insertions(+), 69 deletions(-) create mode 100644 app/jobs/store/platformCommission/UseLegumesIntegralJob.php diff --git a/app/common/repositories/store/order/StoreOrderCreateRepository.php b/app/common/repositories/store/order/StoreOrderCreateRepository.php index 08a9863..680552e 100644 --- a/app/common/repositories/store/order/StoreOrderCreateRepository.php +++ b/app/common/repositories/store/order/StoreOrderCreateRepository.php @@ -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($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($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['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 + ]); } } diff --git a/app/controller/api/store/order/StoreOrder.php b/app/controller/api/store/order/StoreOrder.php index 60d4d2c..d842fe3 100644 --- a/app/controller/api/store/order/StoreOrder.php +++ b/app/controller/api/store/order/StoreOrder.php @@ -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); } diff --git a/app/jobs/store/platformCommission/UseLegumesIntegralJob.php b/app/jobs/store/platformCommission/UseLegumesIntegralJob.php new file mode 100644 index 0000000..52987cc --- /dev/null +++ b/app/jobs/store/platformCommission/UseLegumesIntegralJob.php @@ -0,0 +1,39 @@ +getMessage(); + Log::info('豆豆积分使用 - 失败: '.var_export($data,1)); + } + $job->delete(); + } + + public function failed($data){ + Log::info('豆豆积分使用 - 失败(failed): '.var_export($data,1)); + } +}