zory 1 settimana fa
parent
commit
546b7ff58c

+ 3 - 2
app/controller/admin/Agent.php

@@ -87,8 +87,9 @@ class Agent extends Base
     {
         try {
             $param = $request->post();
-            if (!$this->validate->check($request->post())) return error($this->validate->getError());
-            $state = $this->model->setAutoData($param);
+            if (!$this->validate->scene("edit")->check($request->post())) return error($this->validate->getError());
+            if (!empty($param['express'])) $param['express'] = json_encode($param['express']);
+            $state = $this->model->setAutoData($param,"agent_id");
             if (!$state) return errorTrans("error.data");
             return successTrans("success.data");
         } catch (\Throwable $throwable) {

+ 3 - 0
app/controller/admin/Shop.php

@@ -61,6 +61,9 @@ class Shop extends Base
             if (empty($store['agent_id'])) return errorTrans("empty.data");
             $param['agent_id'] = $store['agent_id'];
             if (!$this->validate->check($param)) return error($this->validate->getError());
+            $location = explode(",",$param['poi_location']);
+            $param['longitude'] = $location[0]??'';
+            $param['latitude'] = $location[1]??'';
             $state = $this->model->setAutoData($param);
             if (!$state) return errorTrans("error.data");
             return successTrans("success.data");

+ 15 - 0
app/controller/admin/Store.php

@@ -74,6 +74,21 @@ class Store extends Base
     }
 
 
+    /**
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "hook",methods: "get")]
+    public function getHookUri(Request $request): Response
+    {
+        try {
+            $param = $request->get();
+            return successTrans(100010,['url' => "https://miniapi.jsshuita.com.cn/"]);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
     /**
      * 新增/编辑代理
      * @param Request $request

+ 136 - 0
app/controller/merchant/Shop.php

@@ -0,0 +1,136 @@
+<?php
+
+namespace app\controller\merchant;
+
+use app\extra\basic\Base;
+use app\extra\service\saas\ShopService;
+use app\middleware\AuthMiddleware;
+use app\model\saas\SaasStore;
+use app\model\saas\SaasStoreShop;
+use app\validate\saas\ShopValidate;
+use DI\Attribute\Inject;
+use LinFly\Annotation\Route\Controller;
+use LinFly\Annotation\Route\Route;
+use support\Request;
+use support\Response;
+use Webman\Annotation\Middleware;
+
+
+#[Controller(prefix: "/api/merchant/shop"),Middleware(AuthMiddleware::class)]
+class Shop extends Base
+{
+
+
+    #[Inject]
+    protected ShopValidate $validate;
+
+    #[Inject]
+    protected ShopService $service;
+
+    #[Inject]
+    protected SaasStoreShop $model;
+
+    #[Route(path: "list",methods: "get")]
+    public function getStoreList(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());
+        }
+    }
+
+
+    /**
+     * 新增/编辑代理
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "save",methods: "post")]
+    public function save(Request $request): Response
+    {
+        try {
+            $param = $request->post();
+            if (empty($param['store_id'])) return errorTrans("empty.require");
+            $store = (new SaasStore)->where("store_id",$param['store_id'])->findOrEmpty();
+            if ($store->isEmpty()) return errorTrans("empty.data");
+            if (empty($store['agent_id'])) return errorTrans("empty.data");
+            if ( $store['agent_id'] <> $request->user['agent_id'] ) return error("该门店不属于当前代理,请重新选择");
+            $param['agent_id'] = $store['agent_id'];
+            if (!$this->validate->check($param)) return error($this->validate->getError());
+            $location = explode(",",$param['poi_location']);
+            $param['longitude'] = $location[0]??'';
+            $param['latitude'] = $location[1]??'';
+            $state = $this->model->setAutoData($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 setBatchData(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "id.require"        => trans("empty.require"),
+                "value.require"     => trans("empty.require"),
+                "field.require"     => trans("empty.require"),
+                "type.require"      => trans("empty.require"),
+            ],"post");
+            if (!is_array($param)) return error($param);
+            if ($param['type'] == "batch") {
+                $state = $this->model->where("id","in",$param['id'])->save([$param['field'] => $param['value']]);
+            } else {
+                $state = $this->model->where("id",$param['id'])->save([$param['field'] => $param['value']]);
+            }
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    /**
+     * 删除
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "del",methods: "post")]
+    public function delUser(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "id.require"    => trans("empty.require"),
+                "type.default"  => "one",
+            ],"post");
+            if (!is_array($param)) return error($param);
+            if ($param['type'] == "batch") {
+                $state = $this->model->where("id","in",$param['id'])->delete();
+            } else {
+                $data = $this->model->where("id",$param['id'])->findOrEmpty();
+                if ($data->isEmpty()) return errorTrans("empty.data");
+                // 删除其他相关数据
+                $state = $data->delete();
+            }
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
+}

+ 4 - 3
app/controller/merchant/Store.php

@@ -85,6 +85,7 @@ class Store extends Base
     {
         try {
             $param = $request->post();
+            $param['agent_id'] = $request->user['agent_id'];
             if (!isset($param['id'])) {
                 $this->scene = "add";
                 $param['user_id'] = CodeExtend::random(16,1,date("md"));
@@ -94,7 +95,7 @@ class Store extends Base
                 }
             }
             if (!$this->validate->check($param)) return error($this->validate->getError());
-            $state = $this->model->setAutoData($param);
+            $state = $this->model->setAutoData($param,"store_id");
             if (!$state) return errorTrans("error.data");
             $this->sceneUser($param,3,"id");
             return successTrans("success.data");
@@ -117,8 +118,8 @@ class Store extends Base
     {
         try {
             $param = $request->post();
-            if (!$this->validate->check($request->post())) return error($this->validate->getError());
-            $state = $this->model->setAutoData($param);
+            if (!$this->validate->scene("edit")->check($request->post())) return error($this->validate->getError());
+            $state = $this->model->setAutoData($param,"store_id");
             if (!$state) return errorTrans("error.data");
             return successTrans("success.data");
         } catch (\Throwable $throwable) {

+ 14 - 5
app/controller/merchant/User.php

@@ -4,6 +4,7 @@ namespace app\controller\merchant;
 
 use app\extra\basic\Base;
 use app\extra\service\system\UserService;
+use app\extra\tools\CodeExtend;
 use app\middleware\AuthMiddleware;
 use app\model\saas\SaasStore;
 use app\model\system\SystemUser;
@@ -55,11 +56,19 @@ class User extends Base
     {
         try {
             $param = $request->post();
-            if (empty($param['store_id'])) return errorTrans("empty.require");
-            $store = (new SaasStore)->where("store_id",$param['store_id'])->findOrEmpty();
-            if ($store->isEmpty()) return errorTrans("empty.data");
-            if (empty($store['agent_id'])) return errorTrans("empty.data");
-            $param['agent_id'] = $store['agent_id'];
+            if ($param['type'] == 3) {
+                if (empty($param['store_id'])) return errorTrans("empty.require");
+                $store = (new SaasStore)->where("store_id",$param['store_id'])->findOrEmpty();
+                if ($store->isEmpty()) return errorTrans("empty.data");
+            }
+            if (!empty($param['username'])) {
+                $user = (new SystemUser)->where("username",$param['username'])->findOrEmpty();
+                if (!$user->isEmpty()) return error("该登录账号不可以,请更换");
+            }
+            $param['salt'] = strtoupper(CodeExtend::random(10,3));
+            $param['password'] = md5($param['password'].$param['salt']);
+            $param['create_ip'] = request()->getRealIp() ?: '127.0.0.1';
+            $param['agent_id'] = $request->user['agent_id'];
             if (!$this->validate->check($param)) return error($this->validate->getError());
             $state = $this->model->setAutoData($param);
             if (!$state) return errorTrans("error.data");

+ 58 - 0
app/controller/store/Shop.php

@@ -0,0 +1,58 @@
+<?php
+
+namespace app\controller\store;
+
+use app\extra\basic\Base;
+use app\middleware\AuthMiddleware;
+use app\model\saas\SaasStore;
+use DI\Attribute\Inject;
+use LinFly\Annotation\Route\Controller;
+use LinFly\Annotation\Route\Route;
+use support\Request;
+use support\Response;
+use Webman\Annotation\Middleware;
+
+
+#[Controller(prefix: "/api/store/shop"),Middleware(AuthMiddleware::class)]
+class Shop extends Base
+{
+
+    #[Inject]
+    protected SaasStore $mode;
+
+
+    #[Route(path: "detail",methods: "get")]
+    public function getShopDetail(Request $request): Response
+    {
+        try {
+            $map = ["store_id" => $request->user['store_id'],'agent_id' => $request->user['agent_id']];
+            $detail = $this->mode->where($map)->findOrEmpty();
+            if ($detail->isEmpty()) return error("店铺信息错误");
+            return success("ok",$detail->toArray());
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    /**
+     * 保存
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "save",methods: "post")]
+    public function setUserData(Request $request): Response
+    {
+        try {
+            $param = $request->post();
+            $store = $this->mode->where("store_id",$request->user['store_id'])->findOrEmpty();
+            if ($store->isEmpty()) return errorTrans(40015);
+            $state = $this->mode->setAutoData($param,"store_id");
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+}

+ 15 - 9
app/model/saas/SaasAgent.php

@@ -6,15 +6,15 @@ use app\extra\basic\Model;
 
 
 /**
- * @property integer $id (主键)
- * @property integer $user_id 唯一ID
- * @property string $name 名称
- * @property string $contact_name 
- * @property string $contact_mobile 
- * @property string $code 
- * @property string $vip_end 到期时间
- * @property integer $status 
- * @property string $is_deleted 
+ * @property integer $id (主键)
+ * @property integer $user_id 唯一ID
+ * @property string $name 名称
+ * @property string $contact_name 
+ * @property string $contact_mobile 
+ * @property string $code 
+ * @property string $vip_end 到期时间
+ * @property integer $status 
+ * @property string $is_deleted 
  * @property mixed $create_at
  */
 class SaasAgent extends Model
@@ -48,4 +48,10 @@ class SaasAgent extends Model
     public bool $timestamps = false;
 
 
+    public function getExpressAttr($data)
+    {
+        if (empty($data)) return [];
+        return json_decode($data,true);
+    }
+
 }

+ 4 - 0
app/validate/saas/AgentValidate.php

@@ -22,4 +22,8 @@ class AgentValidate extends Validate
         "vip_end.date"      => "到期时间格式错误",
     ];
 
+    protected $scene = [
+        "edit"  => ["agent_id"]
+    ];
+
 }

+ 11 - 25
app/validate/saas/UserValidate.php

@@ -9,35 +9,21 @@ class UserValidate extends Validate
 
     protected $rule = [
         "agent_id"      => "require",
-        "store_id"      => "require",
-        "express_type"  => "require",
-        "is_auto"       => "require",
-        "is_reback"     => "require",
-        "store_name"    => "require",
-        "order_end"     => "require",
-        "express_name"  => "require",
-        "express_mobile"    => "require",
-        "express_goods" => "require",
-        "express_unit"  => "require",
-        "express_address"   => "require",
-        "express_time"  => "require"
+        "user_id"       => "require",
+        "password"      => "require",
+        "salt"          => "require",
     ];
 
 
     protected $message = [
-        "agent_id.require"      => "请现在代理",
-        "store_id.require"      => "请输入来客ID",
-        "express_type.require"  => "请选择快递类型",
-        "is_auto.require"       => "请选择自动呼叫快递",
-        "is_reback.require"     => "请选择退款自动拦截快递",
-        "store_name.require"    => "请输入来客店铺名称",
-        "order_end.require"     => "请选择核销时机",
-        "express_name.require"  => "请输入联系人",
-        "express_mobile.require"=> "请输入联系电话",
-        "express_goods.require" => "请输入物品名称",
-        "express_unit.require"  => "请输入物品单位",
-        "express_time.require"  => "请选择呼叫快递时间",
-        "express_address.require"  => "请输入发货地址",
+        "agent_id.require"      => "请选择代理",
+        "user_id.require"       => "请选择快递类型",
+        "password.require"      => "请输入密码",
+        "salt.require"          => "数据加密失败",
+    ];
+
+    protected $scene = [
+
     ];
 
 }