Reserve.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
  9. * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
  10. * =========================================================
  11. */
  12. namespace addon\store\api\controller;
  13. use addon\store\model\Reserve as ReserveModel;
  14. use app\api\controller\BaseApi;
  15. use app\model\system\UserGroup;
  16. class Reserve extends BaseApi
  17. {
  18. /**
  19. * 预约状态
  20. * @return false|string
  21. */
  22. public function status()
  23. {
  24. $reserve_state = ( new ReserveModel )->reserve_state;
  25. return $this->response($this->success($reserve_state));
  26. }
  27. /**
  28. * 添加预约
  29. * @return mixed
  30. */
  31. public function addReserve()
  32. {
  33. $token = $this->checkToken();
  34. if ($token[ 'code' ] < 0) {
  35. return $this->response($token);
  36. }
  37. $goods = json_decode($this->params[ 'goods' ], true) ?? [];
  38. $store_id = $this->params[ 'store_id' ] ?? 0;
  39. $date = $this->params[ 'date' ] ?? '';
  40. $time = $this->params[ 'time' ] ?? '';
  41. $remark = $this->params[ 'remark' ] ?? '';
  42. $reserve_model = new ReserveModel();
  43. $res = $reserve_model->addReserve([
  44. 'site_id' => $this->site_id,
  45. 'app_module' => $this->app_module,
  46. 'member_id' => $this->member_id,
  47. 'goods' => $goods,
  48. 'store_id' => $store_id,
  49. 'date' => $date,
  50. 'time' => $time,
  51. 'remark' => $remark,
  52. 'source' => 'member'
  53. ]);
  54. return $this->response($res);
  55. }
  56. /**
  57. * 修改预约
  58. * @return mixed|void
  59. */
  60. public function updateReserve()
  61. {
  62. $token = $this->checkToken();
  63. if ($token[ 'code' ] < 0) {
  64. return $this->response($token);
  65. }
  66. $goods = json_decode($this->params[ 'goods' ], true) ?? [];
  67. $store_id = $this->params[ 'store_id' ] ?? 0;
  68. $date = $this->params[ 'date' ] ?? '';
  69. $time = $this->params[ 'time' ] ?? '';
  70. $remark = $this->params[ 'remark' ] ?? '';
  71. $reserve_id = $this->params[ 'reserve_id' ] ?? 0;
  72. $reserve_model = new ReserveModel();
  73. $res = $reserve_model->editReserve([
  74. 'site_id' => $this->site_id,
  75. 'app_module' => $this->app_module,
  76. 'member_id' => $this->member_id,
  77. 'goods' => $goods,
  78. 'store_id' => $store_id,
  79. 'date' => $date,
  80. 'time' => $time,
  81. 'remark' => $remark,
  82. 'reserve_id' => $reserve_id,
  83. ]);
  84. return $this->response($res);
  85. }
  86. /**
  87. * 预约列表
  88. */
  89. public function lists()
  90. {
  91. $token = $this->checkToken();
  92. if ($token[ 'code' ] < 0) {
  93. return $this->response($token);
  94. }
  95. $page = isset($this->params[ 'page' ]) ? $this->params[ 'page' ] : 1;
  96. $page_size = isset($this->params[ 'page_size' ]) ? $this->params[ 'page_size' ] : PAGE_LIST_ROWS;
  97. $search_text = isset($this->params[ 'search_text' ]) ? $this->params[ 'search_text' ] : '';
  98. $reserve_state = isset($this->params[ 'reserve_state' ]) ? $this->params[ 'reserve_state' ] : 'all';
  99. $condition = [
  100. [ 'noy.site_id', '=', $this->site_id ],
  101. [ 'noy.member_id', '=', $this->member_id ],
  102. ];
  103. if ($reserve_state != 'all') {
  104. $condition[] = [ 'noy.reserve_state', '=', $reserve_state ];
  105. }
  106. if (!empty($search_text)) {
  107. $condition[] = [ 'noy.reserve_item', 'like', '%' . $search_text . '%' ];
  108. }
  109. $field = 'noy.store_id, noy.member_id, noy.remark, noy.reserve_id, noy.reserve_name, noy.reserve_state_name, noy.reserve_state, noy.reserve_time, noy.reserve_item, noy.create_time, noy.source, nm.headimg, nm.nickname, nm.mobile, os.store_name';
  110. $reserve_model = new ReserveModel();
  111. $list = $reserve_model->getReservePageList($condition, $page, $page_size, 'noy.create_time desc', $field);
  112. foreach ($list[ 'data' ][ 'list' ] as $k => $v) {
  113. $list[ 'data' ][ 'list' ][ $k ][ 'item' ] = $reserve_model->getReserveItemList([
  114. [
  115. 'oyi.reserve_id', '=', $v[ 'reserve_id' ]
  116. ]
  117. ], 'g.goods_name,sku.service_length,g.goods_id,g.sku_id,g.price,ys.username,oyi.reserve_user_id,sku.sku_image,sku.sku_images', 'reserve_item_id desc', 'oyi',
  118. [
  119. [ 'goods g', 'g.sku_id = oyi.reserve_goods_sku_id', 'right' ],
  120. [ 'goods_sku sku', 'sku.sku_id = oyi.reserve_goods_sku_id', 'right' ],
  121. [ 'user ys', 'oyi.reserve_user_id = ys.uid', 'left' ]
  122. ])[ 'data' ];
  123. }
  124. return $this->response($list);
  125. }
  126. /**
  127. * 预约设置
  128. * @return mixed
  129. */
  130. public function getConfig()
  131. {
  132. $model = new ReserveModel();
  133. $store_id = isset($this->params[ 'store_id' ]) ? $this->params[ 'store_id' ] : 0;
  134. $config = $model->getReserveConfig($this->site_id, $store_id);
  135. return $this->response($config);
  136. }
  137. /**
  138. * 取消预约
  139. * @return array
  140. */
  141. public function cancel()
  142. {
  143. $token = $this->checkToken();
  144. if ($token[ 'code' ] < 0) {
  145. return $this->response($token);
  146. }
  147. $reserve_id = $this->params[ 'reserve_id' ] ?? 0;
  148. $reserve_model = new ReserveModel();
  149. $res = $reserve_model->cancelReserve($reserve_id, $this->site_id, $this->member_id);
  150. return $this->response($res);
  151. }
  152. /**
  153. * 删除预约
  154. * @return array
  155. */
  156. public function deleteReserve()
  157. {
  158. $token = $this->checkToken();
  159. if ($token[ 'code' ] < 0) {
  160. return $this->response($token);
  161. }
  162. $reserve_id = $this->params[ 'reserve_id' ] ?? 0;
  163. $reserve_model = new ReserveModel();
  164. $res = $reserve_model->deleteReserve($reserve_id, $this->site_id, $this->member_id);
  165. return $this->response($res);
  166. }
  167. /**
  168. * 预约详情
  169. * @return mixed|void
  170. */
  171. public function detail()
  172. {
  173. $token = $this->checkToken();
  174. if ($token[ 'code' ] < 0) {
  175. return $this->response($token);
  176. }
  177. $reserve_id = $this->params[ 'reserve_id' ] ?? 0;
  178. $model = new ReserveModel();
  179. $info = $model->getReserveInfo([
  180. [ 'oy.reserve_id', '=', $reserve_id ],
  181. [ 'oy.site_id', '=', $this->site_id ],
  182. [ 'oy.member_id', '=', $this->member_id ],
  183. ], 'oy.*, nm.headimg, nm.nickname, nm.mobile,os.store_name, os.longitude,os.latitude,os.province_id,os.city_id,os.district_id,os.community_id,os.address,os.full_address', 'oy', [
  184. [ 'member nm', 'oy.member_id = nm.member_id', 'left' ],
  185. [ 'store os', 'oy.store_id = os.store_id', 'left' ]
  186. ])[ 'data' ];
  187. if (empty($info)) {
  188. return $this->response($this->error('', '未获取到预约信息'));
  189. }
  190. $info[ 'item' ] = $model->getReserveItemList([
  191. [
  192. 'oyi.reserve_id', '=', $reserve_id
  193. ]
  194. ], 'g.goods_name,sku.service_length,g.goods_id,g.sku_id,g.price,ys.username,oyi.reserve_user_id,sku.sku_image', 'reserve_item_id desc', 'oyi',
  195. [
  196. [ 'goods g', 'g.sku_id = oyi.reserve_goods_sku_id', 'right' ],
  197. [ 'goods_sku sku', 'sku.sku_id = oyi.reserve_goods_sku_id', 'right' ],
  198. [ ' user ys', 'oyi.reserve_user_id = ys.uid', 'left' ]
  199. ])[ 'data' ];
  200. return $this->response($this->success($info));
  201. }
  202. /**
  203. * 员工管理
  204. * @return mixed
  205. */
  206. public function servicer()
  207. {
  208. $token = $this->checkToken();
  209. if ($token[ 'code' ] < 0) return $this->response($token);
  210. $page_index = isset($this->params[ 'page' ]) ? $this->params[ 'page' ] : 1;
  211. $page_size = isset($this->params[ 'page_size' ]) ? $this->params[ 'page_size' ] : PAGE_LIST_ROWS;
  212. $search_text = isset($this->params[ 'search_text' ]) ? $this->params[ 'search_text' ] : '';
  213. $store_id = isset($this->params[ 'store_id' ]) ? $this->params[ 'store_id' ] : '';
  214. $condition = [
  215. [ 'u.site_id', '=', $this->site_id ],
  216. ];
  217. $condition[] = [ 'ug.store_id', '=', $store_id ];
  218. if (!empty($search_text)) {
  219. $condition[] = [ 'u.username', 'like', "%{$search_text}%" ];
  220. }
  221. $user_model = new UserGroup();
  222. $result = $user_model->getUserPageList($condition, $page_index, $page_size, 'u.uid desc', 'u.username,u.status,u.uid', 'ug', [
  223. [ 'user u', 'ug.uid=u.uid', 'left' ]
  224. ]);
  225. return $this->response($result);
  226. }
  227. /**
  228. * 查询所有员工
  229. * @return mixed
  230. */
  231. public function servicerList()
  232. {
  233. $token = $this->checkToken();
  234. if ($token[ 'code' ] < 0) return $this->response($token);
  235. $search_text = isset($this->params[ 'search_text' ]) ? $this->params[ 'search_text' ] : '';
  236. $store_id = isset($this->params[ 'store_id' ]) ? $this->params[ 'store_id' ] : '';
  237. $condition = [
  238. [ 'u.site_id', '=', $this->site_id ],
  239. ];
  240. $condition[] = [ 'ug.store_id', '=', $store_id ];
  241. if (!empty($search_text)) {
  242. $condition[] = [ 'u.username', 'like', "%{$search_text}%" ];
  243. }
  244. $user_model = new UserGroup();
  245. $result = $user_model->getUserList($condition, 'u.username,u.status,u.uid,u.group_name', 'u.uid desc', 'ug', [
  246. [ 'user u', 'ug.uid=u.uid', 'left' ]
  247. ]);
  248. return $this->response($result);
  249. }
  250. /**
  251. * 预约时间设置
  252. * @return mixed
  253. */
  254. public function getTimeConfig()
  255. {
  256. $token = $this->checkToken();
  257. if ($token[ 'code' ] < 0) return $this->response($token);
  258. $model = new ReserveModel();
  259. $store_id = isset($this->params[ 'store_id' ]) ? $this->params[ 'store_id' ] : '';
  260. $config = $model->getReserveConfig($this->site_id, $store_id);
  261. $time = strtotime(date('Y-m-d'));
  262. if ($config[ 'data' ][ 'value' ][ 'interval' ] == 30) $config[ 'data' ][ 'value' ][ 'interval' ] = "0.5";
  263. if ($config[ 'data' ][ 'value' ][ 'interval' ] == 60) $config[ 'data' ][ 'value' ][ 'interval' ] = "1";
  264. if ($config[ 'data' ][ 'value' ][ 'interval' ] == 90) $config[ 'data' ][ 'value' ][ 'interval' ] = "1.5";
  265. if ($config[ 'data' ][ 'value' ][ 'interval' ] == 120) $config[ 'data' ][ 'value' ][ 'interval' ] = "2";
  266. $config[ 'data' ][ 'value' ][ 'start_time' ] = time_to_date($time + $config[ 'data' ][ 'value' ][ 'start' ], "H:i");
  267. $config[ 'data' ][ 'value' ][ 'end_time' ] = time_to_date($time + $config[ 'data' ][ 'value' ][ 'end' ], "H:i");
  268. return $this->response($config);
  269. }
  270. }