Task.php 3.4 KB

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