| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- <?php
- namespace addons\DoubleCopy\common\logic;
- use addons\DoubleCopy\common\enums\DoubleCopyEnum;
- use addons\DoubleCopy\common\models\DoubleCopyAchievement;
- use addons\DoubleCopy\common\models\DoubleCopyLevel;
- use addons\DoubleCopy\common\models\DoubleCopyUser;
- use common\enums\OrderStatusEnum;
- use common\enums\StatusEnum;
- use common\helpers\ArrayHelper;
- use common\helpers\FormatHelper;
- use common\models\order\Order;
- use common\models\order\OrderDetail;
- use common\models\user\UserPartitionRelationship;
- use common\traits\ErrorTrait;
- use Yii;
- use yii\db\Exception;
- use yii\helpers\Json;
- /**
- * 业绩统计逻辑处理
- * @Author: lun
- * @DateTime: 2022/9/8 0008 16:10
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @package addons\DoubleCopy\common\logic
- */
- class AchievementLogic
- {
- use ErrorTrait;
- public $config;
- public $order;
- public $order_status;
- public function __construct($order, $order_status)
- {
- $this->order = $order;
- $this->order_status = $order_status;
- // 获取配置
- $this->config = Yii::$app->services->setting->addons->get($order['mall_id'], DoubleCopyEnum::ADDONS_NAME, 'basic');
- }
- public function handle()
- {
- $trans = Yii::$app->db->beginTransaction();
- try {
- $is_execute = true;// 是否执行业绩奖励记录
- // 检查是否符合配置要求
- if ($this->config['achievement_settle'] == 0 && $this->order_status != OrderStatusEnum::ACCOMPLISH) $is_execute = false;
- if ($this->config['achievement_settle'] == 1 && $this->order_status != OrderStatusEnum::PAY) $is_execute = false;
- // 获取商品
- $thaw_goods_ids = Json::decode($this->config['thaw_goods_ids'], true) ?? [];
- if (empty($thaw_goods_ids)) $is_execute = false;
- // 获取用户所有上级
- $user_ids = $this->getParentArr($this->order['user_id']);
- if (empty($user_ids)) {
- $trans->commit();
- return true;
- }
- if ($is_execute) {
- $time = time();
- foreach ($this->order['detail'] as $detail) {
- // 判断该商品是否属于业绩统计商品
- if (in_array($detail['goods_id'], $thaw_goods_ids)) {
- $money = $detail['goods_price'] - $detail['adjust_money'];
- foreach ($user_ids as $user_id) {
- $rows[] = [
- 'mall_id' => $this->order['mall_id'],
- 'user_id' => $user_id,
- 'order_detail_id' => $detail['id'],
- 'money' => $money,
- 'created_at' => $time,
- 'updated_at' => $time,
- ];
- DoubleCopyUser::saveAchievement($user_id, ['achievement' => $money]);
- }
- }
- }
- // 批量插入数据
- if (!empty($rows)) {
- $field = ['mall_id','user_id','order_detail_id','money','created_at','updated_at'];
- Yii::$app->db->createCommand()->batchInsert(DoubleCopyAchievement::tableName(), $field, $rows)->execute();
- }
- }
- $trans->commit();
- // 检测是否达到业绩解冻
- Yii::$app->services->rabbitMq->delay(60, ['mall_id' => $this->order['mall_id'],'user_ids' => implode(',', $user_ids),'method' => 'unfreeze'], DoubleCopyLogic::class, 'queueFrozen');
- return true;
- } catch (\Exception $e) {
- $trans->rollBack();
- $exception = FormatHelper::exception($e, "二二复制业绩统计");
- $this->setError($exception);
- return true;
- }
- }
- /**
- * 获取二二复制的所有上级(包括本人)
- * @Author: lun
- * @DateTime: 2022/9/8 0008 17:03
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $user_id
- * @return array
- */
- public function getParentArr($user_id)
- {
- $relation_arr = UserPartitionRelationship::getParentIdArr($user_id);
- array_push($relation_arr, $user_id);
- $copy_user_ids = DoubleCopyUser::find()->select('user_id')->where(['user_id' => $relation_arr, 'status' => StatusEnum::ENABLED])->column();
- return $copy_user_ids;
- }
- }
|