Zory před 3 týdny
rodič
revize
fa12b2537d

+ 1 - 1
app/controller/api/Notify.php

@@ -113,7 +113,7 @@ class Notify extends Base
             if ($data['status'] <> "SUCCESS") return json(['err_no' => 0,'err_tips' => "success"]);
             if (empty($data)) return json(['err_no' => 0,'err_tips' => "success"]);
             $order = (new SaasOrder)->where("order_sn",$orderSn)->findOrEmpty();
-            if ($order['status'] <> 4) return json(['err_no' => 0,'err_tips' => "success"]);
+            if (!in_array($order['status'],[1,4,6,7,8])) return json(['err_no' => 0,'err_tips' => "success"]);
             $itemNum = (new SaasOrderItem)->where(["order_sn" => $order['order_sn'],'status' => 2])->count();
             $trueNum = count($data['refund_item_detail']['item_order_detail']);
             if (($trueNum+$itemNum) <> $order['number']) { // 部分退款

+ 40 - 3
app/controller/merchant/Order.php

@@ -11,6 +11,7 @@ use app\model\saas\SaasOrder;
 use app\model\saas\SaasOrderAddress;
 use app\model\saas\SaasOrderExpress;
 use app\model\saas\SaasOrderItem;
+use app\model\saas\SaasOrderRefund;
 use app\model\saas\SaasOrderVerify;
 use app\model\saas\SaasStore;
 use app\model\saas\SaasUserOpen;
@@ -45,7 +46,7 @@ class Order extends Base
     {
         try {
             $param = $request->all();
-//            $param['poi_id'] = $request->user['store_id'];
+            $param['poi_id'] = $request->user['store_id'];
             $productType = $this->goodsService->productType();
             $data = $this->service->setModel()->getList($param,['product' => function($query) use($productType){
                 $query->field("product_id,product_name,product_type,is_new,price,line_price")->append(['types'])->withAttr(['types' => function($query,$resp) use($productType){
@@ -83,7 +84,7 @@ class Order extends Base
             if (!is_array($param)) return error($param);
             $order = $this->model->where("out_order_no",$param['order'])->with(['product','poi','user','address' => function($query){
                 $query->with(['goods']);
-            },'express'])->findOrEmpty();
+            },'express','refund'])->findOrEmpty();
             if ($order->isEmpty()) return errorTrans("empty.data");
             if ($order['poi_id'] <> $request->user['store_id'] && $request->user['is_super'] == 0) return errorTrans("empty.data");
             $order['end_time'] = timeDiff(strtotime("+30 minutes",strtotime($order['create_at'])),time());
@@ -353,7 +354,7 @@ class Order extends Base
             if (!is_array($param)) return error($param);
             $order = (new SaasOrder)->where("out_order_no",$param["order"])->with(['poi'])->findOrEmpty();
             if ($order->isEmpty()) return error("关联订单错误");
-            if (!in_array($order['status'],[1,6,7])) return error("关联订单错误");
+            if (!in_array($order['status'],[1,6,7,8])) return error("关联订单错误");
             if (empty($order['item_order_id'])) return error("订单数据不完整");
             $data = (new OrderData)->config([
                 "appid"     => sConf("wechat.mini_appid"),
@@ -427,7 +428,43 @@ class Order extends Base
         } catch (\Throwable $throwable) {
             return error($throwable->getMessage());
         }
+    }
 
+    /**
+     * 核销后退款申请审核
+     * @param Request $request
+     * @return Response
+     */
+    #[PostMapping("audit")]
+    public function auditRefund(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "order.require"     => trans("empty.require"),
+                "status.require"    => trans("empty.require"),
+                "sign.default"      => "",
+                "reason.default"    => ""
+            ],$request->method());
+            if (!is_array($param)) return error($param);
+            if ($param['status'] == 1 && empty($param['sign'])) return error("请上传打款凭证");
+            if ($param['status'] == 2 && empty($param['reason'])) return error("请输入拒绝原因");
+            $refund = (new SaasOrderRefund)->where("order_sn",$param["order"])->findOrEmpty();
+            if ($refund->isEmpty()) return error("退款申请不存在");
+            $refund->status = $param['status'];
+            $refund->last_at = getDateFull();
+            if ($param['status'] == 1) {
+                $refund->sign = $param['sign'];
+                $this->model->where("out_order_no",$param["order"])->save(['status' => 3]);
+            } else {
+                $refund->reason = $param['reason'];
+                $this->model->where("out_order_no",$param["order"])->save(['is_error' => 1,'status' => 2]);
+            }
+            $state = $refund->save();
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
     }
 
 }

+ 3 - 2
app/controller/v2/Auth.php

@@ -101,12 +101,13 @@ class Auth extends Base
             if ($user->isEmpty()) {
                 $map["create_ip"] = $request->getRealIp();
                 $map["mobile"] = $mobile['purePhoneNumber'];
-                $user->insertGetId($map);
+                $userId = $user->insertGetId($map);
             } else {
+                $userId = $user['id'];
                 $user->mobile = $mobile['purePhoneNumber'];
                 $user->save();
             }
-            $userAuth = get_object_vars(AuthFacade::guard("user")->login(['openid' => $sessionKey['openid']]));
+            $userAuth = get_object_vars(AuthFacade::guard("user")->login(["id" => $userId,'openid' => $sessionKey['openid']]));
             return success("ok",$userAuth);
         } catch (\Throwable $th) {
             return error($th->getMessage());

+ 17 - 0
app/controller/v2/Order.php

@@ -9,6 +9,7 @@ use app\model\saas\SaasGoodsOff;
 use app\model\saas\SaasOrder;
 use app\model\saas\SaasOrderAddress;
 use app\model\saas\SaasOrderItem;
+use app\model\saas\SaasOrderRefund;
 use app\model\saas\SaasUserOpen;
 use app\service\saas\OrderService;
 use DI\Attribute\Inject;
@@ -252,6 +253,22 @@ class Order extends Base
             if ($order->isEmpty()) return error("关联订单错误");
             if ($order['openid'] <> $request->user['openid']) return error("关联订单错误");
             if ($order['status'] <> 2) return error("订单不支持该操作");
+            $refund = (new SaasOrderRefund)->where("order_sn",$param["order"])->findOrEmpty();
+            if (!$refund->isEmpty()) {
+                $refund->insertGetId([
+                    "order_sn"  => $param['order'],
+                    "content"   => !empty($param['content']) ? json_encode($param['content']) : [],
+                    "type"      => $param['type'],
+                    "poi_id"    => $order['poi_id'],
+                ]);
+            } else {
+                $refund->save([
+                    "order_sn"  => $param['order'],
+                    "content"   => !empty($param['content']) ? json_encode($param['content']) : [],
+                    "type"      => $param['type'],
+                    "poi_id"    => $order['poi_id'],
+                ]);
+            }
             $order->status = 9;
             $order->refund_msg = json_encode([$param['msg']]);
             $state = $order->save();

+ 2 - 1
app/middleware/AuthMiddleware.php

@@ -31,7 +31,8 @@ class AuthMiddleware implements MiddlewareInterface
                 $request->user = $user->toArray();
             }
         } catch (\Throwable $throwable) {
-            return json(['code'=> 401,'msg'=> $throwable->getMessage()]);
+            return response('',401);
+//            return json(['code'=> 401,'msg'=> $throwable->getMessage()]);
         }
         $response = $request->method() == 'OPTIONS' ? response('',204) : $handler($request);
         return $response;

+ 5 - 0
app/model/saas/SaasOrder.php

@@ -92,4 +92,9 @@ class SaasOrder extends Model
         return $this->hasOne(SaasStar::class,"unique_id","douyin_uid");
     }
 
+    public function refund(): HasOne
+    {
+        return $this->hasOne(SaasOrderRefund::class,"order_sn","out_order_no");
+    }
+
 }

+ 47 - 0
app/model/saas/SaasOrderRefund.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace app\model\saas;
+
+use app\extra\basic\Model;
+
+
+/**
+ * @property integer $id (主键)
+ * @property mixed $poi_id 
+ * @property mixed $order_sn 
+ * @property integer $type 
+ * @property mixed $content 
+ * @property mixed $create_at
+ */
+class SaasOrderRefund extends Model
+{
+    /**
+     * The connection name for the model.
+     *
+     * @var string|null
+     */
+    protected $connection = 'mysql';
+    
+    /**
+     * The table associated with the model.
+     *
+     * @var string
+     */
+    protected string $table = "saas_order_refund";
+    
+    /**
+     * The primary key associated with the table.
+     *
+     * @var string
+     */
+    protected string $primaryKey = "id";
+    
+    /**
+     * Indicates if the model should be timestamped.
+     *
+     * @var bool
+     */
+    public bool $timestamps = false;
+
+
+}

+ 4 - 4
config/plugin/shopwwi/auth/app.php

@@ -11,16 +11,16 @@
              'model'=> [\app\model\system\SystemUser::class,'thinkphp'] // 当为数组时 [app\model\Test::class,'thinkphp'] 来说明模型归属
          ],
          'user' => [
-             'key' => 'openid',
-             'field' => ['openid','mobile'], //设置允许写入扩展中的字段
+             'key' => 'id',
+             'field' => ["id",'openid','mobile'], //设置允许写入扩展中的字段
              'num' => 1, //-1为不限制终端数量 0为只支持一个终端在线 大于0为同一账号同终端支持数量 建议设置为1 则同一账号同终端在线1个
              'model'=> [\app\model\saas\SaasUserOpen::class,'thinkphp']// 当为数组时 [app\model\Test::class,'thinkphp'] 来说明模型归属
          ]
      ],
      'jwt' => [
-         'redis' => false,
+         'redis' => true,
          // redis前缀
-         'redis_prefix' => '',
+         'redis_prefix' => 'jwt_login_',
          // 算法类型 ES256、HS256、HS384、HS512、RS256、RS384、RS512
          'algorithms' => 'HS256',
          // access令牌秘钥