LimitBuy.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2018/3/20 0020
  6. * Time: 下午 3:46
  7. */
  8. namespace app\backend\modules\goods\models;
  9. use app\common\traits\MessageTrait;
  10. use app\common\models\goods\GoodsLimitBuy;
  11. use app\Jobs\LimitBuyEndJob;
  12. use Carbon\Carbon;
  13. class LimitBuy extends GoodsLimitBuy
  14. {
  15. use MessageTrait;
  16. public static function relationSave($goodsId, $data, $operate)
  17. {
  18. if (!$goodsId) {
  19. return false;
  20. }
  21. if (!$data) {
  22. return false;
  23. }
  24. $saleModel = self::getModel($goodsId, $operate);
  25. if ($operate == 'deleted') {
  26. return $saleModel->delete();
  27. }
  28. $saveData['goods_id'] = $goodsId;
  29. $saveData['uniacid'] = \YunShop::app()->uniacid;
  30. $saveData['status'] = empty($data['status']) ? 0 : $data['status'];
  31. $saveData['start_time'] = $data['start_time'];
  32. $saveData['end_time'] = $data['end_time'];
  33. $saveData['display_name'] = $data['display_name'];
  34. $changeTime = 0;
  35. if($saleModel->end_time <> $saveData['end_time'] && $saveData['end_time'] >= time() && $saveData['status']){
  36. $changeTime = 1;
  37. }
  38. $saleModel->setRawAttributes($saveData);
  39. if ($saleModel->getOriginal('start_time') != $saveData['start_time'] || $saleModel->getOriginal('end_time') != $saveData['end_time']) {
  40. $goods = self::getGoodsById($goodsId);
  41. $saleModel->original_stock = $goods->stock;
  42. }
  43. $res = $saleModel->save();
  44. if($res && $changeTime){
  45. //触发限时购延时队列任务(用于后续触发限时购商品下架事件)
  46. $diff = ($saveData['end_time'] - time()) + 30;
  47. $job = (new LimitBuyEndJob($saleModel->toArray()))->delay(Carbon::now()->addSeconds(intval($diff)));
  48. dispatch($job);
  49. }
  50. return $res;
  51. }
  52. public static function getModel($goodsId, $operate)
  53. {
  54. $model = false;
  55. if ($operate != 'created') {
  56. $model = static::where(['goods_id' => $goodsId])->first();
  57. }
  58. !$model && $model = new static;
  59. return $model;
  60. }
  61. public function getGoodsById($goodsId)
  62. {
  63. return Goods::find($goodsId);
  64. }
  65. }