From 161da9e1ff249bcec5281991d2969bf4e995f2f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Thu, 11 Mar 2021 18:28:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=A2=E5=8D=95=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/data/command/UserUpgrade.php | 4 +- app/data/controller/ShopOrder.php | 2 +- app/data/controller/ShopOrderSend.php | 2 +- app/data/controller/api/auth/Order.php | 2 +- app/data/service/OrderService.php | 2 +- app/data/service/PaymentService.php | 2 +- app/data/service/RebateCurrentService.php | 10 +-- app/data/service/UpgradeService.php | 79 +++++++++++++++++++++++ app/data/service/UserService.php | 66 ------------------- 9 files changed, 91 insertions(+), 78 deletions(-) create mode 100644 app/data/service/UpgradeService.php diff --git a/app/data/command/UserUpgrade.php b/app/data/command/UserUpgrade.php index 73ca1c31c..e035ad846 100644 --- a/app/data/command/UserUpgrade.php +++ b/app/data/command/UserUpgrade.php @@ -2,7 +2,7 @@ namespace app\data\command; -use app\data\service\UserService; +use app\data\service\UpgradeService; use think\admin\Command; use think\admin\Exception; use think\console\Input; @@ -33,7 +33,7 @@ class UserUpgrade extends Command [$total, $count] = [$this->app->db->name('DataUser')->count(), 0]; foreach ($this->app->db->name('DataUser')->field('id')->cursor() as $user) { $this->queue->message($total, ++$count, "正在计算用户 [{$user['id']}] 的等级"); - UserService::instance()->syncLevel($user['id']); + UpgradeService::instance()->syncLevel($user['id']); $this->queue->message($total, $count, "完成计算用户 [{$user['id']}] 的等级", 1); } } catch (\Exception $exception) { diff --git a/app/data/controller/ShopOrder.php b/app/data/controller/ShopOrder.php index 3f4c50cc6..e2c5ead22 100644 --- a/app/data/controller/ShopOrder.php +++ b/app/data/controller/ShopOrder.php @@ -86,7 +86,7 @@ class ShopOrder extends Controller { UserService::instance()->buildByUid($data); UserService::instance()->buildByUid($data, 'puid1', 'fromer'); - OrderService::instance()->buildOrderData($data); + OrderService::instance()->buildData($data); foreach ($data as &$vo) $vo['payment_name'] = PaymentService::name($vo['payment_type']); } diff --git a/app/data/controller/ShopOrderSend.php b/app/data/controller/ShopOrderSend.php index a31503011..0deaae0fa 100644 --- a/app/data/controller/ShopOrderSend.php +++ b/app/data/controller/ShopOrderSend.php @@ -66,7 +66,7 @@ class ShopOrderSend extends Controller */ protected function _index_page_filter(array &$data) { - OrderService::instance()->buildOrderData($data, false); + OrderService::instance()->buildData($data, false); $orders = array_unique(array_column($data, 'order_no')); $orderList = $this->app->db->name('ShopOrder')->whereIn('order_no', $orders)->column('*', 'order_no'); foreach ($data as &$vo) $vo['order'] = $orderList[$vo['order_no']] ?? []; diff --git a/app/data/controller/api/auth/Order.php b/app/data/controller/api/auth/Order.php index f69036b58..856075f4f 100644 --- a/app/data/controller/api/auth/Order.php +++ b/app/data/controller/api/auth/Order.php @@ -40,7 +40,7 @@ class Order extends Auth $map = ['uid' => $this->uuid, 'deleted' => 0]; $query = $this->_query('ShopOrder')->in('status')->equal('order_no'); $result = $query->where($map)->order('id desc')->page(true, false, false, 20); - if (count($result['list']) > 0) OrderService::instance()->buildOrderData($result['list']); + if (count($result['list']) > 0) OrderService::instance()->buildData($result['list']); $this->success('获取订单数据成功!', $result); } diff --git a/app/data/service/OrderService.php b/app/data/service/OrderService.php index 81cc928a1..1735f92cb 100644 --- a/app/data/service/OrderService.php +++ b/app/data/service/OrderService.php @@ -45,7 +45,7 @@ class OrderService extends Service * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ - public function buildOrderData(array &$data = [], $fromer = true): array + public function buildData(array &$data = [], $fromer = true): array { // 关联发货信息 $nobs = array_unique(array_column($data, 'order_no')); diff --git a/app/data/service/PaymentService.php b/app/data/service/PaymentService.php index 72e5d5cdb..5c353f028 100644 --- a/app/data/service/PaymentService.php +++ b/app/data/service/PaymentService.php @@ -8,9 +8,9 @@ use app\data\service\payment\EmptyPaymentService; use app\data\service\payment\JoinpayPaymentService; use app\data\service\payment\VoucherPaymentService; use app\data\service\payment\WechatPaymentService; +use think\admin\Exception; use think\App; use think\Container; -use think\admin\Exception; /** * 支付基础服务 diff --git a/app/data/service/RebateCurrentService.php b/app/data/service/RebateCurrentService.php index cb02cce3d..6f70fe9f1 100644 --- a/app/data/service/RebateCurrentService.php +++ b/app/data/service/RebateCurrentService.php @@ -2,8 +2,8 @@ namespace app\data\service; -use think\admin\Service; use think\admin\Exception; +use think\admin\Service; /** * 实时返利服务 @@ -128,7 +128,7 @@ class RebateCurrentService extends Service 'uid' => $this->from1['id'], 'name' => $name, 'amount' => $amount, 'order_amount' => $this->order['amount_total'], ])); // 更新用户奖利金额 - UserService::instance()->syncLevel($this->from1['id']); + UpgradeService::instance()->syncLevel($this->from1['id']); } return true; } @@ -160,7 +160,7 @@ class RebateCurrentService extends Service 'uid' => $this->from1['id'], 'name' => $name, 'amount' => $amount, 'order_amount' => $this->order['amount_total'], ])); // 更新用户奖利金额 - UserService::instance()->syncLevel($this->from1['id']); + UpgradeService::instance()->syncLevel($this->from1['id']); } return true; } @@ -185,7 +185,7 @@ class RebateCurrentService extends Service 'uid' => $this->from1['id'], 'name' => $name, 'amount' => $amount, 'order_amount' => $this->order['amount_total'], ])); // 更新用户奖利金额 - UserService::instance()->syncLevel($this->from1['id']); + UpgradeService::instance()->syncLevel($this->from1['id']); } return true; } @@ -209,7 +209,7 @@ class RebateCurrentService extends Service 'uid' => $this->from2['id'], 'name' => $name, 'amount' => $amount, 'order_amount' => $this->order['amount_total'], ])); // 更新代理奖利金额 - UserService::instance()->syncLevel($this->from2['id']); + UpgradeService::instance()->syncLevel($this->from2['id']); } return true; } diff --git a/app/data/service/UpgradeService.php b/app/data/service/UpgradeService.php new file mode 100644 index 000000000..b5f1d103b --- /dev/null +++ b/app/data/service/UpgradeService.php @@ -0,0 +1,79 @@ +app->db->name('DataUser')->where(['id' => $uid])->find(); + if (empty($user)) return true; + [$vipName, $vipNumber] = ['普通用户', 0]; + // 统计历史数据 + $teamsDirect = $this->app->db->name('DataUser')->where(['pid1' => $uid])->count(); + $teamsIndirect = $this->app->db->name('DataUser')->where(['pid2' => $uid])->count(); + $teamsUsers = $this->app->db->name('DataUser')->where(['pid1|pid2' => $uid])->count(); + $orderAmount = $this->app->db->name('ShopOrder')->where("uid={$uid} and status>=4")->sum('amount_total'); + // 计算用户级别 + foreach ($this->app->db->name('DataUserUpgrade')->where(['status' => 1])->order('number desc')->cursor() as $item) { + $l1 = empty($item['goods_vip_status']) || $user['buy_vip_entry'] > 0; + $l2 = empty($item['teams_users_status']) || $item['teams_users_number'] <= $teamsUsers; + $l3 = empty($item['order_amount_status']) || $item['order_amount_number'] <= $orderAmount; + $l4 = empty($item['teams_direct_status']) || $item['teams_direct_number'] <= $teamsDirect; + $l5 = empty($item['teams_indirect_status']) || $item['teams_indirect_number'] <= $teamsIndirect; + if ( + ($item['upgrade_type'] == 0 && ($l1 || $l2 || $l3 || $l4 || $l5)) /* 满足任何条件可以等级 */ + || + ($item['upgrade_type'] == 1 && ($l1 && $l2 && $l3 && $l4 && $l5)) /* 满足所有条件可以等级 */ + ) { + [$vipName, $vipNumber] = [$item['name'], $item['number']]; + break; + } + } + // 购买商品升级 + $query = $this->app->db->name('ShopOrderItem')->alias('b')->join('shop_order a', 'b.order_no=a.order_no'); + $tmpNumber = $query->whereRaw("a.uid={$uid} and a.payment_status=1 and a.status>=4 and b.vip_entry=1")->max('b.vip_number'); + if ($tmpNumber > $vipNumber) { + $map = ['status' => 1, 'number' => $tmpNumber]; + $upgrade = $this->app->db->name('DataUserUpgrade')->where($map)->find(); + if (!empty($upgrade)) [$vipName, $vipNumber] = [$upgrade['name'], $upgrade['number']]; + } + // 统计订单金额 + $orderAmountTotal = $this->app->db->name('ShopOrder')->whereRaw("uid={$uid} and status>=4")->sum('amount_goods'); + $teamsAmountDirect = $this->app->db->name('ShopOrder')->whereRaw("puid1={$uid} and status>=4")->sum('amount_goods'); + $teamsAmountIndirect = $this->app->db->name('ShopOrder')->whereRaw("puid2={$uid} and status>=4")->sum('amount_goods'); + // 更新用户数据 + $data = [ + 'vip_name' => $vipName, + 'vip_number' => $vipNumber, + 'teams_users_total' => $teamsUsers, + 'teams_users_direct' => $teamsDirect, + 'teams_users_indirect' => $teamsIndirect, + 'teams_amount_total' => $teamsAmountDirect + $teamsAmountIndirect, + 'teams_amount_direct' => $teamsAmountDirect, + 'teams_amount_indirect' => $teamsAmountIndirect, + 'order_amount_total' => $orderAmountTotal, + ]; + if ($data['vip_number'] !== $user['vip_number']) { + $data['vip_datetime'] = date('Y-m-d H:i:s'); + } + $this->app->db->name('DataUser')->where(['id' => $uid])->update($data); + return ($parent && $user['pid2'] > 0) ? $this->syncLevel($user['pid2'], false) : true; + } +} \ No newline at end of file diff --git a/app/data/service/UserService.php b/app/data/service/UserService.php index ad1a75ef4..e06747925 100644 --- a/app/data/service/UserService.php +++ b/app/data/service/UserService.php @@ -209,72 +209,6 @@ class UserService extends Service } } - /** - * 同步计算用户级别 - * @param integer $uid 指定用户UID - * @param boolean $parent 同步计算上级 - * @return boolean - * @throws \think\db\exception\DataNotFoundException - * @throws \think\db\exception\DbException - * @throws \think\db\exception\ModelNotFoundException - */ - public function syncLevel(int $uid, bool $parent = true): bool - { - $user = $this->app->db->name('DataUser')->where(['id' => $uid])->find(); - if (empty($user)) return true; - [$vipName, $vipNumber] = ['普通用户', 0]; - // 统计历史数据 - $teamsDirect = $this->app->db->name('DataUser')->where(['pid1' => $uid])->count(); - $teamsIndirect = $this->app->db->name('DataUser')->where(['pid2' => $uid])->count(); - $teamsUsers = $this->app->db->name('DataUser')->where(['pid1|pid2' => $uid])->count(); - $orderAmount = $this->app->db->name('ShopOrder')->where("uid={$uid} and status>=4")->sum('amount_total'); - // 计算用户级别 - foreach ($this->app->db->name('DataUserUpgrade')->where(['status' => 1])->order('number desc')->cursor() as $item) { - $l1 = empty($item['goods_vip_status']) || $user['buy_vip_entry'] > 0; - $l2 = empty($item['teams_users_status']) || $item['teams_users_number'] <= $teamsUsers; - $l3 = empty($item['order_amount_status']) || $item['order_amount_number'] <= $orderAmount; - $l4 = empty($item['teams_direct_status']) || $item['teams_direct_number'] <= $teamsDirect; - $l5 = empty($item['teams_indirect_status']) || $item['teams_indirect_number'] <= $teamsIndirect; - if ( - ($item['upgrade_type'] == 0 && ($l1 || $l2 || $l3 || $l4 || $l5)) /* 满足任何条件可以等级 */ - || - ($item['upgrade_type'] == 1 && ($l1 && $l2 && $l3 && $l4 && $l5)) /* 满足所有条件可以等级 */ - ) { - [$vipName, $vipNumber] = [$item['name'], $item['number']]; - break; - } - } - // 购买商品升级 - $query = $this->app->db->name('ShopOrderItem')->alias('b')->join('shop_order a', 'b.order_no=a.order_no'); - $tmpNumber = $query->whereRaw("a.uid={$uid} and a.payment_status=1 and a.status>=4 and b.vip_entry=1")->max('b.vip_number'); - if ($tmpNumber > $vipNumber) { - $map = ['status' => 1, 'number' => $tmpNumber]; - $upgrade = $this->app->db->name('DataUserUpgrade')->where($map)->find(); - if (!empty($upgrade)) [$vipName, $vipNumber] = [$upgrade['name'], $upgrade['number']]; - } - // 统计订单金额 - $orderAmountTotal = $this->app->db->name('ShopOrder')->whereRaw("uid={$uid} and status>=4")->sum('amount_goods'); - $teamsAmountDirect = $this->app->db->name('ShopOrder')->whereRaw("puid1={$uid} and status>=4")->sum('amount_goods'); - $teamsAmountIndirect = $this->app->db->name('ShopOrder')->whereRaw("puid2={$uid} and status>=4")->sum('amount_goods'); - // 更新用户数据 - $data = [ - 'vip_name' => $vipName, - 'vip_number' => $vipNumber, - 'teams_users_total' => $teamsUsers, - 'teams_users_direct' => $teamsDirect, - 'teams_users_indirect' => $teamsIndirect, - 'teams_amount_total' => $teamsAmountDirect + $teamsAmountIndirect, - 'teams_amount_direct' => $teamsAmountDirect, - 'teams_amount_indirect' => $teamsAmountIndirect, - 'order_amount_total' => $orderAmountTotal, - ]; - if ($data['vip_number'] !== $user['vip_number']) { - $data['vip_datetime'] = date('Y-m-d H:i:s'); - } - $this->app->db->name('DataUser')->where(['id' => $uid])->update($data); - return ($parent && $user['pid2'] > 0) ? $this->syncLevel($user['pid2'], false) : true; - } - /** * 获取令牌的认证值 * @return string