Appointment.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <?php
  2. namespace app\admin\controller;
  3. use app\admin\controller\base\Permissions;
  4. use app\common\model\Appointment as appointmentModel;
  5. use time\DateHelper;
  6. class Appointment extends Permissions
  7. {
  8. private function getModel()
  9. {
  10. return new appointmentModel();
  11. }
  12. public function index()
  13. {
  14. $pid = $this->request->param('pid', 0, 'intval');
  15. if ($this->request->isAjax()) {
  16. $post = $this->request->param();
  17. $where = [
  18. 'provider_id' => $pid
  19. ];
  20. if (isset($post['ids']) and !empty($post['ids'])) {
  21. $where['id'] = ['in', $post['ids']];
  22. }
  23. if (isset($post["daytime"]) and !empty($post["daytime"])) {
  24. $timerang = explode(' - ', $post["daytime"]);
  25. $min_time = strtotime($timerang[0]);
  26. $max_time = $timerang[0] == $timerang[1] ? $min_time + 24 * 3600 - 1 : strtotime($timerang[1]??'');
  27. $where["daytime"] = [['>=', $min_time], ['<=', $max_time]];
  28. }
  29. if (isset($post["create_time"]) and !empty($post["create_time"])) {
  30. $timerang = explode(' - ', $post["create_time"]);
  31. $min_time = strtotime($timerang[0]);
  32. $max_time = $timerang[0] == $timerang[1] ? $min_time + 24 * 3600 - 1 : strtotime($timerang[1]??'');
  33. $where["create_time"] = [['>=', $min_time], ['<=', $max_time]];
  34. }
  35. $model = $this->getModel();
  36. $count = $model->where($where)->count();
  37. $data = $model->where($where)->page($post['page']??0, $post['limit']??15)->order('daytime desc')->select();
  38. foreach ($data as $key => $value) {
  39. $value['specialist_name'] = $value->specialist->name;
  40. $data[$key] = $value;
  41. }
  42. return array('code' => 0, 'count' => $count, 'data' => $data);
  43. } else {
  44. return $this->fetch();
  45. }
  46. }
  47. public function publish()
  48. {
  49. $id = $this->request->param('id', 0, 'intval');
  50. $pid = $this->request->param('pid', 0, 'intval');
  51. $this->assign('pid', $pid);
  52. $post = $this->request->post();
  53. $post['provider_id'] = $pid;
  54. if ($this->request->isPost()) {
  55. if (isset($post['start_time']) && !empty($post['start_time'])) {
  56. $timerang = explode(' - ', $post["start_time"]);
  57. $min_time = strtotime(str_replace(['年', '月'], '-', $timerang[0]));
  58. $max_time = $timerang[0] == $timerang[1] ? $min_time + 24 * 3600 - 1 : strtotime(str_replace(['年', '月'], '-', $timerang[1]??''));
  59. $post['start_time'] = $min_time;
  60. $post['end_time'] = $max_time;
  61. }
  62. if (isset($post['morning_start_time']) && !empty($post['morning_start_time'])) {
  63. $timerang = explode(' - ', $post["morning_start_time"]);
  64. $post['morning_start_time'] = $timerang[0];
  65. $post['morning_end_time'] = $timerang[1];
  66. }
  67. if (isset($post['afternoon_start_time']) && !empty($post['afternoon_start_time'])) {
  68. $timerang = explode(' - ', $post["afternoon_start_time"]);
  69. $post['afternoon_start_time'] = $timerang[0];
  70. $post['afternoon_end_time'] = $timerang[1];
  71. }
  72. if (isset($post['night_start_time']) && !empty($post['night_start_time'])) {
  73. $timerang = explode(' - ', $post["night_start_time"]);
  74. $post['night_start_time'] = $timerang[0];
  75. $post['night_end_time'] = $timerang[1];
  76. }
  77. //验证
  78. $validate = new \think\Validate([
  79. ['title|服务名称', 'max:50'],
  80. ['provider_id', 'require|number'],
  81. ['phone|咨询电话', 'max:50'],
  82. ['start_time', 'number', '排号日期格式不对'],
  83. ['end_time', 'number', '排号日期格式不对'],
  84. ['morning_num|上午放号个数', 'number'],
  85. ['morning_start_time', 'length:8', '上午时间格式不对'],
  86. ['morning_end_time', 'length:8', '上午时间格式不对'],
  87. ['afternoon_num|下午放号个数', 'number'],
  88. ['afternoon_start_time', 'length:8', '下午时间格式不对'],
  89. ['afternoon_end_time', 'length:8', '下午时间格式不对'],
  90. ['night_num|晚上放号个数', 'number'],
  91. ['night_start_time', 'length:8', '晚上时间格式不对'],
  92. ['night_end_time', 'length:8', '晚上时间格式不对'],
  93. ]);
  94. if (!$validate->check($post)) {
  95. $this->error('提交失败:' . $validate->getError());
  96. }
  97. } else {
  98. $this->assign('phone', (new \app\common\model\Specialist())->where('id', $pid)->value('phone'));
  99. }
  100. if ($id > 0) {
  101. //修改
  102. } else {
  103. //新增
  104. if ($this->request->isPost()) {
  105. //判断是否时间跨度重叠
  106. $exits = $this->getModel()->where(['provider_id' => $pid, 'daytime' => [['>=', $post['start_time']], ['<=', $post['end_time']]]])->count();
  107. if ($exits > 0) {
  108. $this->error('该时间跨度内,已存在排号,请重新选择时间');
  109. }
  110. //生成号源
  111. $daylist = DateHelper::dateTimeList(date('Y-m-d', $post['start_time']), date('Y-m-d', $post['end_time']), true);
  112. if (count($daylist) == 2 && end($daylist) == current($daylist)) {
  113. array_pop($daylist);
  114. }
  115. $addressId = (new \app\common\model\Specialist())->where('id', $post['provider_id'])->value('address_id');
  116. foreach ($daylist as $datetime) {
  117. $post['daytime'] = strtotime($datetime);
  118. $post['address_id'] = $addressId;
  119. if (false == $this->getModel()->allowField(true)->save($post)) {
  120. $this->error('添加失败');
  121. }
  122. }
  123. $this->success('添加成功', 'index', ['pid' => $pid]);
  124. } else {
  125. return $this->fetch();
  126. }
  127. }
  128. }
  129. public function delete()
  130. {
  131. if ($this->request->isAjax()) {
  132. $id = $this->request->param('id', 0, 'intval');
  133. if (false == $this->getModel()->where('id', $id)->delete()) {
  134. $this->error('删除失败');
  135. } else {
  136. $this->success('删除成功', 'index');
  137. }
  138. }
  139. }
  140. public function deletes()
  141. {
  142. if ($this->request->isAjax()) {
  143. $post = $this->request->param();
  144. $ids = $post['ids'];
  145. if ($this->getModel()->where('id', 'in', $ids)->delete()) {
  146. $this->success('删除成功');
  147. }
  148. }
  149. }
  150. }