VisitorOrder.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. <?php
  2. namespace app\api\controller\h5;
  3. use app\hander\HelpHander;
  4. use think\facade\Request;
  5. use think\Db;
  6. class VisitorOrder extends Base
  7. {
  8. // 获取我的预约记录
  9. public function list(){
  10. $lists = Db::name('visitor_order')
  11. ->field('id,org_id,status,service_id,service_time_id,name,phone')
  12. ->where('user_id',$this->userId)
  13. ->where('del',0)
  14. ->whereIn('type',[1,2])
  15. ->select();
  16. foreach ($lists as $k=>$v){
  17. $lists[$k]['org_name'] = Db::name('org')->where('id',$v['org_id'])->value('name');
  18. $lists[$k]['title'] = '';
  19. $lists[$k]['day'] = '';
  20. $lists[$k]['start'] = '';
  21. $lists[$k]['end'] = '';
  22. if($v['service_time_id'] > 0){
  23. $time = Db::name('service_time')->where('id',$v['service_time_id'])->find();
  24. $lists[$k]['day'] = $time?$time['day']:'';
  25. $lists[$k]['start'] = date('H:i',strtotime($time['day'].' '.$time['start']));
  26. $lists[$k]['end'] = date('H:i',strtotime($time['day'].' '.$time['end']));
  27. $lists[$k]['title'] = Db::name('service')->where('id',$v['service_id'])->value('title');
  28. $v = $this->autoCheck($v,$time);
  29. $lists[$k]['status'] = $v['status'];
  30. }
  31. $lists[$k]['qrcode'] = Request::domain().'/admin/Qrcode/qrcode?code='.get_qrcode_str('visitor',$v['id']);
  32. }
  33. HelpHander::success($lists);
  34. }
  35. // 获取我的预约记录--小程序
  36. public function list2(){
  37. $type = input('type/d',0);
  38. if(!in_array($type,[0,1,2])){
  39. HelpHander::error('参数错误');
  40. }
  41. $map[] = ['del','=',0];
  42. $map[] = ['user_id','=',$this->userId];
  43. if($type==1){
  44. $map[] = ['status','=',0];
  45. }else if($type==2){
  46. $map[] = ['status','in',[1,4]];
  47. }
  48. $lists = Db::name('visitor_order')->where($map)->select();
  49. $lists = $lists?$lists:[];
  50. foreach ($lists as $k=>$v){
  51. $lists[$k]['org_name'] = Db::name('org')->where('id',$v['org_id'])->value('name');
  52. $lists[$k]['from_user_name'] = Db::name('user')->where('id',$v['from_user_id'])->value('real_name');
  53. $lists[$k]['qrcode'] = Request::domain().'/admin/Qrcode/qrcode?code='.get_qrcode_str('visitor',$v['id']);
  54. }
  55. HelpHander::success($lists);
  56. }
  57. public function last(){
  58. $map[] = ['del','=',0];
  59. $map[] = ['type','=',2];
  60. $map[] = ['user_id','=',$this->userId];
  61. $map[] = ['org_id','=',$this->orgId];
  62. $data = [
  63. 'name' => '',
  64. 'phone' => '',
  65. 'access' => ''
  66. ];
  67. $info = Db::name('visitor_order')->where($map)->order('id desc')->find();
  68. if($info){
  69. $data['name'] = $info['name'];
  70. $data['phone'] = $info['phone'];
  71. $data['access'] = $info['access'];
  72. }
  73. HelpHander::success($data);
  74. }
  75. // 提交确认
  76. public function order(){
  77. $type = input('type');
  78. $serviceTimeId = input('serviceTimeId',0);
  79. $name = input('name','','trim');
  80. $phone = input('phone','','trim');
  81. if(!in_array($type,[1,2])){
  82. HelpHander::error('参数错误');
  83. }
  84. if($type == 1 && $serviceTimeId <= 0){
  85. HelpHander::error('未选择预约时间');
  86. }
  87. if(!$name){
  88. HelpHander::error('请填写姓名');
  89. }
  90. if(!check_mobile($phone)){
  91. HelpHander::error('手机号格式不正确');
  92. }
  93. $data = [
  94. 'name' => $name,
  95. 'phone' => $phone,
  96. 'org_id' => $this->orgId,
  97. 'user_id' => $this->userId,
  98. 'status' => 0,
  99. 'type' => $type,
  100. 'create_time' => date('Y-m-d H:i:s')
  101. ];
  102. if($type == 1){
  103. $service = Db::name('service_time')
  104. ->alias('st')
  105. ->join('service s','s.id = st.service_id')
  106. ->where('st.id',$serviceTimeId)
  107. ->where('s.enable',1)
  108. ->where('s.del',0)
  109. ->where('st.enable',1)
  110. ->where('st.del',0)
  111. ->find();
  112. if(!$service){
  113. HelpHander::error('该服务已关闭');
  114. }
  115. // 检查时间段是否已过
  116. $endTime = strtotime($service['day'].' '.$service['end']);
  117. if(time() >= $endTime){
  118. HelpHander::error('该时间段已过,无法预约');
  119. }
  120. // 检查是否还有名额
  121. $count = Db::name('visitor_order')
  122. ->where('service_time_id',$serviceTimeId)
  123. ->whereIn('status',[0,1,2,3])
  124. ->where('del',0)
  125. ->count();
  126. if($service['limit'] <= $count){
  127. HelpHander::error('该时间段已无预约名额');
  128. }
  129. // 检查用户是否已预约改时间段
  130. $ret = Db::name('visitor_order')
  131. ->where('user_id',$this->userId)
  132. ->where('service_time_id',$serviceTimeId)
  133. ->whereIn('status',[0,1,2,3])
  134. ->where('del',0)
  135. ->find();
  136. if($ret){
  137. HelpHander::error('已预约该时段,无重复预约');
  138. }
  139. $data['service_id'] = $service['service_id'];
  140. $data['service_time_id'] = $serviceTimeId;
  141. }
  142. $add = Db::name('visitor_order')->insert($data);
  143. if ($add) {
  144. HelpHander::success([],'提交成功');
  145. }else{
  146. HelpHander::error('提交失败');
  147. }
  148. }
  149. // 提交确认--小程序
  150. public function order2(){
  151. $type = 3;
  152. $company = input('company','','trim');
  153. $name = input('name','','trim');
  154. $phone = input('phone','','trim');
  155. $plateSn = input('plateSn','','trim');
  156. $bookTime = input('bookTime','','trim');
  157. $content = input('content','','trim');
  158. $fromUserId = input('fromUserId/d',0);
  159. if(!$fromUserId){
  160. HelpHander::error('参数错误');
  161. }
  162. if($fromUserId == $this->userId){
  163. HelpHander::error('不能填写自己分享的预约单');
  164. }
  165. if(!$company){
  166. HelpHander::error('请填写单位');
  167. }
  168. if(!$name){
  169. HelpHander::error('请填写姓名');
  170. }
  171. if(!check_mobile($phone)){
  172. HelpHander::error('手机号格式不正确');
  173. }
  174. if(!$bookTime){
  175. HelpHander::error('请选择到访时间');
  176. }
  177. if(!$content){
  178. HelpHander::error('请填写到访事由');
  179. }
  180. $data = [
  181. 'name' => $name,
  182. 'phone' => $phone,
  183. 'org_id' => $this->orgId,
  184. 'user_id' => $this->userId,
  185. 'from_user_id' => $fromUserId,
  186. 'status' => 0,
  187. 'type' => $type,
  188. 'create_time' => date('Y-m-d H:i:s'),
  189. 'book_time' => $bookTime,
  190. 'plate_sn' => $plateSn,
  191. 'company' => $company,
  192. 'content' => $content
  193. ];
  194. $ret = Db::name('visitor_order')->insert($data);
  195. if ($ret) {
  196. HelpHander::success([],'提交成功');
  197. }else{
  198. HelpHander::error('提交失败');
  199. }
  200. }
  201. public function detail(){
  202. $id = input('id/d',0);
  203. $info = Db::name('visitor_order')->where('id',$id)->where('del',0)->find();
  204. if($info){
  205. $info['ORG_NAME'] = Db::name('org')->where('id',$info['org_id'])->value('name');
  206. $info['from_user_name'] = Db::name('user')->where('id',$info['from_user_id'])->value('real_name');
  207. $info['qrcode'] = Request::domain().'/admin/Qrcode/qrcode?code='.get_qrcode_str('visitor',$info['id']);
  208. }else{
  209. HelpHander::error('记录不存在');
  210. }
  211. HelpHander::success($info);
  212. }
  213. // 自动检测预约已失效
  214. private function autoCheck($info,$time){
  215. if($info['status'] == 1){
  216. $curTime = time();
  217. $endTime = strtotime($time['day'].' '.$time['end']);
  218. if($curTime >= $endTime){
  219. Db::name('visitor_order')->where('id',$info['id'])->update(['status'=>3]);
  220. $info['status'] = 3;
  221. }
  222. }
  223. return $info;
  224. }
  225. }