Order.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. namespace app\admin\model\vip;
  3. use addons\vip\library\Service;
  4. use think\Db;
  5. use think\Exception;
  6. use think\Model;
  7. class Order extends Model
  8. {
  9. // 表名
  10. protected $name = 'vip_order';
  11. // 自动写入时间戳字段
  12. protected $autoWriteTimestamp = 'int';
  13. // 定义时间戳字段名
  14. protected $createTime = 'createtime';
  15. protected $updateTime = 'updatetime';
  16. protected $deleteTime = false;
  17. // 追加属性
  18. protected $append = [
  19. 'paytime_text',
  20. 'status_text'
  21. ];
  22. public function getOriginData()
  23. {
  24. return $this->origin;
  25. }
  26. public static function init()
  27. {
  28. self::beforeUpdate(function ($row) {
  29. $changedData = $row->getChangedData();
  30. $originData = $row->getOriginData();
  31. if (isset($changedData['status'])) {
  32. if ($changedData['status'] == 'paid') {
  33. $recordInfo = Record::get($row['record_id']);
  34. $userVipInfo = Service::getVipInfo($row['user_id']);
  35. if ($userVipInfo && $recordInfo && $userVipInfo['level'] > $recordInfo['level']) {
  36. throw new Exception("用户当前VIP等级过高,无法修改");
  37. }
  38. }
  39. }
  40. });
  41. self::afterUpdate(function ($row) {
  42. $changedData = $row->getChangedData();
  43. $originData = $row->getOriginData();
  44. if (isset($changedData['status'])) {
  45. if ($changedData['status'] == 'paid') {
  46. Db::name("vip_order")->where('id', $row['id'])->update(['status' => $originData['status']]);
  47. \addons\vip\library\Order::settle($row['orderid'], $row['amount']);
  48. } elseif ($originData['status'] == 'paid') {
  49. Db::name("vip_order")->where('id', $row['id'])->update(['status' => $originData['status']]);
  50. \addons\vip\library\Order::unsettle($row['orderid']);
  51. }
  52. }
  53. });
  54. }
  55. public function getStatusList()
  56. {
  57. return ['created' => __('Status created'), 'paid' => __('Status paid'), 'expired' => __('Status expired')];
  58. }
  59. public function getPaytimeTextAttr($value, $data)
  60. {
  61. $value = $value ? $value : (isset($data['paytime']) ? $data['paytime'] : '');
  62. return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
  63. }
  64. public function getStatusTextAttr($value, $data)
  65. {
  66. $value = $value ? $value : (isset($data['status']) ? $data['status'] : '');
  67. $list = $this->getStatusList();
  68. return isset($list[$value]) ? $list[$value] : '';
  69. }
  70. protected function setPaytimeAttr($value)
  71. {
  72. return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
  73. }
  74. public function user()
  75. {
  76. return $this->belongsTo('\app\common\model\User', "user_id", "id", [], 'LEFT')->setEagerlyType(0);
  77. }
  78. public function vip()
  79. {
  80. return $this->belongsTo('Vip', "vip_id", "id", [], 'LEFT')->setEagerlyType(0);
  81. }
  82. }