| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722 |
- <?php
- namespace common\models\user;
- use common\enums\AddonsEnum;
- use common\enums\OrderStatusEnum;
- use common\enums\RabbitMqEnum;
- use common\enums\RefundTypeEnum;
- use common\enums\StatusEnum;
- use common\models\mall\Mall;
- use common\models\mall\MallAddons;
- use common\models\order\Order;
- use common\models\order\OrderDetail;
- use common\models\order\OrderRefund;
- use common\models\user\UserTeamProfitStatisticsLog;
- use Exception;
- use Yii;
- /**
- * This is the model class for table "qimall_user_team_profit_statistics".
- *
- * @property int $id
- * @property int $mall_id 商城id
- * @property int $user_id 用户id
- * @property float $children_order_pay_profit 下级团队订单支付总利润(不包含自己)
- * @property float $team_order_pay_profit 团队订单支付总利润(包含自己)
- * @property float $children_order_finish_profit 下级团队订单完成总利润(不包含自己)
- * @property float $team_order_finish_profit 团队订单完成总利润(包含自己)
- * @property int|null $created_at 添加时间
- * @property int|null $updated_at 修改时间
- */
- class UserTeamProfitStatistics extends \common\models\base\BaseActiveRecord
- {
- /**
- * {@inheritdoc}
- */
- public static function tableName()
- {
- return 'qimall_user_team_profit_statistics';
- }
- /**
- * {@inheritdoc}
- */
- public function rules()
- {
- return [
- [['mall_id', 'user_id', 'children_order_pay_profit', 'team_order_pay_profit', 'children_order_finish_profit', 'team_order_finish_profit'], 'required'],
- [['mall_id', 'user_id', 'created_at', 'updated_at'], 'integer'],
- [['children_order_pay_profit', 'team_order_pay_profit', 'children_order_finish_profit', 'team_order_finish_profit'], 'number'],
- [['children_order_pay_achievement', 'team_order_pay_achievement', 'children_order_finish_achievement', 'team_order_finish_achievement'], 'number'],
- [['children_order_pay_goods_achievement', 'team_order_pay_goods_achievement', 'children_order_finish_goods_achievement', 'team_order_finish_goods_achievement'], 'number'],
- ];
- }
- /**
- * {@inheritdoc}
- */
- public function attributeLabels()
- {
- return [
- 'id' => 'ID',
- 'mall_id' => 'Mall ID',
- 'user_id' => 'User ID',
- 'children_order_pay_profit' => 'Children Order Pay Profit',
- 'team_order_pay_profit' => 'Team Order Pay Profit',
- 'children_order_finish_profit' => 'Children Order Finish Profit',
- 'team_order_finish_profit' => 'Team Order Finish Profit',
- 'created_at' => 'Created At',
- 'updated_at' => 'Updated At',
- ];
- }
- public static function setData(array $data)
- {
- try {
- $model = self::findOne(['user_id' => $data['user_id']]);
- if (empty($model)) {
- $model = new self();
- $model->loadDefaultValues();
- }
- if (!$model->load($data, '') || !$model->save()) {
- throw new \Exception($model->getErrorMessage());
- }
- return $model;
- } catch (\Exception $e) {
- self::setStaticError($e->getMessage());
- return false;
- }
- }
- public static function calculatePerformance($params)
- {
- try {
- $mall_id = $params['mall_id'];
- $user_id = $params['user_id'];
- $order_id = $params['order_id'];
- $is_virtual = $params['is_virtual'];
- // $type = $params['type'] ?? 0;
- //获取订单信息
- $order = Order::getOne([
- ['mall_id' => $mall_id],
- ['user_id' => $user_id],
- ['id' => $order_id],
- // ['order_status' => [OrderStatusEnum::PAY, OrderStatusEnum::SHIPMENTS, OrderStatusEnum::SING, OrderStatusEnum::ACCOMPLISH]]
- ], true, ['detail']);
- //查无订单,则中止
- if (empty($order)) return true;
- // 判断是否开启
- $config = Yii::$app->services->setting->mall->get($mall_id, 'order');
- $achievementGoodsIds = [];
- // 判断是否开启订单业绩商品:如果开启,则获取指定商品ID。不开则获取所有商品ID
- if (!empty($config['is_designated_achievement_goods'])) {
- $achievementGoodsIds = json_decode($config['achievement_goods_ids'], true);
- }
- $children_order_pay_profit = 0;
- $team_order_pay_profit = 0;
- $children_order_finish_profit = 0;
- $team_order_finish_profit = 0;
- $children_order_pay_achievement = 0;
- $team_order_pay_achievement = 0;
- $children_order_finish_achievement = 0;
- $team_order_finish_achievement = 0;
- $achievement_sum = 0;
- $pay_money = 0;
- $original_goods_price = 0;
- $children_order_pay_goods_achievement = 0;
- $team_order_pay_goods_achievement = 0;
- $children_order_finish_goods_achievement = 0;
- $team_order_finish_goods_achievement = 0;
- foreach ($order['detail'] as $key => $value) {
- // 判断是否开启订单业绩商品
- if (!empty($config['is_designated_achievement_goods']) && !in_array($value['goods_id'], $achievementGoodsIds)) {
- // 如果开启了订单业绩商品 并且 当前商品不在订单业绩商品列表中则跳过
- continue;
- }
- $performance = $value['goods_price'] - bcmul($value['cost_price'], $value['num'], 2);
- $pay_money += $value['goods_price'] ?? 0;
- $original_goods_price += $value['original_goods_price'] ?? 0;
- if ($performance > 0 || $pay_money > 0 || $original_goods_price > 0) {
- $achievement_sum += $performance;
- //记录累加日志
- $log_data = [
- 'mall_id' => $mall_id,
- 'goods_id' => $value['goods_id'],
- 'order_detail_id' => $value['id'],
- 'order_id' => $order_id,
- 'status' => StatusEnum::ENABLED,
- ];
- UserTeamProfitStatisticsLog::setData($log_data);
- }
- }
- //利润业绩为0,实付金额为0,则不需要累计数据
- if ($achievement_sum <= 0 && $pay_money <= 0 && $original_goods_price <= 0) return true;
- //数据累计
- /* 如果订单是虚拟订单时。订单在次方法之前已经将订单状态改为完成。此处数据统计永远无法统计订单支付数据。
- 所以需要修改订单为虚拟订单时。需要统计支付数据此参数为支付时使用 */
- if ($is_virtual) {
- $children_order_pay_profit += $achievement_sum;
- $team_order_pay_profit += $achievement_sum;
- $children_order_pay_achievement += $pay_money;
- $team_order_pay_achievement += $pay_money;
- $children_order_pay_goods_achievement += $original_goods_price;
- $team_order_pay_goods_achievement += $original_goods_price;
- } else {
- if ($order['order_status'] == OrderStatusEnum::ACCOMPLISH) {
- $children_order_finish_profit += $achievement_sum;
- $team_order_finish_profit += $achievement_sum;
- $children_order_finish_achievement += $pay_money;
- $team_order_finish_achievement += $pay_money;
- $children_order_finish_goods_achievement += $original_goods_price;
- $team_order_finish_goods_achievement += $original_goods_price;
- //用作累计历史订单数据,正常下单累计数据是type = 0
- // if ($type == 1) {
- // $children_order_pay_profit += $achievement_sum;
- // $team_order_pay_profit += $achievement_sum;
- // }
- } else {
- $children_order_pay_profit += $achievement_sum;
- $team_order_pay_profit += $achievement_sum;
- $children_order_pay_achievement += $pay_money;
- $team_order_pay_achievement += $pay_money;
- $children_order_pay_goods_achievement += $original_goods_price;
- $team_order_pay_goods_achievement += $original_goods_price;
- }
- }
- //获取上级数据
- $parent_id_arr = UserPartitionRelationship::getParentIdArr($user_id);
- $parent_id_arr[] = $user_id;
- //获取当前用户的订单利润数据
- $list = self::lists([
- 'where' => [
- ['mall_id' => $mall_id],
- ['user_id' => $parent_id_arr]
- ],
- 'index' => 'user_id',
- ], false);
- //用户订单利润数据操作
- foreach ($parent_id_arr as $key => $value) {
- $item = $list[$value];
- if (empty($item)) {
- $item = new UserTeamProfitStatistics();
- $item->loadDefaultValues();
- $item->mall_id = $mall_id;
- $item->user_id = $value;
- $item->team_order_pay_profit = 0;
- $item->team_order_finish_profit = 0;
- $item->children_order_pay_profit = 0;
- $item->children_order_finish_profit = 0;
- $item->team_order_pay_achievement = 0;
- $item->team_order_finish_achievement = 0;
- $item->children_order_pay_achievement = 0;
- $item->children_order_finish_achievement = 0;
- $item->children_order_pay_goods_achievement = 0;
- $item->team_order_pay_goods_achievement = 0;
- $item->children_order_finish_goods_achievement = 0;
- $item->team_order_finish_goods_achievement = 0;
- }
- //订单正常累加
- $item->team_order_pay_profit += $team_order_pay_profit;
- $item->team_order_finish_profit += $team_order_finish_profit;
- $item->team_order_pay_achievement += $team_order_pay_achievement;
- $item->team_order_finish_achievement += $team_order_finish_achievement;
- $item->team_order_pay_goods_achievement += $team_order_pay_goods_achievement;
- $item->team_order_finish_goods_achievement += $team_order_finish_goods_achievement;
- if ($value != $user_id) {
- $item->children_order_pay_profit += $children_order_pay_profit;
- $item->children_order_finish_profit += $children_order_finish_profit;
- $item->children_order_pay_achievement += $children_order_pay_achievement;
- $item->children_order_finish_achievement += $children_order_finish_achievement;
- $item->children_order_pay_goods_achievement += $children_order_pay_goods_achievement;
- $item->children_order_finish_goods_achievement += $children_order_finish_goods_achievement;
- }
- if (!$item->save()) var_dump('记录用户利润信息失败:user_id:'.$value.',order_id:'. $order_id);
- }
- // if ($type != 1) {
- //再次执行会员升级任务
- \Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_ORDER, RabbitMqEnum::ORDER_QUEUE, ['id' => $order_id], \common\listeners\user\UserUpgradeListener::class, 'handleSync');
- // }
- return true;
- } catch (\Exception $e) {
- throw new Exception('统计用户订单利润失败:'. $e->getMessage());
- }
- }
- public static function calculatePerformanceRefund($params)
- {
- try {
- $mall_id = $params['mall_id'];
- $user_id = $params['user_id'];
- $refund_id = $params['refund_id'];
- $refund_data = OrderRefund::getOne([
- ['mall_id' => $mall_id],
- ['user_id' => $user_id],
- ['id' => $refund_id],
- ], true, ['orderDetail']);
- if (empty($refund_data)) throw new Exception('查无此售后订单');
- if ($refund_data['type'] == RefundTypeEnum::EXCHANGE_GOODS) {
- return true;
- }
- $parent_id_arr = UserPartitionRelationship::getParentIdArr($user_id);
- $parent_id_arr[] = $user_id;
- //查找该商品是否已增加利润业绩
- $log_data = UserTeamProfitStatisticsLog::getOne([
- ['mall_id' => $mall_id],
- ['goods_id' => $refund_data['orderDetail']['goods_id']],
- ['order_detail_id' => $refund_data['orderDetail']['id']],
- ['status' => StatusEnum::ENABLED],
- ], true);
- if (empty($log_data)) throw new Exception('该售后商品未曾为用户增加利润业绩');
- //获取订单详情数据
- $list = self::lists([
- 'where' => [
- ['mall_id' => $mall_id],
- ['user_id' => $parent_id_arr]
- ],
- ], false);
- $achievement_sum = $refund_data['orderDetail']['goods_price'] - bcmul($refund_data['orderDetail']['cost_price'], $refund_data['orderDetail']['num'], 2);
- $pay_money = $refund_data['orderDetail']['goods_price'];
- $original_goods_price = $refund_data['orderDetail']['original_goods_price'];
- if ($achievement_sum <= 0 && $pay_money <= 0) return true;
- foreach ($list as $key => $value) {
- if ($value['user_id'] != $user_id) {
- $value->children_order_pay_profit -= $achievement_sum;
- $value->children_order_pay_achievement -= $pay_money;
- }
- $value->team_order_pay_profit -= $achievement_sum;
- $value->team_order_pay_achievement -= $pay_money;
- $value->team_order_pay_goods_achievement -= $original_goods_price;
- if (!$value->save()) var_dump('售后扣减业绩失败:user_id:'. $user_id.',refund_id:'.$refund_id);
- }
- } catch (\Exception $e) {
- throw new Exception($e->getMessage());
- }
- }
- //数据迁移累计历史订单利润
- public static function cumulativeOrderProfit($params)
- {
- try {
- $type = $params['type'] ?? 0;
- //获取商城id
- $mall_list = Mall::getEnableMallList(true);
- if(!empty($mall_list)){
- foreach ($mall_list as $mall){
- // var_dump('商城:'. $mall['id']);
- self::orderProfit(['mall_id' => $mall['id'], 'type' => $type]);
- }
- }
- return true;
- } catch (\Exception $e) {
- throw new Exception();
- }
- }
- //处理历史订单数据
- public static function orderProfit($params)
- {
- try {
- // 判断是否开启
- $config = Yii::$app->services->setting->mall->get($params['mall_id'], 'order');
- $achievementGoodsIds = [];
- if (!empty($config['is_designated_achievement_goods'])) {
- $achievementGoodsIds = json_decode($config['achievement_goods_ids'], true);
- }
- // 重置用户团队业绩数据
- UserTeamProfitStatisticsLog::updateAll(['status' => StatusEnum::DELETE], ['mall_id' => $params['mall_id'], 'status' => StatusEnum::ENABLED]);
- UserTeamProfitStatistics::updateAll([
- 'children_order_pay_profit' => 0,
- 'team_order_pay_profit' => 0,
- 'children_order_finish_profit' => 0,
- 'team_order_finish_profit' => 0,
- 'children_order_pay_achievement' => 0,
- 'team_order_pay_achievement' => 0,
- 'children_order_finish_achievement' => 0,
- 'team_order_finish_achievement' => 0
- ],
- ['mall_id' => $params['mall_id']]
- );
- // 查询数据更新统计
- $orderDetailModel = OrderDetail::find()
- ->where(['mall_id' => $params['mall_id'], 'status' => StatusEnum::ENABLED])
- ->andWhere(['order_status' => [OrderStatusEnum::PAY, OrderStatusEnum::SHIPMENTS, OrderStatusEnum::SING, OrderStatusEnum::ACCOMPLISH, OrderStatusEnum::TAKE, OrderStatusEnum::TAKE_FINISH]])
- ->select('id, user_id, mall_id, order_status, goods_price, cost_price, num');
- if (!empty($config['is_designated_achievement_goods'])) {
- $orderDetailModel->andWhere(['goods_id' => $achievementGoodsIds]);
- }
- foreach ($orderDetailModel->asArray()->batch(1000) as $orderDetails) {
- foreach ($orderDetails as $orderDetail) {
- $children_order_pay_profit = 0; // 下级支付订单业绩 (不包含自己)
- $team_order_pay_profit = 0; // 团队支付订单业绩(包含自己)
- $children_order_finish_profit = 0; // 下级完成订单业绩 (不包含自己)
- $team_order_finish_profit = 0; // 团队完成订单业绩(包含自己)
- $children_order_pay_achievement = 0; // 下级支付订单业绩(实付金额) (不包含自己)
- $team_order_pay_achievement = 0; // 团队支付订单业绩(实付金额) (包含自己)
- $children_order_finish_achievement = 0; // 下级完成订单业绩(实付金额) (不包含自己)
- $team_order_finish_achievement = 0; // 团队完成订单业绩(实付金额) (包含自己)
- // 获取当前订单价对应的业绩
- $achievementMoney = bcsub($orderDetail['goods_price'], $orderDetail['cost_price'] * $orderDetail['num'], 2);
- $pay_money = $orderDetail['goods_price'];
- if ($achievementMoney > 0) { // 如果大于0进行累加计算
- $children_order_pay_profit = $achievementMoney;
- $team_order_pay_profit = $achievementMoney;
- if ($orderDetail['order_status'] == OrderStatusEnum::ACCOMPLISH) {
- $children_order_finish_profit = $achievementMoney;
- $team_order_finish_profit = $achievementMoney;
- }
- }
- //实付金额
- if ($pay_money > 0) {
- $children_order_pay_achievement = $pay_money;
- $team_order_pay_achievement = $pay_money;
- if ($orderDetail['order_status'] == OrderStatusEnum::ACCOMPLISH) {
- $children_order_finish_achievement = $pay_money;
- $team_order_finish_achievement = $pay_money;
- }
- }
- // 获取用户上级
- $parent_id_arr = UserPartitionRelationship::getParentIdArr($orderDetail['user_id']);
- if (empty($parent_id_arr)) {
- $parent_id_arr = [];
- }
- $parent_id_arr[] = $orderDetail['user_id'];
- $userTeamList = self::find()
- ->where(['user_id' => $parent_id_arr, 'mall_id' => $params['mall_id']])
- ->indexBy('user_id')
- ->all();
- foreach ($parent_id_arr as $user_id) {
- $userTeamModel = $userTeamList[$user_id] ?? null;
- if (empty($userTeamModel)) { // 如果没有则创建
- $userTeamModel = new UserTeamProfitStatistics();
- $userTeamModel->loadDefaultValues();
- $userTeamModel->mall_id = $params['mall_id'];
- $userTeamModel->user_id = $user_id;
- //商品利润
- $userTeamModel->team_order_pay_profit = 0;
- $userTeamModel->team_order_finish_profit = 0;
- $userTeamModel->children_order_pay_profit = 0;
- $userTeamModel->children_order_finish_profit = 0;
- //实付金额
- $userTeamModel->team_order_pay_achievement = 0;
- $userTeamModel->team_order_finish_achievement = 0;
- $userTeamModel->children_order_pay_achievement = 0;
- $userTeamModel->children_order_finish_achievement = 0;
- }
- //商品利润
- $userTeamModel->team_order_pay_profit += $team_order_pay_profit;
- $userTeamModel->team_order_finish_profit += $team_order_finish_profit;
- //实付金额
- $userTeamModel->team_order_pay_achievement += $team_order_pay_achievement;
- $userTeamModel->team_order_finish_achievement += $team_order_finish_achievement;
- if ($user_id != $orderDetail['user_id']) { // 如果不是自己那么就是追加到父级的业绩中
- //商品利润
- $userTeamModel->children_order_pay_profit += $children_order_pay_profit;
- $userTeamModel->children_order_finish_profit += $children_order_finish_profit;
- //实付金额
- $userTeamModel->children_order_pay_achievement += $children_order_pay_achievement;
- $userTeamModel->children_order_finish_achievement += $children_order_finish_achievement;
- }
- if (!$userTeamModel->save()) {
- var_dump("团队业绩统计失败");
- }
- }
- }
- }
- return true;
- } catch (\Exception $e) {
- print_r($e->getMessage());exit;
- throw new Exception($e->getMessage());
- }
- }
- //数据迁移累计历史订单业绩
- public static function cumulativeOrderAchievement($params)
- {
- try {
- $type = $params['type'] ?? 0;
- //获取商城id
- $mall_list = Mall::getEnableMallList(true);
- if(!empty($mall_list)){
- foreach ($mall_list as $mall){
- // var_dump('商城:'. $mall['id']);
- self::orderAchievement(['mall_id' => $mall['id'], 'type' => $type]);
- }
- }
- return true;
- } catch (\Exception $e) {
- throw new Exception();
- }
- }
- //处理历史订单实付金额数据
- public static function orderAchievement($params)
- {
- try {
- // 判断是否开启
- $config = Yii::$app->services->setting->mall->get($params['mall_id'], 'order');
- $achievementGoodsIds = [];
- if (!empty($config['is_designated_achievement_goods'])) {
- $achievementGoodsIds = json_decode($config['achievement_goods_ids'], true);
- }
-
- // 重置用户团队业绩数据
- UserTeamProfitStatisticsLog::updateAll(['status' => StatusEnum::DELETE], ['mall_id' => $params['mall_id'], 'status' => StatusEnum::ENABLED]);
- UserTeamProfitStatistics::updateAll([
- 'children_order_pay_achievement' => 0,
- 'team_order_pay_achievement' => 0,
- 'children_order_finish_achievement' => 0,
- 'team_order_finish_achievement' => 0
- ],
- ['mall_id' => $params['mall_id']]
- );
-
- // 查询数据更新统计
-
- $orderDetailModel = OrderDetail::find()
- ->where(['mall_id' => $params['mall_id'], 'status' => StatusEnum::ENABLED])
- ->andWhere(['order_status' => [OrderStatusEnum::PAY, OrderStatusEnum::SHIPMENTS, OrderStatusEnum::SING, OrderStatusEnum::ACCOMPLISH, OrderStatusEnum::TAKE, OrderStatusEnum::TAKE_FINISH]])
- ->select('id, user_id, mall_id, order_status, goods_price, cost_price, num');
- if (!empty($config['is_designated_achievement_goods'])) {
- $orderDetailModel->andWhere(['goods_id' => $achievementGoodsIds]);
- }
- foreach ($orderDetailModel->asArray()->batch(1000) as $orderDetails) {
- foreach ($orderDetails as $orderDetail) {
- $children_order_pay_achievement = 0; // 下级支付订单业绩(实付金额) (不包含自己)
- $team_order_pay_achievement = 0; // 团队支付订单业绩(实付金额) (包含自己)
- $children_order_finish_achievement = 0; // 下级完成订单业绩(实付金额) (不包含自己)
- $team_order_finish_achievement = 0; // 团队完成订单业绩(实付金额) (包含自己)
- // 获取当前订单价对应的业绩
- $pay_money = $orderDetail['goods_price'];
- //实付金额
- if ($pay_money > 0) {
- $children_order_pay_achievement = $pay_money;
- $team_order_pay_achievement = $pay_money;
- if ($orderDetail['order_status'] == OrderStatusEnum::ACCOMPLISH) {
- $children_order_finish_achievement = $pay_money;
- $team_order_finish_achievement = $pay_money;
- }
- }
-
- // 获取用户上级
- $parent_id_arr = UserPartitionRelationship::getParentIdArr($orderDetail['user_id']);
- if (empty($parent_id_arr)) {
- $parent_id_arr = [];
- }
- $parent_id_arr[] = $orderDetail['user_id'];
- $userTeamList = self::find()
- ->where(['user_id' => $parent_id_arr, 'mall_id' => $params['mall_id']])
- ->indexBy('user_id')
- ->all();
- foreach ($parent_id_arr as $user_id) {
- $userTeamModel = $userTeamList[$user_id] ?? null;
- if (empty($userTeamModel)) { // 如果没有则创建
- $userTeamModel = new UserTeamProfitStatistics();
- $userTeamModel->loadDefaultValues();
- $userTeamModel->mall_id = $params['mall_id'];
- $userTeamModel->user_id = $user_id;
- //商品利润
- $userTeamModel->team_order_pay_profit = 0;
- $userTeamModel->team_order_finish_profit = 0;
- $userTeamModel->children_order_pay_profit = 0;
- $userTeamModel->children_order_finish_profit = 0;
- //实付金额
- $userTeamModel->team_order_pay_achievement = 0;
- $userTeamModel->team_order_finish_achievement = 0;
- $userTeamModel->children_order_pay_achievement = 0;
- $userTeamModel->children_order_finish_achievement = 0;
- }
- //实付金额
- $userTeamModel->team_order_pay_achievement += $team_order_pay_achievement;
- $userTeamModel->team_order_finish_achievement += $team_order_finish_achievement;
- if ($user_id != $orderDetail['user_id']) { // 如果不是自己那么就是追加到父级的业绩中
- //实付金额
- $userTeamModel->children_order_pay_achievement += $children_order_pay_achievement;
- $userTeamModel->children_order_finish_achievement += $children_order_finish_achievement;
- }
- if (!$userTeamModel->save()) {
- var_dump("团队业绩统计失败");
- }
- }
- }
- }
- return true;
- } catch (\Exception $e) {
- print_r($e->getMessage());exit;
- throw new Exception($e->getMessage());
- }
-
- }
- public static function getTeamInfo($mall_id, $user_id)
- {
- $data = [
- 'is_show' => 0,
- 'team_performance' => 0,
- 'big_market_performance' => 0,
- 'small_market_performance' => 0
- ];
- if (MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_STOCKHOLDER) == true) {
- $setting = \addons\Stockholder\common\services\BackendService::getSetting($mall_id);
- $data['is_show'] = (int)($setting['is_show_performance'] ?? 0);
- if ($data['is_show']) {
- $statistics = self::getOne([['user_id' => $user_id]], true);
- $settlement_method = (int)($setting['settlement_method'] ?? 0);
- $is_include_yourself = (int)($setting['is_include_yourself'] ?? 0);
- //获取直推用户id
- $direct_child_ids = UserPartitionRelationship::getChildIdArr($user_id, 1);
- $child_team_data = UserTeamProfitStatistics::lists([
- 'where' => [
- ['user_id' => $direct_child_ids],
- ],
- 'select' => 'id,user_id,team_order_pay_profit,team_order_finish_profit',
- ]);
- switch ($settlement_method) {
- case 0:
- $data['team_performance'] = $statistics['children_order_finish_profit'];
- if (!empty($child_team_data)) {
- $big_market_performance_arr = array_column($child_team_data, 'team_order_finish_profit');
- $data['big_market_performance'] = max($big_market_performance_arr);
- }
- break;
- case 1:
- $data['team_performance'] = $statistics['children_order_pay_profit'];
- if (!empty($child_team_data)) {
- $big_market_performance_arr = array_column($child_team_data, 'team_order_pay_profit');
- $data['big_market_performance'] = max($big_market_performance_arr);
- }
- break;
- }
- if ($data['big_market_performance'] > 0) {
- $data['small_market_performance'] = bcsub($data['team_performance'], $data['big_market_performance'], 2);
- }
- switch ($settlement_method) {
- case 0:
- if (!empty($is_include_yourself)) $data['team_performance'] = $statistics['team_order_finish_profit'];
- break;
- case 1:
- if (!empty($is_include_yourself)) $data['team_performance'] = $statistics['team_order_pay_profit'];
- break;
- }
- }
- }
- return $data;
- }
- public static function userChangeRelationship($params)
- {
- try {
- $user_id = $params['user_id'];
- $new_all_tree = $params['new_all_tree'];
- $old_all_tree = $params['old_all_tree'];
- //获取当前用户的业绩
- $user_data = UserTeamProfitStatistics::getOne([
- ['user_id' => $user_id],
- ]);
- if (!empty($new_all_tree)) {
- $parent_id_arr = UserPartitionRelationship::getParentIdArr($user_id);
- //获取当前用户的订单利润数据
- $user_list = self::lists([
- 'where' => [
- ['mall_id' => $user_data['mall_id']],
- ['user_id' => $parent_id_arr]
- ],
- 'index' => 'user_id',
- ], false);
- //用户订单利润数据操作
- foreach ($parent_id_arr as $user) {
- $item = $user_list[$user];
- if (empty($item)) {
- $item = new UserTeamProfitStatistics();
- $item->loadDefaultValues();
- $item->mall_id = $user_data['mall_id'];
- $item->user_id = $user;
- $item->team_order_pay_profit = 0;
- $item->team_order_finish_profit = 0;
- $item->children_order_pay_profit = 0;
- $item->children_order_finish_profit = 0;
- }
- //订单正常累加
- $item->team_order_pay_profit += $user_data->team_order_pay_profit;
- $item->team_order_finish_profit += $user_data->team_order_finish_profit;
- $item->children_order_pay_profit += $user_data->children_order_pay_profit;
- $item->children_order_finish_profit += $user_data->children_order_finish_profit;
- if (!$item->save()) var_dump('记录用户利润信息失败:user_id:'.$user);
- }
- }
- if (!empty($old_all_tree)) {
- $old_tree = explode(',', $old_all_tree);
- //获取用户数据
- $old_user = User::lists([
- 'where' => [
- ['base64_code' => $old_tree],
- ['status' => StatusEnum::ENABLED],
- ],
- 'index' => 'id',
- 'select' => 'id,mall_id,mobile'
- ]);
- if (!empty($old_ids)) {
- $old_ids = array_column($old_user, 'id');
- //获取当前用户的订单利润数据
- $user_list = self::lists([
- 'where' => [
- ['mall_id' => $user_data['mall_id']],
- ['user_id' => $old_ids]
- ],
- 'index' => 'user_id',
- ], false);
- //用户订单利润数据操作
- foreach ($old_ids as $old_user_id) {
- $item = $user_list[$old_user_id];
- if (empty($item)) {
- $item = new UserTeamProfitStatistics();
- $item->loadDefaultValues();
- $item->mall_id = $user_data['mall_id'];
- $item->user_id = $old_user_id;
- $item->team_order_pay_profit = 0;
- $item->team_order_finish_profit = 0;
- $item->children_order_pay_profit = 0;
- $item->children_order_finish_profit = 0;
- }
- //订单正常累加
- $item->team_order_pay_profit -= $user_data->team_order_pay_profit;
- $item->team_order_finish_profit -= $user_data->team_order_finish_profit;
- $item->children_order_pay_profit -= $user_data->children_order_pay_profit;
- $item->children_order_finish_profit -= $user_data->children_order_finish_profit;
- if (!$item->save()) var_dump('记录用户利润信息失败:user_id:'.$old_user_id);
- }
- }
- }
- } catch (\Throwable $th) {
- //throw $th;
- }
- }
- }
|