OrderController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. <?php
  2. namespace addons\ReservationService\api\modules\v1\controllers;
  3. use addons\ReservationService\common\enums\ReservationServiceEnum;
  4. use addons\ReservationService\common\services\OrderService;
  5. use addons\ReservationService\common\services\SecondaryCardService;
  6. use api\controllers\OnAuthController;
  7. use common\enums\ClerkEnum;
  8. use common\models\mall\MallAddons;
  9. use Yii;
  10. use yii\helpers\Json;
  11. use function GuzzleHttp\Psr7\str;
  12. class OrderController extends OnAuthController
  13. {
  14. public $modelClass = '';
  15. /**
  16. * 不用进行登录验证的方法
  17. *
  18. * 例如: ['index', 'update', 'create', 'view', 'delete']
  19. * 默认全部需要验证
  20. *
  21. * @var array
  22. */
  23. protected $authOptional = [];
  24. /**
  25. * 订单列表
  26. * @return mixed|null
  27. */
  28. public function actionIndex()
  29. {
  30. $data = Yii::$app->request->get();
  31. $valid = Yii::$app->services->validate->validate($data, [
  32. [['limit', 'page', 'service_status'], 'integer'],
  33. [['order_type'], 'safe'],
  34. ]);
  35. if ($valid === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  36. $data['staff_user_id'] = $this->user_id;
  37. $data['reservation_model'] = [0,2];
  38. $ret = (new OrderService())->page($this->mall_id, $data);
  39. return is_string($ret) ? $this->error($ret) : $this->success('获取成功', $ret);
  40. }
  41. /**
  42. * 订单详情
  43. * @return mixed|null
  44. */
  45. public function actionDetail()
  46. {
  47. $data = Yii::$app->request->get();
  48. $valid = Yii::$app->services->validate->validate($data, [
  49. [['id'], 'integer'],
  50. [['id'], 'required']
  51. ]);
  52. if ($valid === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  53. // $ret = (new OrderService())->getDetailByCodeOrId($this->mall_id, $this->user_id, '', $data['id'], $data['store_id']);
  54. $ret = (new OrderService())->getDetailById($this->mall_id, $this->user_id, $data['id']);
  55. return is_string($ret) ? $this->error($ret) : $this->success('获取成功', $ret);
  56. }
  57. /**
  58. * 核销 通过订单ID进行核销
  59. *
  60. * @return string
  61. */
  62. public function actionUnderwriter()
  63. {
  64. $data = Yii::$app->request->get();
  65. $valid = Yii::$app->services->validate->validate($data, [
  66. [['id'], 'integer'],
  67. [['id'], 'required'],
  68. [['code','clerk_nums'], 'safe'],
  69. ]);
  70. if ($valid === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  71. if(!empty($data['code'])){
  72. $code = $data['code'];
  73. $code_pre = $code[0].$code[1];
  74. switch ($code_pre) {
  75. case ClerkEnum::SECONDARY_CARD_CLERK_CODE_PRE:
  76. $params['mall_id'] = $this->mall_id;
  77. $params['clerk_user_id'] = $this->user_id ?: 0;
  78. $params['user_id'] = $this->user_id;
  79. $ret = SecondaryCardService::underwriter($params);
  80. return is_string($ret) ? $this->error($ret) : $this->success('核销成功');
  81. }
  82. }
  83. $ret = (new OrderService())->underwriter($this->mall_id, $this->user_id, $data['id']);
  84. return is_string($ret) ? $this->error($ret) : $this->success('核销成功');
  85. }
  86. /**
  87. * 接单
  88. * @return mixed|null
  89. */
  90. public function actionTalking()
  91. {
  92. $data = Yii::$app->request->get();
  93. $valid = Yii::$app->services->validate->validate($data, [
  94. [['id'], 'integer'],
  95. [['id'], 'required']
  96. ]);
  97. if ($valid === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  98. $ret = (new OrderService())->talking($this->mall_id, $this->user_id, $data['id']);
  99. return is_string($ret) ? $this->error($ret) : $this->success('操作成功');
  100. }
  101. /**
  102. * 拒绝接单
  103. * @return mixed|null
  104. */
  105. public function actionReject()
  106. {
  107. $data = Yii::$app->request->post();
  108. $valid = Yii::$app->services->validate->validate($data, [
  109. [['id'], 'integer'],
  110. [['reason'], 'required'],
  111. [['id'], 'required']
  112. ]);
  113. if ($valid === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  114. $data['reason'] = (string)$data['reason'];
  115. $ret = (new OrderService())->reject($this->mall_id, $this->user_id, $data['id'], 0, !empty($data['reason']) ? $data['reason'] : '无');
  116. return is_string($ret) ? $this->error($ret) : $this->success('操作成功');
  117. }
  118. /**
  119. * 取消接单
  120. * @return mixed|null
  121. */
  122. public function actionCancel()
  123. {
  124. $data = Yii::$app->request->get();
  125. $valid = Yii::$app->services->validate->validate($data, [
  126. [['id'], 'integer'],
  127. [['id'], 'required']
  128. ]);
  129. if ($valid === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  130. $ret = (new OrderService())->cancel($this->mall_id, $this->user_id, $data['id']);
  131. return is_string($ret) ? $this->error($ret) : $this->success('取消成功');
  132. }
  133. /**
  134. * 买家取消预约
  135. * @return mixed|null
  136. */
  137. public function actionCancelReserve()
  138. {
  139. $data = Yii::$app->request->get();
  140. $valid = Yii::$app->services->validate->validate($data, [
  141. [['id'], 'integer'],
  142. [['id'], 'required']
  143. ]);
  144. if ($valid === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  145. $ret = (new OrderService())->cancel($this->mall_id, $this->user_id, $data['id'], 0, true);
  146. return is_string($ret) ? $this->error($ret) : $this->success('取消成功');
  147. }
  148. /**
  149. * 扫码取到的商品详情
  150. * @return mixed|null
  151. */
  152. public function actionScan()
  153. {
  154. $data = Yii::$app->request->get();
  155. $valid = Yii::$app->services->validate->validate($data, [
  156. [['code'], 'string'],
  157. [['store_id'], 'integer'],
  158. [['code'], 'required']
  159. ]);
  160. if ($valid === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  161. $ret = (new OrderService())->getDetailByCodeOrId($this->mall_id, $this->user_id, $data['code'], 0, 0);
  162. return is_string($ret) ? $this->error($ret) : $this->success('获取成功', $ret);
  163. }
  164. /**
  165. * 验收
  166. * @return mixed|null
  167. */
  168. public function actionAcceptance()
  169. {
  170. $data = Yii::$app->request->get();
  171. $valid = Yii::$app->services->validate->validate($data, [
  172. [['id'], 'integer'],
  173. [['id'], 'required']
  174. ]);
  175. if ($valid === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  176. $ret = (new OrderService())->acceptance($this->mall_id, $data['id'], $this->user_id);
  177. return is_string($ret) ? $this->error($ret) : $this->success('验收成功');
  178. }
  179. public function actionRefundReason()
  180. {
  181. $tags = \Yii::$app->services->setting->addons->get($this->mall_id, ReservationServiceEnum::ADDONS_NAME, 'basic.refund_tags');
  182. return $this->success('获取成功', !empty($tags) ? Json::decode((string)$tags) : []);
  183. }
  184. public function actionUnderwriterList()
  185. {
  186. $data = Yii::$app->request->get();
  187. $valid = Yii::$app->services->validate->validate($data, [
  188. [['page', 'limit'], 'integer'],
  189. ]);
  190. if ($valid === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  191. $data['user_id'] = $this->user_id;
  192. $ret = (new OrderService())->underwriterList($this->mall_id, $data);
  193. if (!empty($ret['list'])) {
  194. $reservation_service_order_ids = [];
  195. foreach ($ret['list'] as $val) {
  196. if(!empty($val['secondary_card_no'])){
  197. $reservation_service_order_ids[]=$val['id'];
  198. }
  199. }
  200. $use_log_list = $this->getSecondaryCardUseLog($this->mall_id,$reservation_service_order_ids);
  201. foreach ($ret['list'] as &$item) {
  202. $item['order']['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
  203. $item['order']['service_status'] = $item['service_status'];
  204. $item['order']['service_status_text'] = ReservationServiceEnum::RESERVE_ORDER_STATUS_MAP[$item['service_status']];
  205. $item['order']['id'] = $item['id'];
  206. $item = $item['order'];
  207. if (!empty($item['store'])) {
  208. $item['mall_name'] = $item['store']['store_name'];
  209. $item['mall_logo'] = $item['store']['logo_img'];
  210. } else {
  211. $item['mall_name'] = $this->mall['name'];
  212. $item['mall_logo'] = Yii::$app->services->setting->mall->get($this->mall_id, 'basic.logo');
  213. }
  214. $item['secondary_card'] = [];
  215. if(isset($use_log_list[$item['id']])){
  216. $use_log = $use_log_list[$item['id']];
  217. $item['secondary_card']['clerk_nums'] = $use_log['clerk_nums'];
  218. $item['secondary_card']['order_no'] = $use_log['order_no'];
  219. $item['secondary_card']['service_income'] = $use_log['service_income'];
  220. }
  221. }
  222. }
  223. return is_string($ret) ? $this->error($ret) : $this->success('获取成功', $ret);
  224. }
  225. protected function getSecondaryCardUseLog($mall_id,$reservation_service_order_ids){
  226. $list = [];
  227. if(MallAddons::isInstall($mall_id,'SecondaryCard')){
  228. $list = SecondaryCardService::getSecondaryCardUseLog($mall_id,$reservation_service_order_ids);
  229. }
  230. return $list;
  231. }
  232. /**
  233. * 预约满人检测
  234. * @return mixed|null
  235. */
  236. public function actionCheckReserveFull()
  237. {
  238. try {
  239. $data = Yii::$app->request->post();
  240. $valid = Yii::$app->services->validate->validate($data, [
  241. [['goods_reserve_sku_id','store_id','date'], 'required']
  242. ]);
  243. if ($valid === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  244. $res = (new OrderService())->checkReserveFull($data['goods_reserve_sku_id'], $data['store_id'], $data['date']);
  245. $is_full = 0;
  246. if ($res == false) {
  247. $is_full = 1;
  248. }
  249. return $this->success('获取成功', ['is_full' => $is_full]);
  250. }catch (\Exception $e){
  251. return $this->error($e->getMessage());
  252. }
  253. }
  254. }