Redpack.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <?php
  2. namespace addons\Redpack\common\models;
  3. use common\enums\AddonsEnum;
  4. use common\enums\StatusEnum;
  5. use xin\helper\Num;
  6. use Yii;
  7. use yii\db\Exception;
  8. /**
  9. * This is the model class for table "{{%addons_redpack}}".
  10. *
  11. * @property int $id
  12. * @property int $mall_id 商城ID
  13. * @property string $title 活动标题
  14. * @property string $description 活动描述
  15. * @property string|null $cover 活动封面
  16. * @property float $award 总奖金
  17. * @property float $virtual_award 虚拟奖金
  18. * @property float $day_award 每日总奖金
  19. * @property int $grab_user_num 已抢红包总人数
  20. * @property float $grab_money 已抢红包总金额
  21. * @property float $surplus_money 剩余红包总金额
  22. * @property int|null $data_at 数据更新时间
  23. * @property string $time_type 活动时间类型[1:每日红包,2:时间段红包]
  24. * @property string $start_time 活动开始时间
  25. * @property string $end_time 活动结束时间
  26. * @property int $redpack_type 红包活动类型[1:冻结到激活红包,2:冻结红包,3:激活红包]
  27. * @property string|null $rule_values 规则条件的值集合 [
  28. * first_money_start:第一次抢红包金额最小值
  29. * first_money_end:第一次抢红包金额最大值
  30. * everyday_invitation:每日邀请人数
  31. * everyday_invitation_start:每日邀请人数可抢红包一次,单次金额在最小值
  32. * everyday_invitation_end:每日邀请人数可抢红包一次,单次金额在最大值
  33. * times:每日活动最多抢次数
  34. * ]
  35. * @property string $auth 参与权限
  36. * @property string|null $rule 规则说明
  37. * @property int|null $status 状态[-1:删除;0:禁用;1启用]
  38. * @property string|null $limit_user_level 会员限制
  39. * @property int $created_at
  40. * @property int $updated_at
  41. * @property int $is_show_red_envelope_num
  42. * @property int $is_show_invite_button
  43. * @property int $is_limit_user_level_num
  44. * @property int $is_show_reward_amount
  45. * @property float $reward_parent_rate
  46. * @property array|null $limit_user_level_num
  47. */
  48. class Redpack extends \common\models\base\BaseActiveRecord
  49. {
  50. /**
  51. * {@inheritdoc}
  52. */
  53. public static function tableName()
  54. {
  55. return '{{%addons_redpack}}';
  56. }
  57. public static function briefTableName()
  58. {
  59. return 'addons_redpack';
  60. }
  61. /**
  62. * {@inheritdoc}
  63. */
  64. public function rules()
  65. {
  66. return [
  67. [['mall_id', 'grab_user_num', 'data_at', 'redpack_type', 'status', 'created_at', 'updated_at','start_time', 'end_time',
  68. 'is_show_red_envelope_num', 'is_show_invite_button', 'is_limit_user_level_num', 'is_show_reward_amount'], 'integer'],
  69. [['award', 'day_award', 'grab_money', 'surplus_money','virtual_award', 'reward_parent_rate'], 'number'],
  70. [['rule_values', 'rule','limit_user_level'], 'string'],
  71. [['title'], 'string', 'max' => 100],
  72. [['description', 'cover', 'auth'], 'string', 'max' => 255],
  73. [['time_type'], 'string', 'max' => 45],
  74. [['limit_user_level_num'], 'safe'],
  75. ];
  76. }
  77. /**
  78. * {@inheritdoc}
  79. */
  80. public function attributeLabels()
  81. {
  82. return [
  83. 'id' => 'ID',
  84. 'mall_id' => '商城ID',
  85. 'title' => '活动标题',
  86. 'description' => '活动描述',
  87. 'cover' => '活动封面',
  88. 'award' => '总奖金',
  89. 'virtual_award' => '虚拟奖金',
  90. 'day_award' => '每日奖金池',
  91. 'grab_user_num' => '已抢红包总人数',
  92. 'grab_money' => '已抢红包总金额',
  93. 'surplus_money' => '剩余红包总金额',
  94. 'data_at' => '数据更新时间',
  95. 'time_type' => '活动时间类型[1:每日红包,2:时间段红包]',
  96. 'start_time' => '活动开始时间',
  97. 'end_time' => '活动结束时间',
  98. 'redpack_type' => '红包活动类型[1:冻结到激活红包,2:增值冻结红包,3:增值激活红包]',
  99. 'rule_values' => '规则条件的值集合',
  100. 'auth' => '参与权限',
  101. 'rule' => '规则说明',
  102. 'status' => '状态[-1:删除;0:禁用;1启用]',
  103. 'limit_user_level' => '会员限制',
  104. 'created_at' => '创建时间',
  105. 'updated_at' => '更新时间',
  106. ];
  107. }
  108. /**
  109. * @Author: ltm
  110. * @DateTime: 2022/3/18 0018 16:21
  111. * @Copyright: copyright (c) 2021 广东七件事集团
  112. * @param $data
  113. * @return string
  114. */
  115. public static function setData(array $params){
  116. try{
  117. if (!empty($params['id'])) {
  118. $model = self::findOne(['id'=>$params['id'],'mall_id'=>$params['mall_id']]);
  119. if($params['type'] == StatusEnum::ENABLED && $model->time_type == StatusEnum::ENABLED){ //每日红包活动重新启用的时候更新开始时间和结束时间
  120. $daytime = strtotime(date("Y-m-d"));
  121. $params['start_time'] = $daytime + strtotime(date("Y-m-d H:i:s",$model->start_time)) - strtotime(date("Y-m-d",$model->start_time));
  122. $params['end_time'] = $daytime + strtotime(date("Y-m-d H:i:s",$model->end_time)) - strtotime(date("Y-m-d",$model->end_time));
  123. }
  124. if (empty($model)) throw new Exception('记录不存在或已删除');
  125. }else{
  126. $model = new self();
  127. $model->loadDefaultValues();
  128. }
  129. $model->mall_id = $params['mall_id'];
  130. if(!$model->load($params,'') || !$model->save()){
  131. throw new Exception($model->getErrorMessage());
  132. }
  133. return $model;
  134. }catch(\Exception $e){
  135. self::$static_error = $e->getMessage();
  136. return false;
  137. }
  138. }
  139. /**
  140. * 获取商品的优惠券设置
  141. * @Author: lun
  142. * @DateTime: 2022/5/12 0012 14:49
  143. * @Copyright: copyright (c) 2021 广东七件事集团
  144. * @param $params
  145. * @return bool|string[]
  146. */
  147. public static function getGoodSetting($params)
  148. {
  149. // 后台页面组件展示
  150. if ($params['type'] == 'show_component') {
  151. return [
  152. 'component' => 'com-redpack',
  153. 'path' => Yii::$app->basePath . '/../addons/Redpack/backend/views/goods',
  154. ];
  155. } else {
  156. try {
  157. if (empty($params['setting'][AddonsEnum::ADDONS_NAME_REDPACK])) return true;
  158. $setting = $params['setting'][AddonsEnum::ADDONS_NAME_REDPACK];
  159. // 数据保存
  160. $res = RedpackGoodsSetting::setGoodsSetting($params['mall_id'], $params['goods_id'], $setting);
  161. if ($res === false) throw new Exception(RedpackGoodsSetting::getStaticError());
  162. return true;
  163. } catch (Exception $e) {
  164. self::setStaticError($e->getMessage());
  165. return false;
  166. }
  167. }
  168. }
  169. }