Order.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <?php
  2. namespace app\controller\mini;
  3. use app\extra\basic\Base;
  4. use app\extra\douyin\Crypt;
  5. use app\extra\douyin\Order as DouyinOrder;
  6. use app\extra\service\saas\OrderService;
  7. use app\extra\tools\CodeExtend;
  8. use app\middleware\DyMiddleware;
  9. use app\model\saas\SaasMember;
  10. use app\model\saas\SaasOrder;
  11. use app\model\saas\SaasOrderLife;
  12. use app\model\saas\SaasOrderLog;
  13. use app\model\saas\SaasStore;
  14. use LinFly\Annotation\Route\Controller;
  15. use LinFly\Annotation\Route\Middleware;
  16. use LinFly\Annotation\Route\Route;
  17. use Shopwwi\WebmanAuth\Auth as AuthMode;
  18. use support\Request;
  19. use support\Response;
  20. use function DI\string;
  21. #[Controller(prefix: "/api/dy/order"),Middleware(DyMiddleware::class)]
  22. class Order extends Base
  23. {
  24. protected array $noNeedLogin = ["getLifeOrder"];
  25. /**
  26. * 来客订单详情
  27. * @param Request $request
  28. * @return Response
  29. */
  30. #[Route(path: "life",methods: "post")]
  31. public function getLifeOrder(Request $request): Response
  32. {
  33. try {
  34. $param = $this->_valid([
  35. "order.require" => "请求参数错误",
  36. "code.require" => "请求参数错误"
  37. ],'post');
  38. if (!is_array($param)) return error($param);
  39. $config = sConf("dy.");
  40. $sessionKey = (new Crypt)->config(['appid' => $config['appid'],'secret' => $config['secret']])->getSessionKey($param['code']);
  41. if (empty($sessionKey)) return error("授权登录失败");
  42. if (!isset($sessionKey['openid'])) return error("获取数据失败");
  43. $openId = $sessionKey['openid'];
  44. $userIn = [
  45. 'open_id' => $openId,
  46. "create_ip" => $request->getRealIp(),
  47. "nickname" => "用户_".strtoupper(CodeExtend::random(3,5)),
  48. "avatar" => "https://img.inmei.cc/logo.png"
  49. ];
  50. $user = (new SaasMember)->where("open_id",$openId)->findOrEmpty();
  51. $userIn['id'] = $user['id'];
  52. if ($user->isEmpty()) {
  53. $userIn['id'] = $user->insertGetId($userIn);
  54. }
  55. $order = (new SaasOrderLife)->where("order_id",$param['order'])->where("open_id",$openId)->findOrEmpty();
  56. if ($order->isEmpty()) return error("订单尚未同步");
  57. return successTrans("success.data",[
  58. "user" => get_object_vars((new AuthMode)->guard("member")->login($userIn)),
  59. "order" => $order
  60. ]);
  61. } catch (\Throwable $throwable) {
  62. return error($throwable->getMessage());
  63. }
  64. }
  65. /**
  66. * 获取门店
  67. * @param Request $request
  68. * @return Response
  69. */
  70. #[Route(path: "store",methods: "post")]
  71. public function getLocationStore(Request $request): Response
  72. {
  73. try {
  74. $param = $this->_valid([
  75. "order.require" => "请求参数错误",
  76. "location.require" => "请求参数错误"
  77. ],'post');
  78. if (!is_array($param)) return error($param);
  79. $order = (new SaasOrderLife)->where("order_id",$param['order'])->where("open_id",$request->user['open_id'])->findOrEmpty();
  80. if ($order->isEmpty()) return error("订单尚未同步");
  81. $location = explode(",",$param['location']);
  82. $resp = store_region($location[1],$location[0],2,"store_id={$order['store_id']} and agent_id={$order['agent_id']}");
  83. foreach ($resp as $key=>$val) {
  84. $resp[$key] = $val;
  85. $resp[$key]['poi_id'] = (string) $val['poi_id'];
  86. $resp[$key]['juli'] = format_money($val['juli']/1000);
  87. }
  88. $store = (new SaasStore)->where("store_id",$order['store_id'])->where("agent_id",$order['agent_id'])->findOrEmpty();
  89. return success("ok",[
  90. "data" => $resp,
  91. "store" => $store->toArray()
  92. ]);
  93. } catch (\Throwable $throwable) {
  94. return error($throwable->getMessage());
  95. }
  96. }
  97. /**
  98. * 订单列表
  99. * @param Request $request
  100. * @return Response
  101. */
  102. #[Route(path: "data",methods: "get")]
  103. public function getOrderList(Request $request): Response
  104. {
  105. try {
  106. $param = $this->_valid([
  107. "page.default" => 1,
  108. "size.default" => 10,
  109. "status.default" => 0
  110. ]);
  111. if (!is_array($param)) return error($param);
  112. $param['open_id'] = $request->user['open_id'];
  113. $list = (new OrderService)->getDataListMini($param);
  114. return successTrans(100010,pageFormat($list));
  115. } catch (\Throwable $throwable) {
  116. return error($throwable->getMessage());
  117. }
  118. }
  119. /**
  120. * 订单列表
  121. * @param Request $request
  122. * @return Response
  123. */
  124. #[Route(path: "detail",methods: "get")]
  125. public function getOrderDetail(Request $request): Response
  126. {
  127. try {
  128. $param = $this->_valid([
  129. "order.require" => "参数错误"
  130. ]);
  131. if (!is_array($param)) return error($param);
  132. $order = (new SaasOrder)->where("order_sn",$param['order'])->with(['goods' => function($query){
  133. $query->field("out_id,product_name,product_img,product_price");
  134. },'poi' => function ($query) {
  135. $query->field("poi_id,poi_name,poi_address");
  136. }])->findOrEmpty();
  137. if ($order->isEmpty()) return error("订单数据异常");
  138. if ($order['open_id'] <> $request->user['open_id']) return error("订单数据异常");
  139. return successTrans("success.data",$order->toArray());
  140. } catch (\Throwable $throwable) {
  141. return error($throwable->getMessage());
  142. }
  143. }
  144. /**
  145. * 订单列表
  146. * @param Request $request
  147. * @return Response
  148. */
  149. #[Route(path: "cancel",methods: "post")]
  150. public function cancelOrder(Request $request): Response
  151. {
  152. try {
  153. $param = $this->_valid([
  154. "order.require" => "参数错误"
  155. ],"post");
  156. if (!is_array($param)) return error($param);
  157. $order = (new SaasOrder)->where("order_sn",$param['order'])->with(['goods' => function($query){
  158. $query->field("out_id,product_name,product_img,product_price");
  159. },'poi' => function ($query) {
  160. $query->field("poi_id,poi_name,poi_address");
  161. }])->findOrEmpty();
  162. if ($order->isEmpty()) return error("订单数据异常");
  163. if ($order['open_id'] <> $request->user['open_id']) return error("订单数据异常");
  164. if (empty($order['certificate_id'])) {
  165. $orderDetail = (new DouyinOrder)->config($this->getDyConfig())->token()->getOrderDetail([$order['order_id']]);
  166. if (!isset($orderDetail['data']['certificate_info_list'][0]['certificate_id'])) return error("订单数据异常");
  167. $order->certificate_id = $orderDetail['data']['certificate_info_list'][0]['certificate_id'];
  168. $order['certificate_id'] = $orderDetail['data']['certificate_info_list'][0]['certificate_id'];
  169. }
  170. $resp = (new DouyinOrder)->config($this->getDyConfig())->token()->orderLock(1,$order['order_id'],$order['certificate_id'],$order['lock_key']);
  171. if ($resp['err_no'] <> 0) return error("取消失败,请重试");
  172. $order->status = 3;
  173. $order->save();
  174. (new SaasOrderLife)->where("order_id",$order['order_id'])->update(['status' => 1]);
  175. (new SaasOrderLog)->insertGetId([
  176. 'order_id' => $param['order'],
  177. "title" => "取消订单",
  178. "remark" => "用户取消核销信息"
  179. ]);
  180. return successTrans("success.data",$order->toArray());
  181. } catch (\Throwable $throwable) {
  182. echo $throwable->getLine()."\n";
  183. echo $throwable->getFile()."\n";
  184. return error($throwable->getMessage());
  185. }
  186. }
  187. }