Browse Source

业务员管理

gorden 1 year ago
parent
commit
6e25136b82

+ 9 - 1
app/admin/controller/medical/DeptController.php

@@ -34,7 +34,7 @@ class DeptController extends Curd
         [$where, $format, $limit, $field, $order] = $this->selectInput($request);
         $format = 'tree';
         $order = $request->get('order', 'desc');
-        $field = $field ?? 'dept_addTime';
+        $field = $field ?? 'dept_sort';
         $where['dept_is_del'] = 0;
         $query = $this->doSelect($where, $field, $order);
         return $this->doFormat($query, $format, $limit);
@@ -131,6 +131,14 @@ class DeptController extends Curd
         return json_success('success');
     }
 
+    /**
+     * @Desc 树形
+     * @Author Gorden
+     * @Date 2024/3/4 8:31
+     *
+     * @param $items
+     * @return Response
+     */
     protected function formatTree($items): Response
     {
         $format_items = [];

+ 136 - 0
app/admin/controller/medical/SalesmanController.php

@@ -0,0 +1,136 @@
+<?php
+
+namespace app\admin\controller\medical;
+
+use support\exception\BusinessException;
+use support\Request;
+use app\admin\validate\medical\SalesmanValidate;
+use app\controller\Curd;
+use app\model\MedicalSalesman;
+use support\Response;
+
+class SalesmanController extends Curd
+{
+    public function __construct()
+    {
+        $this->model = new MedicalSalesman();
+        $this->validate = true;
+        $this->validateClass = new SalesmanValidate();
+    }
+
+    /**
+     * @Desc insert 数据处理
+     * @Author Gorden
+     * @Date 2024/3/4 9:57
+     *
+     * @param Request $request
+     * @return array
+     * @throws \support\exception\BusinessException
+     */
+    protected function insertInput(Request $request): array
+    {
+        $data = $this->inputFilter($request->post());
+        // 验证手机号是否已存在
+        if ($this->model->phoneExist($data['salesman_phone'])) {
+            throw new BusinessException('手机号已存在');
+        }
+        // 用户已存在
+        if ($this->model->usernameExist($data['salesman_username'])) {
+            throw new BusinessException('用户名已存在');
+        }
+
+        return $data;
+    }
+
+    /**
+     * @Desc 执行写入数据
+     * @Author Gorden
+     * @Date 2024/3/4 9:39
+     *
+     * @param $data
+     * @return mixed|null
+     */
+    protected function doInsert($data)
+    {
+        $data['salesman_salt'] = random_string(6);
+        $data['salesman_password'] = md5(sha1($data['salesman_password'] . $data['salesman_salt']));
+        $primary_key = $this->model->getKeyName();
+        $model_class = get_class($this->model);
+        $model = new $model_class;
+        foreach ($data as $key => $val) {
+            $model->{$key} = $val;
+        }
+        $model->save();
+        return $primary_key ? $model->$primary_key : null;
+    }
+
+    /**
+     * @Desc 数据处理
+     * @Author Gorden
+     * @Date 2024/3/4 10:17
+     *
+     * @param Request $request
+     * @return array
+     * @throws BusinessException
+     */
+    protected function updateInput(Request $request): array
+    {
+        $primary_key = $this->model->getKeyName();
+        $id = $request->post($primary_key);
+        $data = $this->inputFilter($request->post());
+        $model = $this->model->find($id);
+        if (!$model) {
+            throw new BusinessException('记录不存在', 2);
+        }
+        // 其他账号下是否存在当前手机号
+        if ($model->phoneIsInOtherAccountExist($data['salesman_phone'], $data['salesman_id'])) {
+            throw new BusinessException('手机号已存在');
+        }
+        // 其他账号下是否存在当前用户名
+        if ($model->usernameIsInOtherAccountExist($data['salesman_username'], $data['salesman_id'])) {
+            throw new BusinessException('用户名已存在');
+        }
+
+        $passwordFiled = 'salesman_password';
+        if (isset($data[$passwordFiled])) {
+            // 密码为空,则不更新密码
+            if ($data[$passwordFiled] === '') {
+                unset($data[$passwordFiled]);
+            } else {
+                $data[$passwordFiled] = md5(sha1($data[$passwordFiled] . $model->salesman_slat));
+            }
+        }
+        unset($data[$primary_key]);
+        return [$id, $data];
+    }
+
+    /**
+     * @Desc 修改状态
+     * @Author Gorden
+     * @Date 2024/3/4 10:20
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function updateStatus(Request $request)
+    {
+        return $this->updateField($request->post('salesman_id'), 'salesman_status', $request->post('salesman_status'));
+    }
+
+    /**
+     * @Desc 软删除
+     * @Author Gorden
+     * @Date 2024/3/4 10:22
+     *
+     * @param Request $request
+     * @return Response
+     * @throws BusinessException
+     */
+    public function delete(Request $request): Response
+    {
+        $ids = $this->deleteInput($request);
+        $this->doSoftDelete($ids, ['salesman_is_del' => 1]);
+
+        return json_success('success');
+    }
+}

+ 27 - 0
app/admin/validate/medical/SalesmanValidate.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace app\admin\validate\medical;
+
+use think\Validate;
+
+class SalesmanValidate extends Validate
+{
+    protected $rule = [
+        'salesman_id' => 'require|integer',
+        'salesman_shop_id' => 'require|integer',
+        'salesman_name' => 'require|chsDash',
+        'salesman_username' => 'require|alphaDash',
+        'salesman_password' => 'require|alphaDash',
+        'salesman_phone' => 'require|mobile',
+        'salesman_status' => 'require|in:0,1'
+    ];
+
+    protected $message = [];
+
+    protected $scene = [
+        'add' => ['salesman_shop_id', 'salesman_name', 'salesman_username', 'salesman_password',
+            'salesman_phone', 'salesman_status'],
+        'update' => ['salesman_id', 'salesman_shop_id', 'salesman_name', 'salesman_username', 'salesman_password',
+            'salesman_phone', 'salesman_status'],
+    ];
+}

+ 6 - 0
app/controller/Curd.php

@@ -7,6 +7,7 @@ use Illuminate\Database\Query\Builder as QueryBuilder;
 use app\common\Auth;
 use app\common\Tree;
 use app\common\Util;
+use support\CustomException;
 use support\exception\BusinessException;
 use support\Model;
 use support\Request;
@@ -70,6 +71,8 @@ class Curd
         try {
             $data = $this->insertInput($request);
             $this->doInsert($data);
+        } catch (BusinessException $customException) {
+            return json_fail($customException->getMessage());
         } catch (\Exception $exception) {
             return json_fail('数据写入失败');
         }
@@ -91,7 +94,10 @@ class Curd
         try {
             [$id, $data] = $this->updateInput($request);
             $this->doUpdate($id, $data);
+        } catch (BusinessException $customException) {
+            return json_fail($customException->getMessage());
         } catch (\Exception $e) {
+            dd($e->getMessage());
             return json_fail('数据更新失败');
         }
 

+ 76 - 0
app/model/MedicalSalesman.php

@@ -0,0 +1,76 @@
+<?php
+
+namespace app\model;
+
+use support\Model;
+
+class MedicalSalesman extends Model
+{
+    protected $table = 'medical_salesman';
+
+    protected $primaryKey = 'salesman_id';
+
+    protected $dateFormat = 'U';
+
+    public const CREATED_AT = 'salesman_addTime';
+
+    public const UPDATED_AT = 'salesman_updateTime';
+
+    /**
+     * @Desc 手机号是否已存在
+     * @Author Gorden
+     * @Date 2024/3/4 9:46
+     *
+     * @param $phone
+     * @return bool
+     */
+    public function phoneExist($phone)
+    {
+        return self::where('salesman_phone', $phone)->exists();
+    }
+
+    /**
+     * @Desc 用户名是否存在
+     * @Author Gorden
+     * @Date 2024/3/4 10:08
+     *
+     * @param $username
+     * @return bool
+     */
+    public function usernameExist($username)
+    {
+        return self::where('salesman_username', $username)->exists();
+    }
+
+    /**
+     * @Desc 更新时,验证手机号是否在其他账号下出现
+     * @Author Gorden
+     * @Date 2024/3/4 10:14
+     *
+     * @param $phone
+     * @param $id
+     * @return bool
+     */
+    public function phoneIsInOtherAccountExist($phone, $id)
+    {
+        return self::where('salesman_phone',$phone)
+            ->where('salesman_id','<>',$id)
+            ->exists();
+    }
+
+    /**
+     * @Desc 更新时,验证用户名是否在其他账号下出现
+     * @Author Gorden
+     * @Date 2024/3/4 10:16
+     *
+     * @param $username
+     * @param $id
+     * @return bool
+     */
+    public function usernameIsInOtherAccountExist($username,$id)
+    {
+        return self::where('salesman_username',$username)
+            ->where('salesman_id','<>',$id)
+            ->exists();
+    }
+}

+ 10 - 0
route/admin.php

@@ -241,5 +241,15 @@ Route::group('/admin', function () {
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);
+        /* 预约业务员管理 */
+        Route::group('/salesman', function () {
+            Route::get('/list', [\app\admin\controller\medical\SalesmanController::class, 'select']);
+            Route::post('/add', [\app\admin\controller\medical\SalesmanController::class, 'insert']);
+            Route::post('/update', [\app\admin\controller\medical\SalesmanController::class, 'update']);
+            Route::post('/updateStatus', [\app\admin\controller\medical\SalesmanController::class, 'updateStatus']);
+            Route::delete('/delete', [\app\admin\controller\medical\SalesmanController::class, 'delete']);
+        })->middleware([
+            \app\middleware\AdminAuthCheck::class
+        ]);
     });
 });

+ 1 - 0
support/helpers.php

@@ -570,6 +570,7 @@ function random_string($length, $type = 'all')
             $result = $number;
             break;
         default:
+            $result = '';
             break;
     }