| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- <?php
- namespace common\models\user;
- use common\enums\AddonsEnum;
- use common\enums\OrderStatusEnum;
- use common\enums\RabbitMqEnum;
- use common\enums\StatusEnum;
- use common\models\mall\MallAddons;
- use common\models\order\OrderDetail;
- use Yii;
- /**
- * This is the model class for table "{{%user_team_performance_statistics}}".
- *
- * @property int $id ID
- * @property int $mall_id 商城ID
- * @property int $user_id 用户ID
- * @property float $pay_team_performance 总团队利润业绩[订单支付]
- * @property float $accomplish_team_performance 总团队利润业绩[订单完成]
- * @property float $pay_big_market_performance 大市场利润业绩[订单支付]
- * @property float $accomplish_big_market_performance 大市场利润业绩[订单完成]
- * @property float $pay_user_performance 用户利润业绩[订单支付]
- * @property float $accomplish_user_performance 用户利润业绩[订单完成]
- * @property int $status 状态[-1删除; 0禁用; 1正常]
- * @property int $created_at 创建时间
- * @property int $updated_at 更新时间
- */
- class UserTeamPerformanceStatistics extends \common\models\base\BaseActiveRecord
- {
- /**
- * {@inheritdoc}
- */
- public static function tableName()
- {
- return '{{%user_team_performance_statistics}}';
- }
- /**
- * {@inheritdoc}
- */
- public function rules()
- {
- return [
- [['mall_id', 'user_id', 'status', 'created_at', 'updated_at'], 'integer'],
- [['pay_team_performance', 'accomplish_team_performance', 'pay_big_market_performance', 'accomplish_big_market_performance', 'pay_user_performance', 'accomplish_user_performance'], 'number'],
- ];
- }
- /**
- * {@inheritdoc}
- */
- public function attributeLabels()
- {
- return [
- 'id' => 'ID',
- 'mall_id' => '商城ID',
- 'user_id' => '用户ID',
- 'pay_team_performance' => '总团队利润业绩[订单支付]',
- 'accomplish_team_performance' => '总团队利润业绩[订单完成]',
- 'pay_big_market_performance' => '大市场利润业绩[订单支付]',
- 'accomplish_big_market_performance' => '大市场利润业绩[订单完成]',
- 'pay_user_performance' => '用户利润业绩[订单支付]',
- 'accomplish_user_performance' => '用户利润业绩[订单完成]',
- 'status' => '状态[-1删除; 0禁用; 1正常]',
- 'created_at' => '创建时间',
- 'updated_at' => '更新时间',
- ];
- }
- /**
- * @Description: 保存数据
- * @Author: zsan
- * @DateTime 2024-04-11 10:21:30
- * @param array $data
- * @return bool|self
- */
- public static function setData(array $data)
- {
- try {
- $model = self::findOne(['user_id' => $data['user_id'], 'status' => StatusEnum::ENABLED]);
- 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)
- {
- $mall_id= $params['mall_id'];
- $uid = $params['user_id'];
- $order_id = $params['order_id'];
- try {
- // 判断是否开启
- $config = Yii::$app->services->setting->mall->get($mall_id, 'order');
- $achievementGoodsIds = [];
- if (!empty($config['is_designated_achievement_goods'])) {
- $achievementGoodsIds = json_decode($config['achievement_goods_ids'], true);
- if (empty($achievementGoodsIds)) {
- $achievementGoodsIds = true;
- }
- }
- $parent_id_arr = UserPartitionRelationship::getParentIdArr($uid);
- $parent_id_arr[] = $uid;
- foreach ($parent_id_arr as $user_id) {
- $user_id_arr = UserPartitionRelationship::getChildIdArr($user_id);
- $pay_team_performance = 0;
- $accomplish_team_performance = 0;
- if (!empty($user_id_arr)) {
- $pay_team_performance = self::computeGoodsPerformance($user_id_arr, ['order_status' => [OrderStatusEnum::PAY, OrderStatusEnum::SHIPMENTS, OrderStatusEnum::SING, OrderStatusEnum::ACCOMPLISH]], $achievementGoodsIds);
- $accomplish_team_performance = self::computeGoodsPerformance($user_id_arr, ['order_status' => OrderStatusEnum::ACCOMPLISH], $achievementGoodsIds);
- }
- $pay_user_performance = self::computeGoodsPerformance($user_id, ['order_status' => [OrderStatusEnum::PAY, OrderStatusEnum::SHIPMENTS, OrderStatusEnum::SING, OrderStatusEnum::ACCOMPLISH]], $achievementGoodsIds);
- $accomplish_user_performance = self::computeGoodsPerformance($user_id, ['order_status' => [OrderStatusEnum::ACCOMPLISH]], $achievementGoodsIds);
- $direct_user_id_arr = UserPartitionRelationship::getChildIdArr($user_id, 1);
- $pay_big_market_performance = 0;
- $accomplish_big_market_performance = 0;
- if (!empty($direct_user_id_arr)) {
- $pay_performance_arr = [];
- $accomplish_performance_arr = [];
- foreach ($direct_user_id_arr as $id) {
- $child_id_arr = UserPartitionRelationship::getChildIdArr($id);
- $child_id_arr[] = $id;
- $pay_performance_arr[] = self::computeGoodsPerformance($child_id_arr, ['order_status' => [OrderStatusEnum::PAY, OrderStatusEnum::SHIPMENTS, OrderStatusEnum::SING, OrderStatusEnum::ACCOMPLISH]], $achievementGoodsIds);
- $accomplish_performance_arr[] = self::computeGoodsPerformance($child_id_arr, ['order_status' => [OrderStatusEnum::ACCOMPLISH]], $achievementGoodsIds);
- }
- $pay_big_market_performance = max($pay_performance_arr);
- $accomplish_big_market_performance = max($accomplish_performance_arr);
- }
- if (self::setData([
- 'mall_id' => $mall_id,
- 'user_id' => $user_id,
- 'pay_team_performance' => $pay_team_performance > 0 ? $pay_team_performance : 0,
- 'accomplish_team_performance' => $accomplish_team_performance > 0 ? $accomplish_team_performance : 0,
- 'pay_big_market_performance' => $pay_big_market_performance > 0 ? $pay_big_market_performance : 0,
- 'accomplish_big_market_performance' => $accomplish_big_market_performance > 0 ? $accomplish_big_market_performance : 0,
- 'pay_user_performance' => $pay_user_performance > 0 ? $pay_user_performance : 0,
- 'accomplish_user_performance' => $accomplish_user_performance > 0 ? $accomplish_user_performance : 0,
- ]) === false) {
- throw new \Exception(self::getStaticError());
- }
- }
- //再次执行会员升级任务
- \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) {
- \Yii::error(__METHOD__ . ' ' . json_encode(['msg' => $e->getMessage(), 'line' => $e->getLine()]));
- self::setStaticError($e->getMessage());
- return false;
- }
- }
- public static function computeGoodsPerformance($user_id, $andwhere, $achievementGoodsIds = [])
- {
- $data = OrderDetail::find()
- ->where(['user_id' => $user_id, 'status' => StatusEnum::ENABLED]);
- if ($achievementGoodsIds === true) return 0;
- if (!empty($achievementGoodsIds)) {
- $data->andWhere(['goods_id' => $achievementGoodsIds]);
- }
- $data = (array)$data->andWhere($andwhere)
- ->select('goods_price,cost_price,num')
- ->asArray()
- ->all();
- $goods_performance = 0;
- foreach ($data as $value) {
- $performance = $value['goods_price'] - bcmul($value['cost_price'], $value['num'], 2);
- if ($performance > 0) $goods_performance += $performance;
- }
- return $goods_performance;
- }
- 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 = UserTeamPerformanceStatistics::getOne([['user_id' => $user_id], ['status' => StatusEnum::ENABLED]], true);
- $settlement_method = (int)($setting['settlement_method'] ?? 0);
- $is_include_yourself = (int)($setting['is_include_yourself'] ?? 0);
- switch ($settlement_method) {
- case 0:
- $data['team_performance'] = $statistics['accomplish_team_performance'];
- $data['big_market_performance'] = $statistics['accomplish_big_market_performance'];
- break;
- case 1:
- $data['team_performance'] = $statistics['pay_team_performance'];
- $data['big_market_performance'] = $statistics['pay_big_market_performance'];
- 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['accomplish_user_performance'];
- break;
- case 1:
- if (!empty($is_include_yourself)) $data['team_performance'] += $statistics['pay_user_performance'];
- break;
- }
- }
- }
- return $data;
- }
- }
|