AgentCommissionItemSetting.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. <?php
  2. namespace addons\Agent\common\models;
  3. use common\enums\StatusEnum;
  4. use common\models\base\BaseActiveRecord;
  5. use addons\Agent\common\enums\AgentEnum;
  6. use yii\helpers\Json;
  7. /**
  8. * This is the model class for table "qimall_addons_agent_commission_item_setting".
  9. *
  10. * @property int $id
  11. * @property int $mall_id 商城ID
  12. * @property int $is_participate 商品是否参与渠道分红[0=不参与,1=参与]
  13. * @property int $is_enable 是否独立设置:0:否;1是
  14. * @property int $item_id 项目id
  15. * @property string $item_type 项目类型:商品goods
  16. * @property string $commission_type 分佣类型:积分score;佣金:commission
  17. * @property int $is_percent_team 渠道奖类型 0百分比 1 固定金额
  18. * @property int $is_percent_equal 平级奖类型 0百分比 1 固定金额
  19. * @property int $is_percent_over 越级奖类型 0百分比 1 固定金额
  20. * @property int $is_percent_extra 额外奖类型 0百分比 1 固定金额
  21. * @property int $is_percent_drainage_subsidy 额外分红奖励:引流补贴类型 0百分比 1 固定金额
  22. * @property int $is_percent_team_subsidy 额外分红奖励:渠道补贴类型 0百分比 1 固定金额
  23. * @property int $is_percent_recommend 推荐奖类型: 0百分比 1 固定金额
  24. * @property int $is_enable_recommend 是否启用推荐奖: 0: 否,1:是
  25. * @property int $status 状态[-1:删除;0:禁用;1启用]
  26. * @property int $created_at
  27. * @property int $updated_at
  28. * @property int $is_enable_regular_bonus 是否启用返佣设置[0: 否,1:是]
  29. * @property string $extra 额外信息
  30. */
  31. class AgentCommissionItemSetting extends BaseActiveRecord
  32. {
  33. /**
  34. * {@inheritdoc}
  35. */
  36. public static function tableName()
  37. {
  38. return '{{%addons_agent_commission_item_setting}}';
  39. }
  40. /**
  41. * {@inheritdoc}
  42. */
  43. public function rules()
  44. {
  45. return [
  46. [['mall_id'], 'required'],
  47. [['mall_id', 'is_participate', 'is_enable', 'item_id', 'is_percent_team', 'is_percent_equal', 'is_percent_over',
  48. 'is_percent_extra', 'status', 'created_at', 'updated_at','is_percent_drainage_subsidy','is_percent_team_subsidy','is_percent_recommend', 'is_enable_recommend','is_alone_agent_equal_prize','alone_agent_equal_prize_type','is_equal_by_upgrade','is_self_buy_alone','is_self_buy','enable_goods_deduct','is_enable_regular_bonus'], 'integer'],
  49. [['item_type', 'commission_type'], 'string', 'max' => 255],
  50. [['extra'], 'string']
  51. ];
  52. }
  53. /**
  54. * {@inheritdoc}
  55. */
  56. public function attributeLabels()
  57. {
  58. return [
  59. 'id' => 'ID',
  60. 'mall_id' => '商城ID',
  61. 'is_participate' => '商品是否参与渠道分红[0=不参与,1=参与]',
  62. 'is_enable' => '是否独立设置:0:否;1是',
  63. 'item_id' => '项目id',
  64. 'item_type' => '项目类型:商品goods',
  65. 'commission_type' => '分佣类型:积分score;佣金:commission',
  66. 'is_percent_team' => '渠道奖类型 0百分比 1 固定金额',
  67. 'is_percent_equal' => '平级奖类型 0百分比 1 固定金额',
  68. 'is_percent_over' => '越级奖类型 0百分比 1 固定金额',
  69. 'is_percent_extra' => '额外奖类型 0百分比 1 固定金额',
  70. 'is_percent_drainage_subsidy' => '额外分红奖励:引流补贴类型 0百分比 1 固定金额',
  71. 'is_percent_team_subsidy' => '额外分红奖励:渠道补贴类型 0百分比 1 固定金额',
  72. 'is_percent_recommend' => '推荐奖类型: 0:百分比,1:固定金额',
  73. 'is_enable_recommend' => '是否启用推荐奖: 0:否,1:是',
  74. 'status' => '状态[-1:删除;0:禁用;1启用]',
  75. 'created_at' => 'Created At',
  76. 'updated_at' => 'Updated At',
  77. 'is_enable_regular_bonus' => '是否启用返佣设置[0: 否,1:是]',
  78. 'extra' => '额外信息'
  79. ];
  80. }
  81. public function getDetail()
  82. {
  83. return $this->hasMany(AgentCommissionItemSettingDetail::class, ['agent_commission_item_setting_id' => 'id'])->indexBy('level');
  84. }
  85. public static function setData($params, $data)
  86. {
  87. try{
  88. foreach ($data as $key => $item) {
  89. // 层级分销
  90. if ($key == 'distribution_setting') {
  91. // 这里是独立设置
  92. $model = AgentDistributionSetting::findOne([
  93. 'mall_id' => $params['mall_id'],
  94. 'key' => 'distribution_setting',
  95. 'item_id' => $params['item_id'],
  96. 'status' => StatusEnum::ENABLED
  97. ]);
  98. if (empty($model)) {
  99. $model = new AgentDistributionSetting();
  100. $model->mall_id = $params['mall_id'];
  101. $model->key = 'distribution_setting';
  102. $model->item_id = $params['item_id'];
  103. }
  104. $model->value = $item;
  105. if (!$model->save()) throw new \Exception($model->getErrorMessage());
  106. continue;
  107. }
  108. if ($key == 'distribution_setting_score') {
  109. // 这里是独立设置
  110. $model = AgentDistributionSetting::findOne([
  111. 'mall_id' => $params['mall_id'],
  112. 'key' => 'distribution_setting_score',
  113. 'item_id' => $params['item_id'],
  114. 'status' => StatusEnum::ENABLED
  115. ]);
  116. if (empty($model)) {
  117. $model = new AgentDistributionSetting();
  118. $model->mall_id = $params['mall_id'];
  119. $model->key = 'distribution_setting_score';
  120. $model->item_id = $params['item_id'];
  121. }
  122. $model->value = $item;
  123. if (!$model->save()) throw new \Exception($model->getErrorMessage());
  124. continue;
  125. }
  126. // 报单等于复购
  127. if ($key == 'distribution_is_alone') {
  128. $model = AgentGoodsRepurchase::findOne([
  129. 'mall_id' => $params['mall_id'],
  130. 'item_id' => $params['item_id'],
  131. 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]
  132. ]);
  133. if (empty($model)) {
  134. $model = new AgentGoodsRepurchase();
  135. $model->mall_id = $params['mall_id'];
  136. $model->item_id = $params['item_id'];
  137. }
  138. $model->status = $item ? StatusEnum::ENABLED : StatusEnum::DISABLED;
  139. if (!$model->save()) throw new \Exception($model->getErrorMessage());
  140. continue;
  141. }
  142. is_array($item['extra']) && $item['extra'] = json_encode($item['extra']);
  143. $model = self::findOne([
  144. 'mall_id' => $params['mall_id'],
  145. 'item_type' => $item['item_type'],
  146. 'commission_type' => $item['commission_type'],
  147. 'item_id' => $params['item_id'],
  148. 'status' => [StatusEnum::ENABLED]
  149. ]);
  150. if (empty($model)) {
  151. $model = new self();
  152. $model->mall_id = $params['mall_id'];
  153. $model->item_id = $params['item_id'];
  154. $model->loadDefaultValues();
  155. }
  156. if(!$model->load($item,'') || !$model->save()){
  157. throw new \Exception($model->getErrorMessage());
  158. }
  159. // 插入配置详情
  160. $detail = ['mall_id' => $params['mall_id'], 'agent_commission_item_setting_id' => $model->id];
  161. if(isset($item['detail']['alone_agent_equal_prize_info'])){
  162. $item['detail']['alone_agent_equal_prize_info'] = json_encode($item['detail']['alone_agent_equal_prize_info']);
  163. }
  164. foreach($item['detail'] as &$param){
  165. if(isset($param['alone_agent_equal_prize_info'])){
  166. $param['alone_agent_equal_prize_info'] = json_encode($param['alone_agent_equal_prize_info']);
  167. }
  168. }
  169. $res = AgentCommissionItemSettingDetail::setData($detail, $item['detail']);
  170. if ($res == false) throw new \Exception(AgentCommissionItemSettingDetail::getStaticError());
  171. }
  172. return true;
  173. }catch(\Exception $e){
  174. self::$static_error = $e->getMessage();
  175. return false;
  176. }
  177. }
  178. /**
  179. * @param array $params
  180. * @param bool $is_array
  181. * @return array|false|mixed
  182. */
  183. public function globalLists(array $params = [], bool $is_array = true)
  184. {
  185. $mall_id = 0;
  186. foreach($params['where'] as $param){
  187. if(in_array('mall_id',$param)){
  188. $mall_id = $param[2];
  189. }
  190. }
  191. $lists = self::lists($params, $is_array);
  192. if (empty($lists)) $lists = [];
  193. $setting = AgentDistributionSetting::lists([
  194. 'where' => $params['where'],
  195. 'select' => 'key, value',
  196. 'order' => 'id asc'
  197. ]);
  198. if (!empty($setting)) {
  199. $values = [];
  200. foreach ($setting as $item) {
  201. $values[$item['key']] = Json::decode($item['value']);
  202. }
  203. $lists = array_merge($lists, $values);
  204. }
  205. if(empty($lists)){
  206. $level_params = ['where' => [['=', 'mall_id', $mall_id], ['=', 'status', StatusEnum::ENABLED]], 'select' => 'level,name', 'order' => 'level asc'];
  207. $levels = AgentLevel::lists($level_params);
  208. if(!empty($levels)){
  209. foreach($levels as $level){
  210. $lists['commission']['detail'][$level['level']]['alone_agent_equal_prize_info'] = '';
  211. $lists['score']['detail'][$level['level']]['alone_agent_equal_prize_info'] = '';
  212. }
  213. }
  214. }
  215. foreach($lists as &$list){
  216. if(!empty($list['extra'])){
  217. $list['extra'] = json_decode($list['extra'], true);
  218. }
  219. if(!empty($list['detail'])){
  220. foreach($list['detail'] as &$item){
  221. if(isset($item['alone_agent_equal_prize_info'])){
  222. $item['alone_agent_equal_prize_info'] = $item['alone_agent_equal_prize_info'] ? json_decode($item['alone_agent_equal_prize_info'],true) : [];
  223. $setting = \Yii::$app->services->setting->addons->get($mall_id, AgentEnum::ADDONS_NAME, 'basic');
  224. $equal_prize_deep = $setting['equal_prize_deep'] ?? 0;
  225. if($equal_prize_deep > AgentEnum::ALONE_EQUAL_DEEP) $equal_prize_deep = AgentEnum::ALONE_EQUAL_DEEP;
  226. $count = count($item['alone_agent_equal_prize_info']);
  227. $diff = $equal_prize_deep - $count;
  228. if($diff > 0){
  229. if($equal_prize_deep > 0){
  230. $deep = $count;
  231. for($i=0;$i<$diff;$i++){
  232. $deep++;
  233. $item['alone_agent_equal_prize_info'][] = [
  234. 'deep' => $deep,
  235. 'prize' => 0,
  236. ];
  237. }
  238. }
  239. }else{
  240. $item['alone_agent_equal_prize_info'] = array_slice($item['alone_agent_equal_prize_info'],0,$equal_prize_deep);
  241. }
  242. }
  243. }
  244. unset($item);
  245. }
  246. }
  247. unset($list);
  248. // 报单等于复购
  249. $distribution_is_alone = AgentGoodsRepurchase::lists([
  250. 'where' => $params['where']
  251. ], $is_array);
  252. return array_merge($lists, ['distribution_is_alone' => !empty($distribution_is_alone) ? StatusEnum::ENABLED : StatusEnum::DISABLED]);
  253. }
  254. }