InquireController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Exports\InquireExport;
  4. use App\Http\Logics\Admin\InquireLogic;
  5. use App\Http\Models\Role;
  6. use App\Http\Models\Server;
  7. use App\Http\Models\Site;
  8. use App\Http\Models\User;
  9. use App\Http\Traits\HasSites;
  10. use Illuminate\Database\Eloquent\Builder;
  11. use Illuminate\Http\Request;
  12. use App\Http\Controllers\Controller;
  13. use Illuminate\Support\Facades\DB;
  14. /**
  15. * 询盘管理
  16. * Class InquireController
  17. * @package App\Http\Controllers\Admin
  18. */
  19. class InquireController extends Controller
  20. {
  21. use HasSites;
  22. protected $logic;
  23. public function __construct(InquireLogic $logic)
  24. {
  25. $this->logic = $logic;
  26. }
  27. private function getTimeFilter($dateRange)
  28. {
  29. if (!$dateRange) {
  30. return [];
  31. }
  32. switch ($dateRange) {
  33. case 'week':
  34. $condition = [
  35. ['create_time', '>', strtotime(date('Y-m-d 23:59:59', strtotime('-1 week')))],
  36. ['create_time', '<=', strtotime(date('Y-m-d 23:59:59'))]
  37. ];
  38. break;
  39. case 'month':
  40. $condition = [
  41. ['create_time', '>', strtotime(date('Y-m-d 23:59:59', strtotime('-1 month')))],
  42. ['create_time', '<=', strtotime(date('Y-m-d 23:59:59'))]
  43. ];
  44. break;
  45. case 'year':
  46. $condition = [
  47. ['create_time', '>', strtotime(date('Y-m-d 23:59:59', strtotime('-1 year')))],
  48. ['create_time', '<=', strtotime(date('Y-m-d 23:59:59'))]
  49. ];
  50. break;
  51. case 'all':
  52. $condition = [];
  53. break;
  54. default:
  55. $startDate = substr($dateRange, 0, 10);
  56. $endDate = substr($dateRange, -10);
  57. $condition = [
  58. ['create_time', '>=', strtotime(sprintf('%s 00:00:00', $startDate))],
  59. ['create_time', '<=', strtotime(sprintf('%s 23:59:59', $endDate))]
  60. ];
  61. break;
  62. }
  63. return $condition;
  64. }
  65. /**
  66. * 客户询盘列表
  67. * @param Request $request
  68. * @param $siteId
  69. * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
  70. */
  71. public function index(Request $request, $siteId)
  72. {
  73. $dateRange = $request->input('time_range');
  74. $condition = $this->getTimeFilter($dateRange);
  75. if (!$request->ajax()) {
  76. return view('admin/inquire/index', [
  77. 'siteId' => $siteId
  78. ]);
  79. }
  80. $site = Site::query()->where(['id' => $siteId])->first();
  81. $server = Server::query()->where(['server_id' => $site->server_id])->first();
  82. $isDelete = $request->input('is_delete') ?? 0;
  83. list($records, $realInquire) = $this->logic->pageRecords($request, $server, $site, $condition, $isDelete);
  84. /**
  85. * @var \Illuminate\Contracts\Pagination\LengthAwarePaginator $records
  86. */
  87. return response()->json([
  88. 'rows' => $records->items(),
  89. 'total' => $records->total(),
  90. 'extra' => [
  91. 'allInquire' => $records->total(),
  92. 'realInquire' => $realInquire
  93. ]
  94. ]);
  95. }
  96. //导出到excel
  97. public function exportExcel(Request $request, $siteId)
  98. {
  99. $dateRange = $request->input('time_range');
  100. $condition = $this->getTimeFilter($dateRange);
  101. $site = Site::query()->where(['id' => $siteId])->first();
  102. $server = Server::query()->where(['server_id' => $site->server_id])->first();
  103. $records = $this->logic->pageRecordsExport($request, $server, $site, $condition);
  104. array_unshift($records, ['客户名字', '客户邮箱', '电话', '国家', '询盘时间', '询盘主题', '询盘内容', '是否真实询盘', '是否查看', '留言', '链接']);
  105. return (new InquireExport($records))->download(sprintf('询盘%s.xls', date('YmdHis')));
  106. }
  107. //导出到excel
  108. public function exportAllExcel($siteId)
  109. {
  110. $site = Site::query()->where(['id' => $siteId])->first();
  111. $server = Server::query()->where(['server_id' => $site->server_id])->first();
  112. $records = $this->logic->PageRecordsAllExport($server, $site);
  113. array_unshift($records, ['id', 'user_id', 'notice', 'url', 'request', 'cookie', 'client_ip', 'create_time']);
  114. return (new InquireExport($records))->download(sprintf('询盘%s.xls', date('YmdHis')));
  115. }
  116. /**
  117. * 项目详情客户询盘列表页面
  118. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  119. */
  120. public function lists()
  121. {
  122. $user = auth()->user();
  123. $site = $user->sites->first(); //读取分配的站点信息
  124. if (!$site) {
  125. return view('admin/errors/tips', [
  126. 'tips' => '没有分配的站点'
  127. ]);
  128. }
  129. $server = Server::query()->where(['server_id' => $site->server_id])->first();
  130. if (!$server) {
  131. return view('admin/errors/tips', [
  132. 'tips' => '服务器信息不存在'
  133. ]);
  134. }
  135. return view('admin/inquire/show_index', [
  136. 'siteId' => $site->id,
  137. 'nowRoleId' => $user->role_id
  138. ]);
  139. }
  140. //分配用户
  141. public function assignUser(Request $request)
  142. {
  143. $oneSite = $this->hasUserOneSite();
  144. $inquireIds = $request->input('inquireIds');
  145. $assignUserIds = $request->input('assignUserIds');
  146. if (!$request->ajax()) {
  147. $selects = [];
  148. if (count($inquireIds) == 1) {
  149. $selects = DB::table('user_has_inquire')->where(['inquire_id' => $inquireIds[0]])
  150. ->get()->pluck('user_id')->toArray();
  151. }
  152. $selectCol = ['id', 'username', 'email', 'created_at', 'role_id', 'status', 'is_super', 'nickname'];
  153. $users = User::query()->select($selectCol)
  154. ->where([['role_id', '=', Role::TYPE_TYPE_CUSTOMER_STAFF]])->whereHas('sites', function (Builder $builder) use ($oneSite) {
  155. $builder->where('id', $oneSite->id);
  156. })->get()->toArray();
  157. array_walk($users, function (&$item) use (&$selects) {
  158. $item['open'] = true;
  159. $item['name'] = $item['username'] . '[' . $item['nickname'] . ']';
  160. if (in_array($item['id'], $selects)) {
  161. $item['checked'] = true;
  162. }
  163. });
  164. return view('admin/inquire/user_assign', [
  165. 'trees' => $users,
  166. 'inquireIds' => $inquireIds
  167. ]);
  168. }
  169. foreach ($inquireIds as $inquireId) {
  170. DB::table('user_has_inquire')->where(['inquire_id' => $inquireId])->delete();
  171. $insertData = [];
  172. foreach ($assignUserIds as $userId) {
  173. $insertData[] = [
  174. 'user_id' => $userId,
  175. 'inquire_id' => $inquireId
  176. ];
  177. }
  178. DB::table('user_has_inquire')->insert($insertData);
  179. }
  180. return response()->json(['message' => '操作成功']);
  181. }
  182. //询盘详情
  183. public function detail(Request $request, $id)
  184. {
  185. $siteId = $request->input('siteId');
  186. $site = Site::query()->with('server')->where(['id' => $siteId])->first();
  187. if (empty($site->server)) {
  188. return view('admin/errors/tips', [
  189. 'tips' => '站点服务器信息不存在',
  190. 'closeBtn' => true
  191. ]);
  192. }
  193. $config = [
  194. 'connection_name' => sprintf('connection_name_%s', $site->id),
  195. 'host' => $site->server->server_ip,
  196. 'port' => '3306',
  197. 'database' => $site->database,
  198. 'username' => $site->server->mysql_user_name,
  199. 'password' => $site->server->mysql_passwd,
  200. ];
  201. config_connection($config);
  202. $record = DB::connection($config['connection_name'])->table('user_msg')->where([
  203. 'id' => $id
  204. ])->first();
  205. if (empty($record->is_read)) {
  206. DB::connection($config['connection_name'])->table('user_msg')->where([
  207. 'id' => $id, 'is_read' => 0
  208. ])->update(['is_read' => 1]);
  209. }
  210. return view('admin/inquire/detail', [
  211. 'data' => $record,
  212. 'siteId' => $siteId
  213. ]);
  214. }
  215. //询盘详情
  216. public function mailDetail(Request $request, $id)
  217. {
  218. $siteId = $request->input('siteId');
  219. $site = Site::query()->with('server')->where(['id' => $siteId])->first();
  220. if (empty($site->server)) {
  221. return view('admin/errors/tips', [
  222. 'tips' => '站点服务器信息不存在',
  223. 'closeBtn' => true
  224. ]);
  225. }
  226. $config = [
  227. 'connection_name' => sprintf('connection_name_%s', $site->id),
  228. 'host' => $site->server->server_ip,
  229. 'port' => '3306',
  230. 'database' => $site->database,
  231. 'username' => $site->server->mysql_user_name,
  232. 'password' => $site->server->mysql_passwd,
  233. ];
  234. config_connection($config);
  235. $record = DB::connection($config['connection_name'])->table('user_msg')->where([
  236. 'id' => $id
  237. ])->first();
  238. return view('admin/inquire/mail_detail', [
  239. 'data' => $record,
  240. 'siteId' => $siteId
  241. ]);
  242. }
  243. /**
  244. * 修改询盘状态
  245. * @param Request $request
  246. * @return \Illuminate\Http\JsonResponse
  247. */
  248. public function whetherReality(Request $request)
  249. {
  250. try {
  251. $id = $request->input('id');
  252. $status = $request->input('status');
  253. $siteId = $request->input('siteId');
  254. $site = Site::query()->with('server')->where(['id' => $siteId])->first();
  255. $config = [
  256. 'connection_name' => sprintf('connection_name_%s', $site->id),
  257. 'host' => $site->server->server_ip,
  258. 'port' => '3306',
  259. 'database' => $site->database,
  260. 'username' => $site->server->mysql_user_name,
  261. 'password' => $site->server->mysql_passwd,
  262. ];
  263. config_connection($config);
  264. DB::connection($config['connection_name'])->table('user_msg')->where('id', $id)->update(['is_delete' => $status]);
  265. return response()->json(['message' => '操作成功']);
  266. } catch (\Throwable $exception) {
  267. return response()->json(['message' => '服务器失去链接'], 400);
  268. }
  269. }
  270. }