Extension3915ModuleController.php 5.1 KB
<?php
/**
 * @remark :
 * @name   :Extension3915ModuleController.php
 * @author :lyh
 * @method :post
 * @time   :2025/11/20 11:42
 */

namespace App\Http\Controllers\Bside\ExtensionModule;

use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Models\ExtentModule\ExtensionModuleField;
use App\Models\ExtentModule\ExtensionModuleValue;
use Illuminate\Support\Facades\Cache;

class Extension3915ModuleController extends BaseController
{

    /**
     * @remark :获取列表数据
     * @name   :lists
     * @author :lyh
     * @method :post
     * @time   :2025/11/20 14:38
     */
    public function lists(){
        $this->request->validate([
            'module_id'=>'required',
        ],[
            'module_id.required' => '模块id不能为空',
        ]);
        $searchParam = [
            'module_id'=>$this->param['module_id'],
        ];
        //先暂时去掉缓存
//        $resultData = Cache::get('extension_module_list_3915_'.$this->param['module_id']);
        $resultData = [];
        if(empty($resultData)){
            $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;
            }
            Cache::add('extension_module_list_3915_'.$this->param['module_id'],$resultData);
        }
        $resultData = $this->formatPaginate($resultData,$this->row,$this->page);
        //执行分页
        $this->response('success',Code::SUCCESS,$resultData);
    }

    /**
     * @remark :分页
     * @name   :simplePaginate
     * @author :lyh
     * @method :post
     * @time   :2025/11/20 14:50
     */
    public function formatPaginate($data, $size = 20, $page = 1)
    {
        $collection = collect($data);
        $total = $collection->count();
        $totalPage = max(1, ceil($total / $size));
        // 确保页码在有效范围内
        $page = max(1, min($page, $totalPage));
        $list = $collection->forPage($page, $size)->values()->toArray();
        return [
            'list' => $list,
            'page' => (int)$page,
            'size' => (string)$size,
            'total' => $total,
            'total_page' => $totalPage
        ];
    }

    /**
     * @remark :导入数据
     * @name   :importData
     * @author :lyh
     * @method :post
     * @time   :2025/11/20 14:40
     */
    public function importData()
    {
        $this->request->validate([
            'module_id'=>'required',
        ],[
            'module_id.required' => '模块id不能为空',
        ]);
        if($this->user['project_id'] != 3915){
            $this->fail('当前项目不能调用当前方法');
        }
        $moduleFieldModel = new ExtensionModuleField();
        $filedList = $moduleFieldModel->where(['module_id' => $this->param['module_id']])->pluck( 'id','field_name')->toArray();
        if(empty($filedList)){
            $this->fail('请先设置字段,再添加数据');
        }
        $data = $this->param['data'];
        $moduleValueModel = new ExtensionModuleValue();
        $key_filedId = [];
        $resultData = [];
        try {
            foreach ($data as $k => $v){
                foreach ($v as $k1 => $v1){
                    if($k == 0){
                        if(isset($filedList[$v1])){
                            $key_filedId[$k1] = $filedList[$v1];
                        }
                        continue;
                    }
                    $resultData[] = [
                        'uuid'=>$k + 1,
                        'module_id'=>$this->param['module_id'],
                        'field_id'=>$key_filedId[$k1],
                        'value'=>$v1 ?? '',
                    ];
                }
            }
            if(!empty($resultData)){
                //todo::优先截断表
                $moduleValueModel->truncate();
                $moduleValueModel->insertAll($resultData);
            }
        }catch (\Exception $e){
            $this->fail('当前文件不能导入,请修改后再导入');
        }
        $this->response('success',Code::SUCCESS,$resultData);
    }
}