ScoreBonusCommissionItemSetting.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace addons\ScoreBonus\common\models;
  3. use common\enums\StatusEnum;
  4. use common\models\goods\Goods;
  5. use Yii;
  6. /**
  7. * This is the model class for table "{{%addons_score_bonus_commission_item_setting}}".
  8. *
  9. * @property int $id
  10. * @property int $mall_id 商城ID
  11. * @property int $is_enable 是否启用带货奖励:0:否;1是
  12. * @property int $is_alone 是否独立设置:0:否;1是
  13. * @property int $is_extra 是否开启额外分红:0:否;1是
  14. * @property int $item_id 项目id
  15. * @property string $item_type 项目类型:商品goods
  16. * @property string $commission_type 分佣类型:佣金:commission
  17. * @property int $status 状态[-1:删除;0:禁用;1启用]
  18. * @property int $created_at
  19. * @property int $updated_at
  20. */
  21. class ScoreBonusCommissionItemSetting extends \common\models\base\BaseActiveRecord
  22. {
  23. /**
  24. * {@inheritdoc}
  25. */
  26. public static function tableName()
  27. {
  28. return '{{%addons_score_bonus_commission_item_setting}}';
  29. }
  30. /**
  31. * {@inheritdoc}
  32. */
  33. public function rules()
  34. {
  35. return [
  36. [['mall_id'], 'required'],
  37. [['mall_id', 'is_enable', 'is_alone', 'item_id', 'status', 'created_at', 'updated_at'], 'integer'],
  38. [['item_type', 'commission_type'], 'string', 'max' => 255],
  39. ];
  40. }
  41. /**
  42. * {@inheritdoc}
  43. */
  44. public function attributeLabels()
  45. {
  46. return [
  47. 'id' => 'ID',
  48. 'mall_id' => 'Mall ID',
  49. 'is_enable' => 'Is Enable',
  50. 'is_alone' => 'Is Alone',
  51. 'item_id' => 'Item ID',
  52. 'item_type' => 'Item Type',
  53. 'commission_type' => 'Commission Type',
  54. 'status' => 'Status',
  55. 'created_at' => 'Created At',
  56. 'updated_at' => 'Updated At',
  57. ];
  58. }
  59. public function getDetail()
  60. {
  61. return $this->hasOne(ScoreBonusCommissionItemSettingDetail::class, ['score_bonus_commission_item_setting_id' => 'id']);
  62. }
  63. public static function setData($params, $data)
  64. {
  65. try {
  66. $transaction = \Yii::$app->db->beginTransaction();
  67. foreach ($data as $commission_type => $item) {
  68. $detail_params = $item['detail'];
  69. unset($item['detail']);
  70. $model = self::findOne([
  71. 'mall_id' => $params['mall_id'],
  72. 'item_type' => $item['item_type'],
  73. 'item_id' => $params['item_id'],
  74. 'commission_type' => $item['commission_type'],
  75. 'status' => [StatusEnum::ENABLED]
  76. ]);
  77. if (empty($model)) {
  78. $model = new self();
  79. $model->mall_id = $params['mall_id'];
  80. $model->item_id = $params['item_id'];
  81. $model->loadDefaultValues();
  82. }
  83. if(!$model->load($item,'') || !$model->save()){
  84. throw new \Exception($model->getErrorMessage());
  85. }
  86. // 插入配置详情
  87. $detail = array_merge($detail_params, ['mall_id' => $params['mall_id'], 'score_bonus_commission_item_setting_id' => $model->id]);
  88. $res = ScoreBonusCommissionItemSettingDetail::setData($detail);
  89. if ($res == false) {
  90. throw new \Exception(ScoreBonusCommissionItemSettingDetail::getStaticError());
  91. }
  92. }
  93. $transaction->commit();
  94. return true;
  95. } catch (\Exception $e) {
  96. $transaction->rollBack();
  97. self::$static_error = $e->getMessage();
  98. return false;
  99. }
  100. }
  101. /**
  102. * @name:
  103. * @msg: 计算带货奖励
  104. * @param {int} $mall_id
  105. * @param {int} $good_id
  106. * @param {int} $good_price 商品售价
  107. * @return {bool | array} commission:带货奖励佣金;
  108. */
  109. public static function calculateReward(int $mall_id, int $good_id, float $good_price)
  110. {
  111. $good = Goods::findOne(['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED, 'id' => $good_id]);
  112. if (empty($good)) {
  113. self::$static_error = '商品不存在';
  114. return false;
  115. }
  116. $item_stting = self::findOne(['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED, 'item_id' => $good_id]);
  117. $commission = 0;
  118. if (1 == $item_stting['is_alone']) {
  119. // 独立设置带货奖励
  120. $setting_detail = $item_stting->detail;
  121. $commission = bcmul($good_price, $setting_detail['value'] / 100, 2);
  122. } else {
  123. // 未独立设置
  124. $config = Yii::$app->services->setting->addons->get($mall_id, 'ScoreBonus', 'basic');
  125. $commission = bcmul($good_price, $config['bonus_pre'] / 100, 2);
  126. }
  127. return $commission;
  128. }
  129. }