CodeNoModel.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace app\common\model;
  3. use think\Cache;
  4. use think\Model;
  5. /**
  6. * 激活码
  7. */
  8. class CodeNoModel extends Model
  9. {
  10. protected $name = "code_no";
  11. // 自动写入时间戳字段
  12. protected $autoWriteTimestamp = 'int';
  13. // 定义时间戳字段名
  14. protected $createTime = 'create_time';
  15. protected $updateTime = 'update_time';
  16. protected $deleteTime = false;
  17. // 追加属性
  18. protected $append = [
  19. 'create_time_text',
  20. 'update_time_text'
  21. ];
  22. //状态: 0已使用 1正常
  23. const STATUS_USED = 0;
  24. const STATUS_NORMAL = 1;
  25. //生成唯一激活码6位
  26. public static function getCodeNo($len = 6): string
  27. {
  28. $string='abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQEST123456789';
  29. do {
  30. $code = substr(str_shuffle($string), 0, $len);
  31. $cnt = self::where('code_no', $code)->count();
  32. } while ($cnt);
  33. return $code;
  34. }
  35. //添加激活记录
  36. public static function setActivate($uid, $level)
  37. {
  38. $code = self::getCodeNo();
  39. self::create([
  40. 'user_id' => $uid,
  41. 'level' => $level,
  42. 'code_no' => $code,
  43. 'status' => self::STATUS_NORMAL,
  44. ]);
  45. return $code;
  46. }
  47. public function getCreateTimeTextAttr($value, $data)
  48. {
  49. $value = $value ? $value : (isset($data['create_time']) ? $data['create_time'] : '');
  50. return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
  51. }
  52. public function getUpdateTimeTextAttr($value, $data)
  53. {
  54. $value = $value ? $value : (isset($data['update_time']) ? $data['update_time'] : '');
  55. return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
  56. }
  57. protected function setCreateTimeAttr($value)
  58. {
  59. return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
  60. }
  61. protected function setUpdateTimeAttr($value)
  62. {
  63. return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
  64. }
  65. }