xhInviteService.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace common\services;
  3. use common\components\stringUtil;
  4. use Yii;
  5. use common\components\dict;
  6. use common\models\xhInvite;
  7. class xhInviteService {
  8. public static function generate($sjId)
  9. {
  10. $num = 5;
  11. $query = xhInvite::find();
  12. $now = time();
  13. $query->where(['sjId' =>$sjId,'takeStatus'=>0]);
  14. $query->andWhere(['>','deadline',$now]);
  15. $count = $query->count();
  16. if($count >= $num){
  17. return ['code'=>'A0002','msg'=>'您还有邀请码没有使用哦'];
  18. }
  19. $maxInvite = xhInvite::find()->where(['sjId' =>$sjId])->orderBy('id desc')->asArray()->one();
  20. $invteId = 0;
  21. if(!empty($maxInvite)){
  22. $invteId = $maxInvite['id'];
  23. }
  24. for($n=0;$n<5;$n++){
  25. $invteId++;
  26. $rand = strtolower(stringUtil::getRandNum(3));//随机数不能太小,防止被猜中
  27. $deadline = $now + 86400*30;//一个月有效期
  28. $randNum = rand(0,1);
  29. $amount = [3900,3899.99];
  30. $save = $amount[$randNum];
  31. $save = (int)3900;
  32. $newData = ['sjId'=>$sjId,'code'=>$sjId.'-'.$invteId.'-'.$rand,
  33. 'save'=>$save,'prize'=>0,'deadline'=>$deadline,'addTime'=>$now,'createTime'=>date("Y-m-d H:i:s",$now)];
  34. self::add($newData);
  35. }
  36. return ['code'=>'A0001','msg'=>'操作成功'];
  37. }
  38. public static function add($data)
  39. {
  40. $return = xhInvite::add($data);
  41. $code = $return['code'];
  42. $cacheKey = dict::getCacheKey('xhInvite').$code;
  43. $params = [$cacheKey];
  44. if(!empty($return)){
  45. foreach($return as $key => $val){
  46. $params[] = $key;
  47. $params[] = $val;
  48. }
  49. }
  50. Yii::$app->redis->executeCommand('HMSET',$params);
  51. return $return;
  52. }
  53. public static function getByCode($code)
  54. {
  55. $cacheKey = dict::getCacheKey('xhInvite').$code;
  56. $invite = Yii::$app->redis->executeCommand('HGETALL', [$cacheKey]);
  57. if(!empty($invite)){
  58. $arr = [];
  59. $i = 0;
  60. $x = 0;
  61. foreach($invite as $key => $val){
  62. $i++;
  63. if($i%2 == 0){
  64. $arr[$x]['value'] = $val;
  65. $x++;
  66. }else{
  67. $arr[$x]['key'] = $val;
  68. }
  69. }
  70. $inviteArr = [];
  71. foreach($arr as $key => $val){
  72. $inviteArr[$val['key']] = $val['value'];
  73. }
  74. unset($inviteArr['info_already_get_by_sql']);
  75. return $inviteArr;
  76. }
  77. $invite = xhInvite::find()->where(['code'=>$code])->asArray()->one();
  78. $params = [$cacheKey];
  79. $params[] = 'info_already_get_by_sql';
  80. $params[] = 'ok';//redis没有办法设置带空值的键,加此可以数据空时表示取过
  81. if(!empty($invite)){
  82. foreach($invite as $key => $val){
  83. $params[] = $key;
  84. $params[] = $val;
  85. }
  86. }
  87. Yii::$app->redis->executeCommand('HMSET',$params);
  88. return $invite;
  89. }
  90. public static function updateByCode($code,$data)
  91. {
  92. xhInvite::updateByCondition(['code'=>$code], $data);
  93. self::getByCode($code);
  94. $cacheKey = dict::getCacheKey('xhInvite').$code;
  95. $params = [$cacheKey];
  96. if(!empty($data)){
  97. foreach($data as $key => $val){
  98. $params[] = $key;
  99. $params[] = $val;
  100. }
  101. }
  102. Yii::$app->redis->executeCommand('HMSET',$params);
  103. }
  104. }