| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 | <?phpnamespace App\Http\Controllers\Admin;use App\Exports\InquireExport;use App\Http\Logics\Admin\InquireLogic;use App\Http\Models\Role;use App\Http\Models\Server;use App\Http\Models\Site;use App\Http\Models\User;use App\Http\Traits\HasSites;use Illuminate\Database\Eloquent\Builder;use Illuminate\Http\Request;use App\Http\Controllers\Controller;use Illuminate\Support\Facades\DB;/** * 询盘管理 * Class InquireController * @package App\Http\Controllers\Admin */class InquireController extends Controller{    use HasSites;    protected $logic;    public function __construct(InquireLogic $logic)    {        $this->logic = $logic;    }    private function getTimeFilter($dateRange)    {        if (!$dateRange) {            return [];        }        switch ($dateRange) {            case 'week':                $condition = [                    ['create_time', '>', strtotime(date('Y-m-d 23:59:59', strtotime('-1 week')))],                    ['create_time', '<=', strtotime(date('Y-m-d 23:59:59'))]                ];                break;            case 'month':                $condition = [                    ['create_time', '>', strtotime(date('Y-m-d 23:59:59', strtotime('-1 month')))],                    ['create_time', '<=', strtotime(date('Y-m-d 23:59:59'))]                ];                break;            case 'year':                $condition = [                    ['create_time', '>', strtotime(date('Y-m-d 23:59:59', strtotime('-1 year')))],                    ['create_time', '<=', strtotime(date('Y-m-d 23:59:59'))]                ];                break;            case 'all':                $condition = [];                break;            default:                $startDate = substr($dateRange, 0, 10);                $endDate = substr($dateRange, -10);                $condition = [                    ['create_time', '>=', strtotime(sprintf('%s 00:00:00', $startDate))],                    ['create_time', '<=', strtotime(sprintf('%s 23:59:59', $endDate))]                ];                break;        }        return $condition;    }    /**     * 客户询盘列表     * @param Request $request     * @param $siteId     * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View     */    public function index(Request $request, $siteId)    {        $dateRange = $request->input('time_range');        $condition = $this->getTimeFilter($dateRange);        if (!$request->ajax()) {            return view('admin/inquire/index', [                'siteId' => $siteId            ]);        }        $site = Site::query()->where(['id' => $siteId])->first();        $server = Server::query()->where(['server_id' => $site->server_id])->first();        $isDelete = $request->input('is_delete') ?? 0;        list($records, $realInquire) = $this->logic->pageRecords($request, $server, $site, $condition, $isDelete);        /**         * @var \Illuminate\Contracts\Pagination\LengthAwarePaginator $records         */        return response()->json([            'rows' => $records->items(),            'total' => $records->total(),            'extra' => [                'allInquire' => $records->total(),                'realInquire' => $realInquire            ]        ]);    }    //导出到excel    public function exportExcel(Request $request, $siteId)    {        $dateRange = $request->input('time_range');        $condition = $this->getTimeFilter($dateRange);        $site = Site::query()->where(['id' => $siteId])->first();        $server = Server::query()->where(['server_id' => $site->server_id])->first();        $records = $this->logic->pageRecordsExport($request, $server, $site, $condition);        array_unshift($records, ['客户名字', '客户邮箱', '电话', '国家', '询盘时间', '询盘主题', '询盘内容', '是否真实询盘', '是否查看', '留言', '链接']);        return (new InquireExport($records))->download(sprintf('询盘%s.xls', date('YmdHis')));    }    //导出到excel    public function exportAllExcel($siteId)    {        $site = Site::query()->where(['id' => $siteId])->first();        $server = Server::query()->where(['server_id' => $site->server_id])->first();        $records = $this->logic->PageRecordsAllExport($server, $site);        array_unshift($records, ['id', 'user_id', 'notice', 'url', 'request', 'cookie', 'client_ip', 'create_time']);        return (new InquireExport($records))->download(sprintf('询盘%s.xls', date('YmdHis')));    }    /**     * 项目详情客户询盘列表页面     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View     */    public function lists()    {        $user = auth()->user();        $site = $user->sites->first(); //读取分配的站点信息        if (!$site) {            return view('admin/errors/tips', [                'tips' => '没有分配的站点'            ]);        }        $server = Server::query()->where(['server_id' => $site->server_id])->first();        if (!$server) {            return view('admin/errors/tips', [                'tips' => '服务器信息不存在'            ]);        }        return view('admin/inquire/show_index', [            'siteId' => $site->id,            'nowRoleId' => $user->role_id        ]);    }    //分配用户    public function assignUser(Request $request)    {        $oneSite = $this->hasUserOneSite();        $inquireIds = $request->input('inquireIds');        $assignUserIds = $request->input('assignUserIds');        if (!$request->ajax()) {            $selects = [];            if (count($inquireIds) == 1) {                $selects = DB::table('user_has_inquire')->where(['inquire_id' => $inquireIds[0]])                    ->get()->pluck('user_id')->toArray();            }            $selectCol = ['id', 'username', 'email', 'created_at', 'role_id', 'status', 'is_super', 'nickname'];            $users = User::query()->select($selectCol)                ->where([['role_id', '=', Role::TYPE_TYPE_CUSTOMER_STAFF]])->whereHas('sites', function (Builder $builder) use ($oneSite) {                    $builder->where('id', $oneSite->id);                })->get()->toArray();            array_walk($users, function (&$item) use (&$selects) {                $item['open'] = true;                $item['name'] = $item['username'] . '[' . $item['nickname'] . ']';                if (in_array($item['id'], $selects)) {                    $item['checked'] = true;                }            });            return view('admin/inquire/user_assign', [                'trees' => $users,                'inquireIds' => $inquireIds            ]);        }        foreach ($inquireIds as $inquireId) {            DB::table('user_has_inquire')->where(['inquire_id' => $inquireId])->delete();            $insertData = [];            foreach ($assignUserIds as $userId) {                $insertData[] = [                    'user_id' => $userId,                    'inquire_id' => $inquireId                ];            }            DB::table('user_has_inquire')->insert($insertData);        }        return response()->json(['message' => '操作成功']);    }    //询盘详情    public function detail(Request $request, $id)    {        $siteId = $request->input('siteId');        $site = Site::query()->with('server')->where(['id' => $siteId])->first();        if (empty($site->server)) {            return view('admin/errors/tips', [                'tips' => '站点服务器信息不存在',                'closeBtn' => true            ]);        }        $config = [            'connection_name' => sprintf('connection_name_%s', $site->id),            'host' => $site->server->server_ip,            'port' => '3306',            'database' => $site->database,            'username' => $site->server->mysql_user_name,            'password' => $site->server->mysql_passwd,        ];        config_connection($config);        $record = DB::connection($config['connection_name'])->table('user_msg')->where([            'id' => $id        ])->first();        if (empty($record->is_read)) {            DB::connection($config['connection_name'])->table('user_msg')->where([                'id' => $id, 'is_read' => 0            ])->update(['is_read' => 1]);        }        return view('admin/inquire/detail', [            'data' => $record,            'siteId' => $siteId        ]);    }    //询盘详情    public function mailDetail(Request $request, $id)    {        $siteId = $request->input('siteId');        $site = Site::query()->with('server')->where(['id' => $siteId])->first();        if (empty($site->server)) {            return view('admin/errors/tips', [                'tips' => '站点服务器信息不存在',                'closeBtn' => true            ]);        }        $config = [            'connection_name' => sprintf('connection_name_%s', $site->id),            'host' => $site->server->server_ip,            'port' => '3306',            'database' => $site->database,            'username' => $site->server->mysql_user_name,            'password' => $site->server->mysql_passwd,        ];        config_connection($config);        $record = DB::connection($config['connection_name'])->table('user_msg')->where([            'id' => $id        ])->first();        return view('admin/inquire/mail_detail', [            'data' => $record,            'siteId' => $siteId        ]);    }    /**     * 修改询盘状态     * @param Request $request     * @return \Illuminate\Http\JsonResponse     */    public function whetherReality(Request $request)    {        try {            $id = $request->input('id');            $status = $request->input('status');            $siteId = $request->input('siteId');            $site = Site::query()->with('server')->where(['id' => $siteId])->first();            $config = [                'connection_name' => sprintf('connection_name_%s', $site->id),                'host' => $site->server->server_ip,                'port' => '3306',                'database' => $site->database,                'username' => $site->server->mysql_user_name,                'password' => $site->server->mysql_passwd,            ];            config_connection($config);            DB::connection($config['connection_name'])->table('user_msg')->where('id', $id)->update(['is_delete' => $status]);            return response()->json(['message' => '操作成功']);        } catch (\Throwable $exception) {            return response()->json(['message' => '服务器失去链接'], 400);        }    }}
 |