AchievementLogic.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace addons\DoubleCopy\common\logic;
  3. use addons\DoubleCopy\common\enums\DoubleCopyEnum;
  4. use addons\DoubleCopy\common\models\DoubleCopyAchievement;
  5. use addons\DoubleCopy\common\models\DoubleCopyLevel;
  6. use addons\DoubleCopy\common\models\DoubleCopyUser;
  7. use common\enums\OrderStatusEnum;
  8. use common\enums\StatusEnum;
  9. use common\helpers\ArrayHelper;
  10. use common\helpers\FormatHelper;
  11. use common\models\order\Order;
  12. use common\models\order\OrderDetail;
  13. use common\models\user\UserPartitionRelationship;
  14. use common\traits\ErrorTrait;
  15. use Yii;
  16. use yii\db\Exception;
  17. use yii\helpers\Json;
  18. /**
  19. * 业绩统计逻辑处理
  20. * @Author: lun
  21. * @DateTime: 2022/9/8 0008 16:10
  22. * @Copyright: copyright (c) 2021 广东七件事集团
  23. * @package addons\DoubleCopy\common\logic
  24. */
  25. class AchievementLogic
  26. {
  27. use ErrorTrait;
  28. public $config;
  29. public $order;
  30. public $order_status;
  31. public function __construct($order, $order_status)
  32. {
  33. $this->order = $order;
  34. $this->order_status = $order_status;
  35. // 获取配置
  36. $this->config = Yii::$app->services->setting->addons->get($order['mall_id'], DoubleCopyEnum::ADDONS_NAME, 'basic');
  37. }
  38. public function handle()
  39. {
  40. $trans = Yii::$app->db->beginTransaction();
  41. try {
  42. $is_execute = true;// 是否执行业绩奖励记录
  43. // 检查是否符合配置要求
  44. if ($this->config['achievement_settle'] == 0 && $this->order_status != OrderStatusEnum::ACCOMPLISH) $is_execute = false;
  45. if ($this->config['achievement_settle'] == 1 && $this->order_status != OrderStatusEnum::PAY) $is_execute = false;
  46. // 获取商品
  47. $thaw_goods_ids = Json::decode($this->config['thaw_goods_ids'], true) ?? [];
  48. if (empty($thaw_goods_ids)) $is_execute = false;
  49. // 获取用户所有上级
  50. $user_ids = $this->getParentArr($this->order['user_id']);
  51. if (empty($user_ids)) {
  52. $trans->commit();
  53. return true;
  54. }
  55. if ($is_execute) {
  56. $time = time();
  57. foreach ($this->order['detail'] as $detail) {
  58. // 判断该商品是否属于业绩统计商品
  59. if (in_array($detail['goods_id'], $thaw_goods_ids)) {
  60. $money = $detail['goods_price'] - $detail['adjust_money'];
  61. foreach ($user_ids as $user_id) {
  62. $rows[] = [
  63. 'mall_id' => $this->order['mall_id'],
  64. 'user_id' => $user_id,
  65. 'order_detail_id' => $detail['id'],
  66. 'money' => $money,
  67. 'created_at' => $time,
  68. 'updated_at' => $time,
  69. ];
  70. DoubleCopyUser::saveAchievement($user_id, ['achievement' => $money]);
  71. }
  72. }
  73. }
  74. // 批量插入数据
  75. if (!empty($rows)) {
  76. $field = ['mall_id','user_id','order_detail_id','money','created_at','updated_at'];
  77. Yii::$app->db->createCommand()->batchInsert(DoubleCopyAchievement::tableName(), $field, $rows)->execute();
  78. }
  79. }
  80. $trans->commit();
  81. // 检测是否达到业绩解冻
  82. Yii::$app->services->rabbitMq->delay(60, ['mall_id' => $this->order['mall_id'],'user_ids' => implode(',', $user_ids),'method' => 'unfreeze'], DoubleCopyLogic::class, 'queueFrozen');
  83. return true;
  84. } catch (\Exception $e) {
  85. $trans->rollBack();
  86. $exception = FormatHelper::exception($e, "二二复制业绩统计");
  87. $this->setError($exception);
  88. return true;
  89. }
  90. }
  91. /**
  92. * 获取二二复制的所有上级(包括本人)
  93. * @Author: lun
  94. * @DateTime: 2022/9/8 0008 17:03
  95. * @Copyright: copyright (c) 2021 广东七件事集团
  96. * @param $user_id
  97. * @return array
  98. */
  99. public function getParentArr($user_id)
  100. {
  101. $relation_arr = UserPartitionRelationship::getParentIdArr($user_id);
  102. array_push($relation_arr, $user_id);
  103. $copy_user_ids = DoubleCopyUser::find()->select('user_id')->where(['user_id' => $relation_arr, 'status' => StatusEnum::ENABLED])->column();
  104. return $copy_user_ids;
  105. }
  106. }