Task.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace app\common\model\bargain;
  3. use think\Hook;
  4. use app\common\model\BaseModel;
  5. use app\common\library\helper;
  6. /**
  7. * 砍价任务模型
  8. * Class Task
  9. * @package app\common\model\bargain
  10. */
  11. class Task extends BaseModel
  12. {
  13. protected $name = 'bargain_task';
  14. protected $alias = 'task';
  15. protected $type = [
  16. 'is_floor' => 'integer',
  17. 'is_buy' => 'integer',
  18. 'status' => 'integer',
  19. 'is_delete' => 'integer',
  20. ];
  21. /**
  22. * 追加的字段
  23. * @var array $append
  24. */
  25. protected $append = [
  26. 'is_end', // 是否已结束
  27. 'surplus_money', // 剩余砍价金额
  28. 'bargain_rate', // 砍价进度百分比(0-100)
  29. ];
  30. /**
  31. * 订单模型初始化
  32. */
  33. public static function init()
  34. {
  35. parent::init();
  36. // 监听行为管理
  37. $static = new static;
  38. Hook::listen('bargain_task', $static);
  39. }
  40. /**
  41. * 关联用户表
  42. * @return \think\model\relation\BelongsTo
  43. */
  44. public function user()
  45. {
  46. $module = self::getCalledModule() ?: 'common';
  47. return $this->BelongsTo("app\\{$module}\\model\\User");
  48. }
  49. /**
  50. * 获取器:任务结束时间
  51. * @param $value
  52. * @return false|string
  53. */
  54. public function getEndTimeAttr($value)
  55. {
  56. return \format_time($value);
  57. }
  58. /**
  59. * 获取器:活动是否已结束
  60. * @param $value
  61. * @param $data
  62. * @return false|string
  63. */
  64. public function getIsEndAttr($value, $data)
  65. {
  66. return $value ?: $data['end_time'] <= time();
  67. }
  68. /**
  69. * 获取器:剩余砍价金额
  70. * @param $value
  71. * @param $data
  72. * @return false|string
  73. */
  74. public function getSurplusMoneyAttr($value, $data)
  75. {
  76. $maxCutMoney = helper::bcsub($data['goods_price'], $data['floor_price']);
  77. return $value ?: helper::bcsub($maxCutMoney, $data['cut_money']);
  78. }
  79. /**
  80. * 获取器:砍价进度百分比
  81. * @param $value
  82. * @param $data
  83. * @return false|string
  84. */
  85. public function getBargainRateAttr($value, $data)
  86. {
  87. $maxCutMoney = helper::bcsub($data['goods_price'], $data['floor_price']);
  88. $rate = helper::bcdiv($data['cut_money'], $maxCutMoney) * 100;
  89. return $value ?: $rate;
  90. }
  91. /**
  92. * 获取器:砍价金额区间
  93. * @param $value
  94. * @return mixed
  95. */
  96. public function getSectionAttr($value)
  97. {
  98. return json_decode($value, true);
  99. }
  100. /**
  101. * 修改器:砍价金额区间
  102. * @param $value
  103. * @return string
  104. */
  105. public function setSectionAttr($value)
  106. {
  107. return json_encode($value);
  108. }
  109. /**
  110. * 砍价任务详情
  111. * @param $taskId
  112. * @param array $with
  113. * @return static|null
  114. * @throws \think\exception\DbException
  115. */
  116. public static function detail($taskId, $with = [])
  117. {
  118. $model = static::get($taskId, $with);
  119. // 标识砍价任务过期
  120. if (!empty($model) && $model['status'] == 1 && $model->getData('end_time') <= time()) {
  121. $model->save(['status' => 0]);
  122. }
  123. return $model;
  124. }
  125. }