| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- <?php
- namespace app\controller\merchant;
- use app\extra\basic\Base;
- use app\extra\douyin\Order as DouyinOrder;
- use app\extra\service\saas\OrderLogService;
- use app\extra\service\saas\OrderService;
- use app\middleware\AuthMiddleware;
- use app\model\saas\SaasOrder;
- use app\model\saas\SaasOrderLife;
- use app\model\saas\SaasOrderLog;
- use app\model\system\SystemExport;
- use DI\Attribute\Inject;
- use LinFly\Annotation\Route\Controller;
- use LinFly\Annotation\Route\Route;
- use support\Request;
- use support\Response;
- use Webman\Annotation\Middleware;
- use Webman\RedisQueue\Redis;
- #[Controller(prefix: "/api/merchant/order"),Middleware(AuthMiddleware::class)]
- class Order extends Base
- {
- #[Inject]
- protected OrderService $service;
- #[Inject]
- protected OrderLogService $log;
- #[Inject]
- protected SaasOrder $mode;
- #[Route(path: "list",methods: "get")]
- public function getOrderList(Request $request): Response
- {
- try {
- $param = $request->get();
- $param['agent'] = $request->user['agent_id'];
- $list = $this->service->getList($param);
- return successTrans("success.data",pageFormat($list),200);
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- #[Route(path: "log",methods: "get")]
- public function getOrderLog(Request $request): Response
- {
- try {
- $param = $request->get();
- $list = $this->log->getList($param);
- return successTrans("success.data",$list,200);
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- /**
- * 更新收货地址
- * @param Request $request
- * @return Response
- */
- #[Route(path: "save",methods: "post")]
- public function save(Request $request): Response
- {
- try {
- $param = $this->_valid([
- "id.require" => trans("empty.require"),
- "username.require" => trans("empty.require"),
- "mobile.require" => trans("empty.require"),
- "address.require" => trans("empty.require")
- ],"post");
- if (!is_array($param)) return error($param);
- $order = $this->mode->where("order_sn",$param['order'])->findOrEmpty();
- if ($order->isEmpty()) return error("订单数据异常");
- $state = $order->save($param);
- if (!$state) return errorTrans("error.data");
- return successTrans("success.data");
- } catch (\Throwable $throwable) {
- echo $throwable->getMessage()."\n";
- echo $throwable->getFile()."\n";
- echo $throwable->getLine()."\n";
- return error($throwable->getMessage());
- }
- }
- /**
- * 批量修改订单状态
- * @param Request $request
- * @return Response
- */
- #[Route(path: "batch",methods: "post")]
- public function batchSetState(Request $request): Response
- {
- try {
- $param = $this->_valid([
- "order.require" => trans("empty.require")
- ],"post");
- if (!is_array($param)) return error($param);
- $state = $this->mode->where("order_sn","in",$param['order'])->save(['express_status' => 1,'status' => 2]);
- $log = [];
- foreach ($param['order'] as $key=>$val) {
- $log[$key] = [
- 'order_id' => $val,
- "title" => "手动发货",
- "remark" => "管理员手动完成发货,订单进入待核销"
- ];
- }
- (new SaasOrderLog)->insertAll($log);
- if (!$state) return errorTrans("error.data");
- return successTrans("success.data");
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- /**
- * 同意解锁申请
- * @param Request $request
- * @return Response
- */
- #[Route(path: "agree",methods: "post")]
- public function setOrderAgree(Request $request): Response
- {
- try {
- $param = $this->_valid([
- "order.require" => trans("empty.require")
- ],"post");
- if (!is_array($param)) return error($param);
- $order = $this->mode->where("order_sn",$param['order'])->with(['goods' => function($query){
- $query->field("out_id,product_name,product_img,product_price");
- },'poi' => function ($query) {
- $query->field("poi_id,poi_name,poi_address");
- }])->findOrEmpty();
- if ($order->isEmpty()) return error("订单数据异常");
- $resp = (new DouyinOrder)->config($this->getDyConfig())->token()->orderLock(1,$order['order_id'],$order['certificate_id'],$order['lock_key']);
- if ($resp['err_no'] <> 0) return error($resp['err_msg']);
- $order->status = 3;
- $order->express_status = 3;
- $order->refund_at = getDateFull();
- $state = $order->save();
- (new SaasOrderLife)->where("order_id",$order['order_id'])->update(['status' => 1]);
- (new SaasOrderLog)->insertGetId([
- 'order_id' => $param['order'],
- "title" => "同意解锁申请",
- "remark" => "管理员手动同意解锁申请,用户可以申请退款"
- ]);
- if (!$state) return errorTrans("error.data");
- return successTrans("success.data");
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- /**
- * 拒绝解锁申请
- * @param Request $request
- * @return Response
- */
- #[Route(path: "refuse",methods: "post")]
- public function setOrderRefuse(Request $request): Response
- {
- try {
- $param = $this->_valid([
- "order.require" => trans("empty.require")
- ],"post");
- if (!is_array($param)) return error($param);
- $order = $this->mode->where("order_sn",$param['order'])->findOrEmpty();
- if ($order->isEmpty()) return error("订单数据异常");
- $order->status = 2;
- $order->express_status = 1;
- $order->refund_at = getDateFull();
- $state = $order->save();
- (new SaasOrderLog)->insertGetId([
- 'order_id' => $param['order'],
- "title" => "拒绝解锁申请",
- "remark" => "管理员手动拒绝解锁申请,用户还不能申请退款"
- ]);
- if (!$state) return errorTrans("error.data");
- return successTrans("success.data");
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- /**
- * 手动核销
- * @param Request $request
- * @return Response
- */
- #[Route(path: "end",methods: "post")]
- public function setOrderEnd(Request $request): Response
- {
- try {
- $param = $this->_valid([
- "order.require" => trans("empty.require")
- ],"post");
- if (!is_array($param)) return error($param);
- $order = $this->mode->where("order_sn",$param['order'])->findOrEmpty();
- if ($order->isEmpty()) return error("订单数据异常");
- $dyConfig = sConf("dy.");
- $endStart = strtotime(date("Y-m-d ".$dyConfig['end_start'].":00"));
- $endEnd = strtotime(date("Y-m-d ".$dyConfig['end_end'].":00"));
- if (time() < $endStart) return error("为确保店铺安全,该时间内系统暂停核销功能!");
- if (time() > $endEnd) return error("为确保店铺安全,该时间内系统暂停核销功能~");
- if (empty($order['verify_id'])) {
- $resp = (new \app\extra\douyin\Order)->config($this->getDyConfig())->token()->verifyOrder($order->toArray());
- if ($resp['err_no'] <> 0) return error($resp['err_msg']);
- $verify_id = $resp['data']['order_verify_results'][0]['certificate_verify_results'][0]['verify_id']??'';
- $order->verify_id = $verify_id;
- $order['verify_id'] = $verify_id;
- }
- $resps = (new \app\extra\douyin\Order)->config($this->getDyConfig())->token()->verifyOrderPush($order['order_id'],[$order['verify_id']]);
- if ($resps['err_no'] <> 0) return error($resps['err_msg']);
- $order->express_status = 2;
- $order->status = 4;
- $state = $order->save();
- (new SaasOrderLife)->where("order_id",$order['order_id'])->update(['status' => 3]);
- (new SaasOrderLog)->insertGetId([
- 'order_id' => $param['order'],
- "title" => "完成核销",
- "remark" => "管理员手动完成就核销,该笔交易完成"
- ]);
- if (!$state) return errorTrans("error.data");
- return successTrans("success.data");
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- /**
- * 手动呼叫快递
- * @param Request $request
- * @return Response
- */
- #[Route(path: "express",methods: "post")]
- public function setOrderExpress(Request $request): Response
- {
- try {
- $param = $this->_valid([
- "order.require" => trans("empty.require")
- ],"post");
- if (!is_array($param)) return error($param);
- $order = $this->mode->where("order_sn",$param['order'])->findOrEmpty();
- if ($order->isEmpty()) return error("订单数据异常");
- $dyConfig = sConf("dy.");
- $endStart = strtotime(date("Y-m-d ".$dyConfig['express_start'].":00"));
- $endEnd = strtotime(date("Y-m-d ".$dyConfig['express_end'].":00"));
- if (time() < $endStart) return error("为确保店铺安全,该时间内系统暂停呼叫快递功能!");
- if (time() > $endEnd) return error("为确保店铺安全,该时间内系统暂停呼叫快递功能~");
- return errorTrans("error.data");
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- /**
- * 订单导出
- * @param Request $request
- * @return Response
- */
- #[Route(path: "export",methods: "get")]
- public function exportOrder(Request $request): Response
- {
- try {
- $param = $request->get();
- $param['agent'] = $request->user['agent_id'];
- $logId = (new SystemExport)->insertGetId([
- "uuid" => $request->user['id'],
- "name" => $param['fileName'],
- ]);
- Redis::send("export-order",[
- "logId" => $logId,
- "param" => $param,
- ]);
- return successTrans("success.data",[],200);
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- }
|