RedActivity.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. namespace common\models;
  3. use Yii;
  4. class RedActivity extends \yii\db\ActiveRecord
  5. {
  6. const TYPE_NOT =1;//无限制
  7. const TYPE_NOTMEMBER =10;//非会员
  8. const TYPE_MEMBER =20;//会员
  9. /**
  10. * @inheritdoc
  11. */
  12. public static function tableName()
  13. {
  14. return '{{%red_activity}}';
  15. }
  16. /**
  17. * @inheritdoc
  18. */
  19. public function rules()
  20. {
  21. return [
  22. [['title', 'created_at','province', 'city', 'type', 'number', 'valid_at','price_interval'], 'required'],
  23. [['rule_id', 'created_at', 'type', 'number', 'valid_at'], 'integer'],
  24. [['total_amount'], 'number'],
  25. [['title','province','city','price_interval'], 'string', 'max' => 32],
  26. ];
  27. }
  28. /**
  29. * @inheritdoc
  30. */
  31. public function attributeLabels()
  32. {
  33. return [
  34. 'id' => 'ID',
  35. 'title' => '标题',
  36. 'rule_id' => '规则id',
  37. 'created_at' => '创建时间',
  38. 'province' =>'省份',
  39. 'city' => '城市',
  40. 'type'=>'类型',
  41. 'total_amount' => '总金额',
  42. 'number' => '个数/工地',
  43. 'valid_at' => '有效时间',
  44. 'price_interval' => '单个红包金额区间',
  45. ];
  46. }
  47. /**
  48. * @param string $action_id 活动id
  49. * @param string $building_id 工地id
  50. * @param string $user_id 用户id
  51. * @return bool
  52. */
  53. public static function isRed($action_id='',$building_id='',$user_id='')
  54. {
  55. $result = ['error'=>1];
  56. if(empty($action_id)||empty($building_id)||empty($user_id))
  57. return $result;
  58. $redactivi = RedActivity::findBySql('SELECT a.id,a.number,a.type,b.joincount FROM {{%red_activity}} AS a LEFT JOIN {{%red_rule}} AS b ON a.id = b.red_id WHERE a.id = :id',[':id'=>$action_id])->asArray()->one();
  59. if($redactivi)
  60. {
  61. $buildata = Building::findBySql('SELECT b.member FROM {{%building}} AS a LEFT JOIN {{%user_company}} AS b ON a.uid = b.uid WHERE a.id = :id',[':id'=>$building_id])->asArray()->one();
  62. if($redactivi['type']==RedActivity::TYPE_NOT)//无限制
  63. {
  64. }elseif ($redactivi['type']==RedActivity::TYPE_NOTMEMBER)//非会员
  65. {
  66. if(!empty($buildata['member'])||$buildata['member']==UserCompany::ISMEMBER)
  67. {
  68. return $result;
  69. }
  70. }
  71. elseif($redactivi['type']==RedActivity::TYPE_MEMBER)//会员
  72. {
  73. if(empty($buildata['member'])||$buildata['member']==UserCompany::NOMEMBER)
  74. {
  75. return $result;
  76. }
  77. }
  78. // Building::find()->select('{{%building}}.id,{{%company}}.member')->joinWith('company')->where(['{{%building}}.id'=>$building_id])->asArray()->one();
  79. $activir = ActivityReceive::findBySql('SELECT id,status,valid_at FROM {{%activity_receive}} WHERE uid = :uid AND activity_id = :activity_id AND source_id = :source_id',[':uid'=>$user_id,':activity_id'=>$action_id,':source_id'=>$building_id])->one();
  80. if(!empty($activir))
  81. {
  82. if($activir->status==ActivityReceive::STATUS_NOT && $activir->valid_at>time()){
  83. $result['error']=2;
  84. return $result;
  85. }else if ($activir->status==ActivityReceive::STATUS_YES)
  86. {
  87. return $result;
  88. }
  89. }
  90. //该工地被抢次数
  91. $count = ActivityReceive::findBySql('SELECT id FROM {{%activity_receive}} WHERE activity_id = :activity_id AND source_id = :source_id',[':activity_id'=>$action_id,':source_id'=>$building_id])->count();
  92. if($redactivi['number']<=$count)
  93. {
  94. return $result;
  95. }
  96. //参与活动次数
  97. if($redactivi['joincount']==0)
  98. {
  99. return $result;
  100. }else{
  101. $count = ActivityReceive::findBySql('SELECT id FROM {{%activity_receive}} WHERE uid = :uid AND activity_id = :activity_id ',[':uid'=>$user_id,':activity_id'=>$action_id])->count();
  102. if($count>=$redactivi['joincount'])
  103. {
  104. return $result;
  105. }
  106. }
  107. }
  108. $result['error']=0;
  109. return $result;
  110. }
  111. }