Event.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace addons\qingdong\model;
  3. use addons\qingdong\model\Event as EventModel;
  4. use think\Exception;
  5. use think\Model;
  6. use traits\model\SoftDelete;
  7. /**
  8. *日程提醒
  9. */
  10. class Event Extends Model {
  11. use SoftDelete;
  12. // 表名,不含前缀
  13. protected $name = 'qingdong_event';
  14. const CUSTOMER_TYPE = 1;//客户
  15. const CONTACTS_TYPE = 2;//联系人
  16. const CONTRACT_TYPE = 3;//合同
  17. const LEADS_TYPE = 4;//线索
  18. const RECEIVABLES_TYPE = 5;//回款记录
  19. // 开启自动写入时间戳字段
  20. protected $autoWriteTimestamp = 'int';
  21. // 定义时间戳字段名
  22. protected $createTime = 'createtime';
  23. protected $updateTime = 'updatetime';
  24. protected $deleteTime = 'deletetime';
  25. public function getCreatetimeAttr($value) {
  26. return date('Y-m-d H:i:s', $value);
  27. }
  28. //创建日程
  29. public static function createEvent($params) {
  30. $staff = Staff::info();
  31. //1:5分钟前 2:15分钟前 3:30分钟前 4:一个小时前 5:两个小时前 6:一天前 7:两天前 8:一周前
  32. if (isset($params['remindtype'])) {
  33. switch ($params['remindtype']) {
  34. case 1:
  35. $time = '-5 minutes';
  36. break;
  37. case 2:
  38. $time = '-15 minutes';
  39. break;
  40. case 3:
  41. $time = '-30 seconds';
  42. break;
  43. case 4:
  44. $time = '-1 hours ';
  45. break;
  46. case 5:
  47. $time = '-2 hours ';
  48. break;
  49. case 6:
  50. $time = '-1 days';
  51. break;
  52. case 7:
  53. $time = '-7 days';
  54. break;
  55. case 8:
  56. $time = '-1 week';
  57. break;
  58. default:
  59. $time = '-5 minutes';
  60. }
  61. $params['remind_time'] = date('Y-m-d H:i:s', strtotime($time, strtotime($params['start_time'])));
  62. } else {
  63. $params['remind_time'] = date('Y-m-d H:i:s', strtotime('+5 seconds', strtotime($params['start_time'])));
  64. }
  65. $params['staff_id'] = $staff->id;
  66. $Model = new self;
  67. $result = $Model->allowField(true)->save($params);
  68. if (false === $result) {
  69. // 验证失败 输出错误信息
  70. throw new Exception($Model->getError());
  71. }
  72. return true;
  73. }
  74. /**
  75. *变更状态
  76. */
  77. public static function changeStatus($id, $status) {
  78. $model = new self();
  79. if ($model->save(['status' => $status], ['id' => $id]) == false) {
  80. throw new Exception('变更失败');
  81. }
  82. return true;
  83. }
  84. //根据时间获取列表
  85. public static function getTimeList($start_time, $end_time) {
  86. $staff = Staff::info();
  87. $model = new EventModel();
  88. $start_time = $start_time . ' 00:00:00';
  89. $end_time = $end_time . ' 23:59:59';
  90. $events = $model->where([
  91. 'staff_id' => $staff->id
  92. ])->where(function ($query) use ($start_time, $end_time) {
  93. $query->where(['start_time' => ['between', [$start_time, $end_time]]])->whereOr([
  94. 'end_time' => [
  95. 'between',
  96. [
  97. $start_time,
  98. $end_time
  99. ]
  100. ]
  101. ]);
  102. })->select();
  103. $data = [];
  104. $start_time = strtotime($start_time);
  105. $end_time = strtotime($end_time);
  106. for ($start_time; $start_time <= $end_time; $start_time = strtotime('+1 day', $start_time)) {
  107. $time = date('Y-m-d', $start_time);
  108. $data[$time] = [];
  109. foreach ($events as $k => $v) {
  110. if (strtotime($v['start_time']) <= $start_time + 86400 - 1 && strtotime($v['end_time']) >= $start_time) {
  111. $data[$time][] = $v;
  112. }
  113. }
  114. }
  115. foreach ($data as &$times) {
  116. foreach ($times as &$ves) {
  117. $ves['start_time'] = date('Y-m-d H:i', strtotime($ves['start_time']));
  118. $ves['end_time'] = date('Y-m-d H:i', strtotime($ves['end_time']));
  119. }
  120. }
  121. return $data;
  122. }
  123. //负责人
  124. public function staff() {
  125. return $this->hasOne(Staff::class, 'id', 'staff_id')->field('id,name');
  126. }
  127. }