Zory 2 ماه پیش
والد
کامیت
3db0d377a5

+ 111 - 0
app/controller/admin/Level.php

@@ -0,0 +1,111 @@
+<?php
+
+namespace app\controller\admin;
+
+use app\extra\basic\Base;
+use app\extra\service\blue\ExpertLevelService;
+use app\extra\tools\DataExtend;
+use app\middleware\AuthMiddleware;
+use app\model\blue\BlueExpertLevel;
+use DI\Attribute\Inject;
+use LinFly\Annotation\Route\Controller;
+use LinFly\Annotation\Route\Middleware;
+use LinFly\Annotation\Route\Route;
+use support\Request;
+use support\Response;
+
+
+#[Controller(prefix: "/api/level"),Middleware(AuthMiddleware::class)]
+class Level extends Base
+{
+
+    #[Inject]
+    protected BlueExpertLevel $model;
+
+    #[Inject]
+    protected ExpertLevelService $service;
+
+
+    #[Route(path: "list",methods: "get")]
+    public function getCategoryData(Request $request): Response
+    {
+        try {
+            $param = $request->all();
+            $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 setListData(Request $request): Response
+    {
+        try {
+            $param = $request->post();
+            $state = $this->model->setAutoData($param);
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+    /**
+     * 批量操作
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "batch",methods: "post")]
+    public function setGoodsBatch(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "id.require"        => "参数错误",
+                "value.require"     => "参数错误",
+                "field.require"     => "参数错误",
+                "type.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 delData(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "id.require"        => "参数错误",
+            ],"post");
+            if (!is_array($param)) return error($param);
+            $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());
+        }
+    }
+
+}

+ 123 - 1
app/controller/admin/Task.php

@@ -3,8 +3,15 @@
 namespace app\controller\admin;
 
 use app\extra\basic\Base;
+use app\extra\service\blue\TaskService;
+use app\extra\tools\CodeExtend;
 use app\extra\tools\XcJob;
 use app\middleware\AuthMiddleware;
+use app\model\blue\BlueCategory;
+use app\model\blue\BlueExpertLevel;
+use app\model\blue\BlueTask;
+use app\model\system\SystemData;
+use DI\Attribute\Inject;
 use LinFly\Annotation\Route\Controller;
 use LinFly\Annotation\Route\Middleware;
 use LinFly\Annotation\Route\Route;
@@ -16,6 +23,98 @@ use support\Response;
 class Task extends Base
 {
 
+    #[Inject]
+    protected TaskService $service;
+
+    #[Inject]
+    protected BlueTask $model;
+
+    #[Route(path: "list",methods: "get")]
+    public function getCategoryData(Request $request): Response
+    {
+        try {
+            $param = $request->all();
+            $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 setListData(Request $request): Response
+    {
+        try {
+            $param = $request->post();
+            if (!isset($param['id'])) {
+                $param['task_sn'] = CodeExtend::random(16);
+                $job = $this->model->where("job_id",$param['job_id'])->findOrEmpty();
+                if (!$job->isEmpty()) return error("该任务已添加");
+            }
+            $param['total_budget'] = !empty($param['total_budget']) ? $param['total_budget']*100 : 0;
+            $state = $this->model->setAutoData($param);
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+    /**
+     * 批量操作
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "batch",methods: "post")]
+    public function setGoodsBatch(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "id.require"        => "参数错误",
+                "value.require"     => "参数错误",
+                "field.require"     => "参数错误",
+                "type.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 delData(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "id.require"        => "参数错误",
+            ],"post");
+            if (!is_array($param)) return error($param);
+            $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());
+        }
+    }
 
     /**
      * 获取星川任务详情
@@ -45,7 +144,7 @@ class Task extends Base
                 "product_selling_point" => $data['object_field_info']['object_product_info']['product_selling_point_detail']??'',
                 "target_audience"       => $data['object_field_info']['object_product_info']['target_audience_desc']??'',
                 "content"               => $data['object_field_info']['object_requirement_info']['author_preference']?nl2br($data['object_field_info']['object_requirement_info']['author_preference']):'',
-                "total_budget"          => $data['object_field_info']['object_project_info']['total_budget_fen']?format_money_bit($data['object_field_info']['object_project_info']['total_budget_fen']/100):'',
+                "total_budget"          => $data['object_field_info']['object_project_info']['total_budget_fen']?format_money($data['object_field_info']['object_project_info']['total_budget_fen']/100):'',
             ];
             return success("ok",$task);
         } catch (\Throwable $throwable) {
@@ -53,4 +152,27 @@ class Task extends Base
         }
     }
 
+
+    #[Route(path: "param",methods: "get")]
+    public function getTaskParam(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "type.default"  => "douyin"
+            ],$request->all());
+            if (!is_array($param)) return error($param);
+            $category = (new BlueCategory)->where("type",1)->select()->toArray();
+            $level = (new BlueExpertLevel)->where("status",1)->append(['start_format','end_format'])->withAttr(['start_format' => function ($data,$resp) {
+                return formatMoneyKw($resp['gmv_start']);
+            },'end_format' => function ($data,$resp) {
+                return formatMoneyKw($resp['gmv_end']);
+            }])->select()->toArray();
+            $dicData = (new SystemData)->where("code",$param['type'])->value("content");
+            $dic = empty($dicData)?[]:json_decode($dicData,true);
+            return success("ok",compact("category","level","dic"));
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
 }

+ 39 - 0
app/extra/service/blue/ExpertLevelService.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace app\extra\service\blue;
+
+use app\extra\basic\Service;
+use app\model\blue\BlueExpertLevel;
+
+class ExpertLevelService extends Service
+{
+
+    /**
+     * 列表
+     * @param array $param
+     */
+    public function getList(array $param = [])
+    {
+        $this->mode = new BlueExpertLevel();
+        return $this->searchVal($param,$this->searchFilter($param))->paginate([
+            "list_rows" => $param['pageSize'],
+            "page"      => $param['page']
+        ]);
+    }
+
+
+    /**
+     *
+     * @param array $param
+     * @return array
+     */
+    public function searchFilter(array $param = []): array
+    {
+        $filter = [];
+        !empty($param['type']) && $filter[] = ["type", '=', $param['type']];
+        !empty($param['status']) && $filter[] = ["status", '=', $param['status']];
+        !empty($param['name']) && $filter[] = ["name", 'like', "%{$param['name']}%"];
+        return $filter;
+    }
+
+}

+ 43 - 0
app/extra/service/blue/TaskService.php

@@ -0,0 +1,43 @@
+<?php
+
+namespace app\extra\service\blue;
+
+use app\extra\basic\Service;
+use app\model\blue\BlueTask;
+
+class TaskService extends Service
+{
+
+    /**
+     * 列表
+     * @param array $param
+     */
+    public function getList(array $param = [])
+    {
+        $this->mode = new BlueTask();
+        return $this->searchVal($param,$this->searchFilter($param))->append(['progress'])->withAttr(['progress' => function ($data,$resp) {
+            if ($resp['sign_number'] == 0) return $resp['sign_number'];
+            return ceil($resp['sign_number']/$resp['need_number'] * 100);
+        }])->with(['categoryJoin' => function ($query) {
+            $query->field("sign,name,icon");
+        }])->paginate([
+            "list_rows" => $param['pageSize'],
+            "page"      => $param['page']
+        ]);
+    }
+
+    /**
+     *
+     * @param array $param
+     * @return array
+     */
+    public function searchFilter(array $param = []): array
+    {
+        $filter = [];
+        !empty($param['type']) && $filter[] = ["type", '=', $param['type']];
+        !empty($param['status']) && $filter[] = ["status", '=', $param['status']];
+        !empty($param['name']) && $filter[] = ["name", 'like', "%{$param['name']}%"];
+        return $filter;
+    }
+
+}

+ 30 - 0
app/functions.php

@@ -634,4 +634,34 @@ if (!function_exists("format_money_bit"))
 
         return $result;
     }
+}
+if (!function_exists('formatMoneyKw')) {
+
+    /**
+     * 金额格式化 千k 万w
+     * @param float|int $num 原始金额
+     * @return string
+     */
+    function formatMoneyKw(float|int $num): string
+    {
+        // 先转浮点
+        $num = (float)$num;
+
+        if ($num >= 10000) {
+            // 万
+            $val = $num / 10000;
+            $unit = 'w';
+        } elseif ($num >= 1000) {
+            // 千
+            $val = $num / 1000;
+            $unit = 'k';
+        } else {
+            // 小于1000直接返回字符串
+            return (string)$num;
+        }
+
+        // 保留2位小数,去除末尾多余0和小数点
+        $val = rtrim(rtrim(sprintf('%.2f', $val), '0'), '.');
+        return $val . $unit;
+    }
 }

+ 48 - 0
app/model/blue/BlueExpertLevel.php

@@ -0,0 +1,48 @@
+<?php
+
+namespace app\model\blue;
+
+use app\extra\basic\Model;
+
+
+/**
+ * @property integer $id (主键)
+ * @property string $name 
+ * @property integer $level 
+ * @property integer $gmv_start 升级GMV条件
+ * @property integer $gmv_end 
+ * @property integer $status 
+ * @property mixed $create_at 创建时间
+ */
+class BlueExpertLevel 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 = "blue_expert_level";
+    
+    /**
+     * 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;
+
+
+}

+ 18 - 8
app/model/blue/BlueTask.php

@@ -3,17 +3,18 @@
 namespace app\model\blue;
 
 use app\extra\basic\Model;
+use think\model\relation\HasOne;
 
 
 /**
- * @property integer $id (主键)
- * @property integer $category_id 
- * @property string $title 
- * @property mixed $banner 
- * @property integer $need_num 招募名额
- * @property integer $user_num 报名人数
- * @property integer $sale_price 产品售价
- * @property integer $req_user_level 
+ * @property integer $id (主键)
+ * @property integer $category_id 
+ * @property string $title 
+ * @property mixed $banner 
+ * @property integer $need_num 招募名额
+ * @property integer $user_num 报名人数
+ * @property integer $sale_price 产品售价
+ * @property integer $req_user_level 
  * @property integer $req_dy_level
  */
 class BlueTask extends Model
@@ -46,5 +47,14 @@ class BlueTask extends Model
      */
     public bool $timestamps = false;
 
+    public function getTotalBudgetAttr($val): string
+    {
+        return format_money($val/100);
+    }
+
+    public function categoryJoin(): HasOne
+    {
+        return $this->hasOne(BlueCategory::class,'sign','category');
+    }
 
 }