ExtensionModuleController.php 12.1 KB
<?php
/**
 * @remark :
 * @name   :ExtensionModuleController.php
 * @author :lyh
 * @method :post
 * @time   :2024/8/7 16:15
 */

namespace App\Http\Controllers\Bside\ExtensionModule;

use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\ExtensionModule\ExtensionModuleFieldLogic;
use App\Models\ExtentModule\ExtensionModule;
use App\Models\ExtentModule\ExtensionModuleField;
use App\Models\ExtentModule\ExtensionModuleValue;
use Illuminate\Support\Facades\DB;

class ExtensionModuleController extends BaseController
{
    /**
     * @remark :获取扩展数据模块
     * @name   :getModuleList
     * @author :lyh
     * @method :post
     * @time   :2024/8/7 16:16
     */
    public function getModuleList(){
        $moduleModel = new ExtensionModule();
        $this->map['status'] = 0;
        $list = $moduleModel->list($this->map);
        $this->response('success',Code::SUCCESS,$list);
    }

    /**
     * @remark :获取数据类型
     * @name   :getDataType
     * @author :lyh
     * @method :post
     * @time   :2024/8/7 17:31
     */
    public function getDataType(){
        $data = [
            '1'=>'文本框',
            '2'=>'多文本输入框',
            '3'=>'图片框',
            '4'=>'文件框',
            '5'=>'下拉框',
            '6'=>'自动生成订单框',
            '7'=>'创建时间'
        ];
        $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @remark :获取当前模块字段
     * @name   :getModuleFiledInfo
     * @author :lyh
     * @method :post
     * @time   :2024/8/7 16:20
     */
    public function getModuleFiledInfo(){
        $this->request->validate([
            'module_id'=>'required',
        ],[
            'module_id.required' => '模块id不能为空',
        ]);
        $moduleFieldModel = new ExtensionModuleField();
        $list = $moduleFieldModel->list(['module_id'=>$this->param['module_id']],'sort',['*'],'desc');
        $moduleValueModel = new ExtensionModuleValue();
        foreach ($list as $k => $v){
            $v['is_use'] = 0;
            //查看当前字段是否已使用
            $info = $moduleValueModel->read(['field_id'=>$v['id']],['id']);
            if($info !== false){
                $v['is_use'] = 1;
            }
            $list[$k] = $v;
            if(!empty($v['data'])){
                $v['data'] = json_decode($v['data'],true);
            }
        }
        $this->response('success',Code::SUCCESS,$list);
    }

    /**
     * @remark :添加字段
     * @name   :saveModuleField
     * @author :lyh
     * @method :post
     * @time   :2024/8/7 16:27
     */
    public function saveModuleField(ExtensionModuleFieldLogic $logic){
        $this->request->validate([
            'module_id'=>'required',
            'field_name'=>'required',
            'data_type'=>'required',
            'is_required'=>'required',
        ],[
            'module_id.required' => '模块id不能为空',
            'field_name.required' => '字段名称不能为空',
            'data_type.required' => '数据类型不能为空',
            'is_required.required' => '是否必填不能为空',
        ]);
        $data = $logic->saveModuleField();
        $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @remark :删除字段
     * @name   :delModuleField
     * @author :lyh
     * @method :post
     * @time   :2024/8/7 17:10
     */
    public function delModuleField(ExtensionModuleFieldLogic $logic){
        $this->request->validate([
            'field_id'=>'required',
        ],[
            'field_id.required' => '字段id不能为空',
        ]);
        $logic->delModuleField();
        $this->response('success');
    }

    /**
     * @remark :获取当前模块的所有数据
     * @name   :getModuleValueList
     * @author :lyh
     * @method :post
     * @time   :2024/8/7 17:37
     */
    public function getModuleValueList(){
        $this->request->validate([
            'module_id'=>'required',
        ],[
            'module_id.required' => '模块id不能为空',
        ]);
        $searchParam = [
            'module_id'=>$this->param['module_id'],
        ];
        $data = [];
        $moduleValueModel = new ExtensionModuleValue();
        if(isset($this->param['field_id']) && ($this->param['field_id'] != 0) && isset($this->param['value'])){
            $uuidArr = $moduleValueModel->formatQuery(['field_id'=>$this->param['field_id'],'value'=>$this->param['value'],'module_id'=>$this->param['module_id']])->distinct()->pluck('uuid')->toArray();
            if(!empty($uuidArr)){
                $searchParam['uuid'] = ['in',$uuidArr];
            }
        }
        if(isset($this->param['start_time']) && !empty($this->param['start_time']) && isset($this->param['end_time']) && !empty($this->param['end_time'])){
            $searchParam['created_at'] = ['between',[$this->param['start_time'],$this->param['end_time']]];
        }
        $lists = $moduleValueModel->list($searchParam);
        if(!empty($lists)){
            foreach ($lists as $k => $v){
                $data[$v['uuid']][$v['field_id']] = $v['value'];
                $data[$v['uuid']]['created_at'] = $v['created_at'];
            }
        }
        $resultData = [];
        foreach ($data as $k => $v){
            $v['uuid'] = $k;
            $resultData[] = $v;
        }
        $this->response('success',Code::SUCCESS,$resultData);
    }

    /**
     * @remark :保存数据
     * @name   :saveModuleValue
     * @author :lyh
     * @method :post
     * @time   :2024/8/7 17:59
     */
    public function editModuleValue(){
        $this->request->validate([
            'module_id'=>'required',
        ],[
            'module_id.required' => '模块id不能为空',
        ]);
        $data = $this->param['data'];
        $moduleValueModel = new ExtensionModuleValue();
        foreach ($data as $k => $v){
            $info = $moduleValueModel->read(['uuid'=>$this->param['uuid'],'field_id'=>$v['field_id'],'module_id'=>$this->param['module_id']]);
            if($info === false){
                $data = [
                    'uuid'=>$this->param['uuid'],
                    'module_id'=>$this->param['module_id'],
                    'field_id'=>$v['field_id'],
                    'value'=>$v['value']
                ];
                $moduleValueModel->addReturnId($data);
            }else{
                if($this->user['project_id'] == 2205 && $this->param['module_id'] == 1){
                    if($v['field_id'] == 12 && (!empty($v['value']) && !empty($info['value']))){//下拉框数据
                        $filedModel = new ExtensionModuleField();
                        $fileInfo = $filedModel->read(['id'=>12]);//获取当前下拉框的数据
                        $statusData = json_decode($fileInfo['data'],true);
                        $status_data = [];
                        $number = 1;
                        foreach ($statusData as $v){
                            $status_data[$v] = $number;
                            $number++;
                        }
                        if($status_data[$info['value']] > $status_data[$v['value']]){
                            $this->fail('流程控制只能往下选择');
                        }
                    }
                }
                $moduleValueModel->edit(['value'=>$v['value'] ?? ''],['id'=>$info['id']]);
            }
        }
        $this->response('success',Code::SUCCESS,['uuid'=>$this->param['uuid']]);
    }


    /**
     * @remark :新增數據
     * @name   :addModuleValue
     * @author :lyh
     * @method :post
     * @time   :2024/8/8 10:00
     */
    public function addModuleValue(){
        $this->request->validate([
            'module_id'=>'required',
        ],[
            'module_id.required' => '模块id不能为空',
        ]);
        $moduleValueModel = new ExtensionModuleValue();
        $info = $moduleValueModel->where('module_id',$this->param['module_id'])->orderBy('uuid','desc')->first();
        if(empty($info)){
            $uuid = 1;
        }else{
            $info = $info->toArray();
            $uuid = $info['uuid'] + 1;
        }
        $data = $this->param['data'];
        $moduleValueModel = new ExtensionModuleValue();
        foreach ($data as $k => $v){
            $data = [
                'uuid'=>$uuid,
                'module_id'=>$this->param['module_id'],
                'field_id'=>$v['field_id'],
                'value'=>$v['value']
            ];
            $moduleValueModel->addReturnId($data);
        }
        $this->response('success',Code::SUCCESS,['uuid'=>$uuid]);
    }

    /**
     * @remark :生成唯一的字符串
     * @name   :sendUniqueStr
     * @author :lyh
     * @method :post
     * @time   :2024/8/20 10:31
     */
    public function sendUniqueStr(){
        $this->request->validate([
            'id'=>'required',
        ],[
            'id.required' => '字段id不能为空',
        ]);
        $uniqueString = '';
        //查看当前字段id的data
        $moduleFieldModel = new ExtensionModuleField();
        $info = $moduleFieldModel->read(['id'=>$this->param['id']]);
        if(empty($info['data'])){
            $uniqueString = md5(time() . rand(1000, 9999));
        }else{
            $data = json_decode($info['data']);
            foreach ($data as  $v){
                foreach ($v as $k => $sonV){
                    if($k == 1){
                        $uniqueString .= $sonV;
                    }elseif ($k == 2){
                        $uniqueString .= date('YmdHis');
                    }elseif ($k == 3){
                        $uniqueString .= uniqid();
                    }else{
                        $randomString = md5(uniqid(mt_rand(), true));
                        $uniqueString .= substr($randomString, 0, (int)$sonV);
                    }
                }
            }
        }
        $this->response('success',Code::SUCCESS,['str'=>$uniqueString]);
    }

    /**
     * @remark :获取类型
     * @name   :getFieldType
     * @author :lyh
     * @method :post
     * @time   :2024/8/22 11:22
     */
    public function getFieldType(){
        $data = [
            1=>'文本框',
            2=>'多文本框',
            3=>'图片框',
            4=>'文件框',
            5=>'下拉框',
            6=>'自动订单'
        ];
        $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @remark :设置排序
     * @name   :setSort
     * @author :lyh
     * @method :post
     * @time   :2024/8/22 17:27
     */
    public function setSort(){
        $moduleFieldModel = new ExtensionModuleField();
        $num = 100;
        foreach ($this->param['id'] as $id){
            $moduleFieldModel->edit(['sort'=>$num],['id'=>$id]);
            $num--;
        }
        $this->response('success');
    }

    /**
     * @remark :设置搜索参数
     * @name   :setSearchParam
     * @author :lyh
     * @method :post
     * @time   :2024/8/23 16:24
     */
    public function setSearchParam(){
        $this->request->validate([
            'module_id'=>'required',
            'id'=>'required|array'
        ],[
            'module_id.required' => '模块id不能为空',
            'id.required'=>'id不能为空',
            'id.array'=>'id是一个数组'
        ]);
        $moduleFieldModel = new ExtensionModuleField();
        $moduleFieldModel->edit(['is_search'=>0],['module_id'=>$this->param['module_id']]);
        $moduleFieldModel->edit(['is_search'=>1],['id'=>['in',$this->param['id']]]);
        $this->response('success');
    }

    /**
     * @remark :删除数据
     * @name   :delExtensionValue
     * @author :lyh
     * @method :post
     * @time   :2024/8/26 14:25
     */
    public function delExtensionValue(){
        $this->request->validate([
            'module_id'=>'required',
            'uuid'=>'required',
        ],[
            'module_id.required' => '模块id不能为空',
            'uuid.required' => '字段id不能为空',
        ]);
        $moduleValueModel = new ExtensionModuleValue();
        $moduleValueModel->del(['module_id'=>$this->param['module_id'],'uuid'=>$this->param['uuid']]);
        $this->response('success');
    }


}