diff --git a/crmeb/app/jobs/OrderJob.php b/crmeb/app/jobs/OrderJob.php index 086e11d51..be0dac2a3 100644 --- a/crmeb/app/jobs/OrderJob.php +++ b/crmeb/app/jobs/OrderJob.php @@ -212,7 +212,7 @@ class OrderJob extends BaseJobs $description .= '砍价商品:' . $title; $image = $bargainServices->value(['id' => $order['bargain_id']], 'image'); } else { - $productIds = $cartInfoServices->getCartIdsProduct($order['cart_id']); + $productIds = $cartInfoServices->getCartIdsProduct($order['id']); $storeProduct = $services->getProductArray([['id', 'in', $productIds]], 'image,store_name', 'id'); if (count($storeProduct)) { foreach ($storeProduct as $value) { diff --git a/crmeb/app/listener/notice/Notice.php b/crmeb/app/listener/notice/Notice.php index 758feaf71..45795a10f 100644 --- a/crmeb/app/listener/notice/Notice.php +++ b/crmeb/app/listener/notice/Notice.php @@ -157,7 +157,7 @@ class Notice implements ListenerInterface case 'price_revision': $order = $data['order']; $pay_price = $data['pay_price']; - $order['storeName'] = $orderInfoServices->getCarIdByProductTitle($order['id'], $order['cart_id']); + $order['storeName'] = $orderInfoServices->getCarIdByProductTitle((int)$order['id']); //短信 $NoticeSms->sendSms($order['user_phone'], ['order_id' => $order['order_id'], 'pay_price' => $pay_price]); //站内信 @@ -170,7 +170,7 @@ class Notice implements ListenerInterface $order = $data['order']; $order['refund_price'] = $datas['refund_price']; $order['refund_no'] = $datas['refund_no']; - $storeName = $orderInfoServices->getCarIdByProductTitle($order['id'], $order['cart_id']); + $storeName = $orderInfoServices->getCarIdByProductTitle((int)$order['id']); $storeTitle = Str::substrUTf8($storeName, 20, 'UTF-8', ''); //站内信 $SystemMsg->sendMsg($order['uid'], ['order_id' => $order['order_id'], 'pay_price' => $order['pay_price'], 'refund_price' => $datas['refund_price']]); @@ -334,7 +334,7 @@ class Notice implements ListenerInterface case 'order_pay_false': $order = $data['order']; $order_id = $order['order_id']; - $order['storeName'] = $orderInfoServices->getCarIdByProductTitle($order['id'], $order['cart_id']); + $order['storeName'] = $orderInfoServices->getCarIdByProductTitle((int)$order['id']); //短信 $NoticeSms->sendSms($order['user_phone'], compact('order_id')); //站内信 @@ -349,7 +349,7 @@ class Notice implements ListenerInterface //短信 $NoticeSms->sendAdminPaySuccess($order); //公众号小程序 - $storeName = $orderInfoServices->getCarIdByProductTitle($order['id'], $order['cart_id']); + $storeName = $orderInfoServices->getCarIdByProductTitle((int)$order['id']); $title = '亲,来新订单啦!'; $status = '新订单'; $link = '/pages/admin/orderDetail/index?id=' . $order['order_id']; @@ -366,7 +366,7 @@ class Notice implements ListenerInterface //短信 $NoticeSms->sendAdminConfirmTakeOver($order); //公众号 - $storeName = $orderInfoServices->getCarIdByProductTitle($order['id'], $order['cart_id']); + $storeName = $orderInfoServices->getCarIdByProductTitle((int)$order['id']); $title = '亲,用户已经收到货物啦!'; $status = '订单收货'; $link = '/pages/admin/orderDetail/index?id=' . $order['order_id']; @@ -384,7 +384,7 @@ class Notice implements ListenerInterface //企业微信通知 $EnterpriseWechat->sendMsg(['order_id' => $order['order_id']]); //公众号 - $storeName = $orderInfoServices->getCarIdByProductTitle($order['id'], $order['cart_id']); + $storeName = $orderInfoServices->getCarIdByProductTitle((int)$order['id']); $title = '亲,您有个退款订单待处理!'; $status = '订单退款'; $link = '/pages/admin/orderDetail/index?id=' . $order['refund_no'] . '&types=-3'; diff --git a/crmeb/app/services/message/NoticeService.php b/crmeb/app/services/message/NoticeService.php index abd9c084a..b3996587b 100644 --- a/crmeb/app/services/message/NoticeService.php +++ b/crmeb/app/services/message/NoticeService.php @@ -79,7 +79,7 @@ class NoticeService extends BaseServices { /** @var StoreOrderCartInfoServices $cartServices */ $cartServices = app()->make(StoreOrderCartInfoServices::class); - $product = $cartServices->getCartInfoPrintProduct($order['cart_id']); + $product = $cartServices->getCartInfoPrintProduct($order['id']); if (!$product) { throw new AdminException(400463); } diff --git a/crmeb/app/services/order/StoreOrderCartInfoServices.php b/crmeb/app/services/order/StoreOrderCartInfoServices.php index 8b6c1164f..98e614dff 100644 --- a/crmeb/app/services/order/StoreOrderCartInfoServices.php +++ b/crmeb/app/services/order/StoreOrderCartInfoServices.php @@ -49,7 +49,8 @@ class StoreOrderCartInfoServices extends BaseServices /** * 获取指定订单下的商品详情 * @param int $oid - * @return array|mixed + * @return array|bool|mixed + * @throws \ReflectionException */ public function getOrderCartInfo(int $oid) { @@ -76,19 +77,22 @@ class StoreOrderCartInfoServices extends BaseServices /** * 查找购物车里的所有商品标题 * @param int $oid - * @param $cartId * @param false $goodsNum * @return bool|mixed|string * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ - public function getCarIdByProductTitle(int $oid, $cartId, $goodsNum = false) + public function getCarIdByProductTitle(int $oid, bool $goodsNum = false) { - $key = md5('store_order_cart_product_title_' . $oid . '_' . is_array($cartId) ? implode('_', $cartId) : $cartId); + if ($goodsNum) { + $key = md5('store_order_cart_product_title_num' . $oid); + } else { + $key = md5('store_order_cart_product_title_' . $oid); + } $title = CacheService::get($key); if (!$title) { - $orderCart = $this->dao->getCartInfoList(['oid' => $oid, 'cart_id' => $cartId], ['cart_info']); + $orderCart = $this->dao->getCartInfoList(['oid' => $oid], ['cart_info']); foreach ($orderCart as $item) { if (isset($item['cart_info']['productInfo']['store_name'])) { if ($goodsNum && isset($item['cart_info']['cart_num'])) { @@ -108,15 +112,15 @@ class StoreOrderCartInfoServices extends BaseServices /** * 获取打印订单的商品信息 - * @param array $cartId + * @param $oid * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ - public function getCartInfoPrintProduct(array $cartId) + public function getCartInfoPrintProduct($oid) { - $cartInfo = $this->dao->getCartInfoList(['cart_id' => $cartId], ['cart_info']); + $cartInfo = $this->dao->getCartInfoList(['oid' => $oid], ['cart_info']); $product = []; foreach ($cartInfo as $item) { $value = is_string($item['cart_info']) ? json_decode($item['cart_info'], true) : $item['cart_info']; @@ -127,69 +131,13 @@ class StoreOrderCartInfoServices extends BaseServices return $product; } - /** - * 获取产品返佣金额 - * @param array $cartId - * @param bool $type true = 一级返佣, fasle = 二级返佣 - * @return string - */ - public function getProductBrokerage(array $cartId, bool $type = true) - { - $cartInfo = $this->dao->getCartInfoList(['cart_id' => $cartId], ['cart_info']); - $oneBrokerage = '0';//一级返佣金额 - $twoBrokerage = '0';//二级返佣金额 - $sumProductPrice = '0';//非指定返佣商品总金额 - foreach ($cartInfo as $value) { - $cartNum = $value['cart_info']['cart_num'] ?? 0; - if (isset($value['cart_info']['productInfo'])) { - $productInfo = $value['cart_info']['productInfo']; - //指定返佣金额 - if (isset($productInfo['is_sub']) && $productInfo['is_sub'] == 1) { - $oneBrokerage = bcadd($oneBrokerage, bcmul($cartNum, $productInfo['attrInfo']['brokerage'] ?? 0, 2), 2); - $twoBrokerage = bcadd($twoBrokerage, bcmul($cartNum, $productInfo['attrInfo']['brokerage_two'] ?? 0, 2), 2); - } else { - //比例返佣 - if (isset($productInfo['attrInfo'])) { - $sumProductPrice = bcadd($sumProductPrice, bcmul($cartNum, $productInfo['attrInfo']['price'] ?? 0, 2), 2); - } else { - $sumProductPrice = bcadd($sumProductPrice, bcmul($cartNum, $productInfo['price'] ?? 0, 2), 2); - } - } - } - } - if ($type) { - //获取后台一级返佣比例 - $storeBrokerageRatio = sys_config('store_brokerage_ratio'); - //一级返佣比例 小于等于零时直接返回 不返佣 - if ($storeBrokerageRatio <= 0) { - return $oneBrokerage; - } - //计算获取一级返佣比例 - $brokerageRatio = bcdiv($storeBrokerageRatio, 100, 4); - $brokeragePrice = bcmul($sumProductPrice, $brokerageRatio, 2); - //固定返佣 + 比例返佣 = 一级总返佣金额 - return bcadd($oneBrokerage, $brokeragePrice, 2); - } else { - //获取二级返佣比例 - $storeBrokerageTwo = sys_config('store_brokerage_two'); - //二级返佣比例小于等于0 直接返回 - if ($storeBrokerageTwo <= 0) { - return $twoBrokerage; - } - //计算获取二级返佣比例 - $brokerageRatio = bcdiv($storeBrokerageTwo, 100, 4); - $brokeragePrice = bcmul($sumProductPrice, $brokerageRatio, 2); - //固定返佣 + 比例返佣 = 二级总返佣金额 - return bcadd($twoBrokerage, $brokeragePrice, 2); - } - } - /** * 保存购物车info * @param $oid * @param $uid * @param array $cartInfo - * @return int + * @return \think\Collection + * @throws \Exception */ public function setCartInfo($oid, $uid, array $cartInfo) { @@ -228,12 +176,12 @@ class StoreOrderCartInfoServices extends BaseServices /** * 商品编号 - * @param $cartId + * @param $oid * @return array */ - public function getCartIdsProduct($cartId) + public function getCartIdsProduct($oid) { - return $this->dao->getColumn([['cart_id', 'in', $cartId]], 'product_id', 'oid'); + return $this->dao->getColumn(['oid' => $oid], 'product_id', 'oid'); } /** diff --git a/crmeb/app/services/order/StoreOrderDeliveryServices.php b/crmeb/app/services/order/StoreOrderDeliveryServices.php index 6a464844b..657a4dce8 100644 --- a/crmeb/app/services/order/StoreOrderDeliveryServices.php +++ b/crmeb/app/services/order/StoreOrderDeliveryServices.php @@ -125,7 +125,7 @@ class StoreOrderDeliveryServices extends BaseServices $expData['siid'] = sys_config('config_export_siid'); $expData['temp_id'] = $data['express_temp_id']; $expData['count'] = $orderInfo->total_num; - $expData['cargo'] = $orderInfoServices->getCarIdByProductTitle($orderInfo->id, $orderInfo->cart_id, true); + $expData['cargo'] = $orderInfoServices->getCarIdByProductTitle((int)$orderInfo->id, true); $expData['order_id'] = $orderInfo->order_id; if (!sys_config('config_export_open', 0)) { throw new AdminException(400528); @@ -436,7 +436,7 @@ class StoreOrderDeliveryServices extends BaseServices //获取购物车内的商品标题 /** @var StoreOrderCartInfoServices $orderInfoServices */ $orderInfoServices = app()->make(StoreOrderCartInfoServices::class); - $storeName = $orderInfoServices->getCarIdByProductTitle((int)$orderInfo->id, $orderInfo->cart_id); + $storeName = $orderInfoServices->getCarIdByProductTitle((int)$orderInfo->id); switch ($type) { case 1://快递发货 $this->orderDeliverGoods($id, $data, $orderInfo, $storeName); @@ -499,7 +499,7 @@ class StoreOrderDeliveryServices extends BaseServices $expData['temp_id'] = $data['express_temp_id']; $expData['count'] = $orderInfo->total_num; $expData['weight'] = $this->getOrderSumWeight($id); - $expData['cargo'] = $orderInfoServices->getCarIdByProductTitle((int)$orderInfo->id, $orderInfo->cart_id, true); + $expData['cargo'] = $orderInfoServices->getCarIdByProductTitle((int)$orderInfo->id, true); $expData['order_id'] = $orderInfo->order_id; if (!sys_config('config_export_open', 0)) { throw new AdminException(400528); diff --git a/crmeb/app/services/order/StoreOrderServices.php b/crmeb/app/services/order/StoreOrderServices.php index ddb4eef3f..4941e9008 100644 --- a/crmeb/app/services/order/StoreOrderServices.php +++ b/crmeb/app/services/order/StoreOrderServices.php @@ -1450,7 +1450,7 @@ HTML; /** @var StoreOrderCartInfoServices $cartServices */ $cartServices = app()->make(StoreOrderCartInfoServices::class); - $product = $cartServices->getCartInfoPrintProduct($order->cart_id); + $product = $cartServices->getCartInfoPrintProduct($order->id); if (!$product) { throw new AdminException(400533); } diff --git a/crmeb/app/services/order/StoreOrderSuccessServices.php b/crmeb/app/services/order/StoreOrderSuccessServices.php index 74cbc0f90..94b574fed 100644 --- a/crmeb/app/services/order/StoreOrderSuccessServices.php +++ b/crmeb/app/services/order/StoreOrderSuccessServices.php @@ -74,7 +74,7 @@ class StoreOrderSuccessServices extends BaseServices } /** @var StoreOrderCartInfoServices $orderInfoServices */ $orderInfoServices = app()->make(StoreOrderCartInfoServices::class); - $orderInfo['storeName'] = $orderInfoServices->getCarIdByProductTitle((int)$orderInfo['id'], $orderInfo['cart_id']); + $orderInfo['storeName'] = $orderInfoServices->getCarIdByProductTitle((int)$orderInfo['id']); $res1 = $this->dao->update($orderInfo['id'], $updata); $resPink = true; if ($orderInfo['combination_id'] && $res1 && !$orderInfo['refund_status']) { diff --git a/crmeb/app/services/order/StoreOrderTakeServices.php b/crmeb/app/services/order/StoreOrderTakeServices.php index bda8dd18f..82056518f 100644 --- a/crmeb/app/services/order/StoreOrderTakeServices.php +++ b/crmeb/app/services/order/StoreOrderTakeServices.php @@ -93,7 +93,7 @@ class StoreOrderTakeServices extends BaseServices //获取购物车内的商品标题 /** @var StoreOrderCartInfoServices $orderInfoServices */ $orderInfoServices = app()->make(StoreOrderCartInfoServices::class); - $storeName = $orderInfoServices->getCarIdByProductTitle($order['id'], $order['cart_id']); + $storeName = $orderInfoServices->getCarIdByProductTitle((int)$order['id']); $storeTitle = Str::substrUTf8($storeName, 20, 'UTF-8', ''); $res = $this->transaction(function () use ($order, $userInfo, $storeTitle) { @@ -352,15 +352,7 @@ class StoreOrderTakeServices extends BaseServices if (!$userServices->checkUserPromoter($one_spread_uid)) { return $this->backOrderBrokerageTwo($orderInfo, $userInfo, $isSelfBrokerage); } - $onebrokerage = $orderInfo['one_brokerage'] ?? 0; - if ($onebrokerage) {//订单中取出 - $brokeragePrice = $onebrokerage; - } else { - $cartId = is_string($orderInfo['cart_id']) ? json_decode($orderInfo['cart_id'], true) : $orderInfo['cart_id']; - /** @var StoreOrderCartInfoServices $cartServices */ - $cartServices = app()->make(StoreOrderCartInfoServices::class); - $brokeragePrice = $cartServices->getProductBrokerage($cartId); - } + $brokeragePrice = $orderInfo['one_brokerage'] ?? 0; // 返佣金额小于等于0 直接返回不返佣金 if ($brokeragePrice <= 0) { return true; @@ -431,15 +423,7 @@ class StoreOrderTakeServices extends BaseServices if (!$userServices->checkUserPromoter($spread_two_uid)) { return true; } - $twobrokerage = $orderInfo['two_brokerage'] ?? 0; - if ($twobrokerage) { - $brokeragePrice = $twobrokerage; - } else {//兼容之前下单未计算佣金类订单 重新计算一次 - $cartId = is_string($orderInfo['cart_id']) ? json_decode($orderInfo['cart_id'], true) : $orderInfo['cart_id']; - /** @var StoreOrderCartInfoServices $cartServices */ - $cartServices = app()->make(StoreOrderCartInfoServices::class); - $brokeragePrice = $cartServices->getProductBrokerage($cartId, false); - } + $brokeragePrice = $orderInfo['two_brokerage'] ?? 0; // 返佣金额小于等于0 直接返回不返佣金 if ($brokeragePrice <= 0) { return true; diff --git a/crmeb/app/services/pay/OrderPayServices.php b/crmeb/app/services/pay/OrderPayServices.php index da9605ff9..9c9ba251c 100644 --- a/crmeb/app/services/pay/OrderPayServices.php +++ b/crmeb/app/services/pay/OrderPayServices.php @@ -78,7 +78,7 @@ class OrderPayServices } else { /** @var StoreOrderCartInfoServices $orderInfoServices */ $orderInfoServices = app()->make(StoreOrderCartInfoServices::class); - $body = $orderInfoServices->getCarIdByProductTitle((int)$orderInfo['id'], $orderInfo['cart_id']); + $body = $orderInfoServices->getCarIdByProductTitle((int)$orderInfo['id']); $body = Str::substrUTf8($site_name . '--' . $body, 20); $successAction = "product"; /** @var StoreOrderServices $orderServices */ @@ -117,7 +117,7 @@ class OrderPayServices } else { /** @var StoreOrderCartInfoServices $orderInfoServices */ $orderInfoServices = app()->make(StoreOrderCartInfoServices::class); - $body = $orderInfoServices->getCarIdByProductTitle($orderInfo['id'], $orderInfo['cart_id']); + $body = $orderInfoServices->getCarIdByProductTitle((int)$orderInfo['id']); $body = Str::substrUTf8($site_name . '--' . $body, 30); $successAction = "product"; /** @var StoreOrderServices $orderServices */ diff --git a/crmeb/public/install/crmeb.sql b/crmeb/public/install/crmeb.sql index fd5947896..6ff8cb075 100644 --- a/crmeb/public/install/crmeb.sql +++ b/crmeb/public/install/crmeb.sql @@ -28052,7 +28052,7 @@ CREATE TABLE IF NOT EXISTS `eb_store_order` ( `real_name` varchar(32) NOT NULL DEFAULT '' COMMENT '用户姓名', `user_phone` varchar(18) NOT NULL DEFAULT '' COMMENT '用户电话', `user_address` varchar(100) NOT NULL DEFAULT '' COMMENT '详细地址', - `cart_id` varchar(256) NOT NULL DEFAULT '[]' COMMENT '购物车id', + `cart_id` text COMMENT '购物车id', `freight_price` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '运费金额', `total_num` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '订单商品总数', `total_price` decimal(8,2) UNSIGNED NOT NULL DEFAULT '0.00' COMMENT '订单总价',