|
|
@@ -5,10 +5,13 @@ namespace app\controller\merchant;
|
|
|
use app\extra\basic\Base;
|
|
|
use app\extra\dyLife\data\BaseData;
|
|
|
use app\extra\dyLife\data\OrderData;
|
|
|
+use app\extra\tools\LifeWeb;
|
|
|
use app\middleware\AuthMiddleware;
|
|
|
use app\model\saas\SaasOrder;
|
|
|
use app\model\saas\SaasOrderAddress;
|
|
|
+use app\model\saas\SaasOrderExpress;
|
|
|
use app\model\saas\SaasOrderItem;
|
|
|
+use app\model\saas\SaasOrderVerify;
|
|
|
use app\model\saas\SaasStore;
|
|
|
use app\model\saas\SaasUserOpen;
|
|
|
use app\model\system\SystemImport;
|
|
|
@@ -120,6 +123,60 @@ class Order extends Base
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 小程序手动核销
|
|
|
+ * @param Request $request
|
|
|
+ * @return Response
|
|
|
+ */
|
|
|
+ #[PostMapping('doneMini')]
|
|
|
+ public function doneOrderMini(Request $request): Response
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ $param = $this->_valid([
|
|
|
+ "order.require" => trans("empty.require")
|
|
|
+ ],$request->method());
|
|
|
+ if (!is_array($param)) return error($param);
|
|
|
+ $order = $this->model->where("out_order_no",$param['order'])->with(['product','poi','user'])->findOrEmpty();
|
|
|
+ if ($order->isEmpty()) return errorTrans("empty.data");
|
|
|
+ if ($order['status'] <> 7) return error("该订单状态不支持核销");
|
|
|
+ if ($request->user['store_id'] <> $order['poi_id'] && $request->user['is_super'] == 0) return errorTrans("empty.data");
|
|
|
+ $orderExpress = (new SaasOrderExpress)->where("order_sn",$order['order_sn'])->findOrEmpty();
|
|
|
+ if ($orderExpress->isEmpty()) return error("订单尚未发货");
|
|
|
+ if (strtotime("+24 hour",strtotime($order['error_at'])) < time()) return error("新订单需24小时后方可核销");
|
|
|
+ [$state,$expressData] = (new LifeWeb)->getExpressData($orderExpress['express_sn'],$orderExpress['mobile']);
|
|
|
+ if (!$state) return error("查询物流失败,请联系管理员");
|
|
|
+ if (!in_array($expressData['logisticsStatusDesc'],['派件中',"已签收"])) return error("当前物流状态不允许核销");
|
|
|
+ $startTime = $order['poi']['order_start']??'09:00';
|
|
|
+ $endTime = $order['poi']['order_end']??'22:30';
|
|
|
+ $startTimeStamp = strtotime(date("Y-m-d {$startTime}:00"));
|
|
|
+ $endTimeStamp = strtotime(date("Y-m-d {$endTime}:00"));
|
|
|
+ if (time() > $startTimeStamp && time() < $endTimeStamp) {
|
|
|
+ $data = (new OrderData)->config([
|
|
|
+ "appid" => sConf("wechat.mini_appid"),
|
|
|
+ "secret" => sConf("wechat.mini_secret")
|
|
|
+ ])->token()->verifyOrder($order->toArray());
|
|
|
+ if (empty($data['verify_results'])) return error($data['description']); // 核销失败
|
|
|
+ $order->status = 2;
|
|
|
+ $order->express_status = 3;
|
|
|
+ $order->done_at = getDateFull();
|
|
|
+ $order->save();
|
|
|
+ (new SaasOrderItem)->where(['order_sn'=>$order['order_sn'],'status'=>1])->update(['status'=>3]);
|
|
|
+ (new SaasOrderVerify)->insertGetId([
|
|
|
+ "poi_id" => $order['poi_id'],
|
|
|
+ "order_sn" => $order['order_sn'],
|
|
|
+ "money" => $order['price'],
|
|
|
+ "certificate_id" => $data['verify_results'][0]['certificate_id']??'0',
|
|
|
+ "verify_id" => $data['verify_results'][0]['verify_id']??'0',
|
|
|
+ ]);
|
|
|
+ return success("核销成功");
|
|
|
+ } else {
|
|
|
+ return error("当前时间段不支持核销");
|
|
|
+ }
|
|
|
+ } catch (\Throwable $throwable) {
|
|
|
+ return error($throwable->getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 手动核销
|
|
|
* @param Request $request
|