IndexController.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. package com.sooka.module.web.cms;
  2. import com.github.pagehelper.PageInfo;
  3. import com.google.common.collect.Maps;
  4. import com.sooka.ServletInitializer;
  5. import com.sooka.common.constant.CmsConst;
  6. import com.sooka.common.exception.CmsException;
  7. import com.sooka.common.utils.*;
  8. import com.sooka.component.beetl.thread.HtmlThread;
  9. import com.sooka.component.lucene.util.IndexObject;
  10. import com.sooka.module.web.cms.service.*;
  11. import com.sooka.module.web.cms.vo.TCmsContentVo;
  12. import com.sooka.module.web.system.service.AttachmentService;
  13. import com.sooka.mybatis.model.*;
  14. import org.slf4j.Logger;
  15. import org.slf4j.LoggerFactory;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.beans.factory.annotation.Value;
  18. import org.springframework.stereotype.Controller;
  19. import org.springframework.ui.Model;
  20. import org.springframework.web.bind.annotation.*;
  21. import org.springframework.web.servlet.ModelAndView;
  22. import tk.mybatis.mapper.util.StringUtil;
  23. import javax.servlet.http.HttpServletRequest;
  24. import java.io.*;
  25. import java.text.SimpleDateFormat;
  26. import java.util.*;
  27. import static com.sooka.common.constant.CmsConst.LOGIN_USER;
  28. /**
  29. * Description:前台首页
  30. *
  31. *
  32. * @create 2017-04-13
  33. **/
  34. @Controller
  35. @RequestMapping("/")
  36. public class IndexController {
  37. private final static Logger log = LoggerFactory.getLogger(IndexController.class);
  38. @Autowired
  39. private SiteService siteService;
  40. @Autowired
  41. private CategoryService categoryService;
  42. @Autowired
  43. private ContentService contentService;
  44. @Autowired
  45. private ModelService modelService;
  46. @Autowired
  47. private ModelFiledService modelFiledService;
  48. @Autowired
  49. private LuceneService luceneService;
  50. @Autowired
  51. private TopicService topicService;
  52. @Autowired
  53. private AdService adService;
  54. @Autowired
  55. private AttachmentService attachmentService;
  56. @Value("${system.site.name}")
  57. private String siteName;
  58. @Value("${system.http.host}")
  59. private String host;
  60. @Value("${server.port}")
  61. private String port;
  62. @Value("${system.http.protocol}")
  63. private String httpProtocol;
  64. @Value("${system.site.prefix}")
  65. private String sitePrefix;
  66. @Value("${system.site.subfix}")
  67. private String siteSubfix;
  68. @Value("${system.site.static}")
  69. private String siteStatic;
  70. @Value("${system.site.page.size}")
  71. private String pageSize;
  72. /*网站首页*/
  73. @GetMapping
  74. public ModelAndView index(@RequestParam(value = "keyword",required = false) String keyword){
  75. String domain = ControllerUtil.getDomain();
  76. log.debug("通过域名访问网站首页[{}]",domain);
  77. TCmsSite site = siteService.findByDomain(domain);
  78. if(CmsUtil.isNullOrEmpty(site)) {
  79. throw new CmsException(CmsConst.SITE_NOT_FOUND);
  80. }
  81. if(!StrUtil.isBlank(keyword)) {
  82. return new ModelAndView( "forward:/"+sitePrefix+"/search");
  83. }
  84. return new ModelAndView( "forward:/"+sitePrefix+"/"+site.getSiteId());
  85. }
  86. @GetMapping("/login")
  87. public ModelAndView login(){
  88. ModelAndView modelAndView=new ModelAndView("www/tuiyijunren/login");
  89. modelAndView.addObject("resPath",httpProtocol+"://"+ host+":"+port+"/"+siteName+"/"+"static"+"/"+"www");
  90. return modelAndView;
  91. }
  92. @GetMapping("/exit")
  93. public ModelAndView exit(HttpServletRequest request){
  94. request.getSession().removeAttribute(LOGIN_USER);
  95. return index(null);
  96. }
  97. @GetMapping("/register")
  98. public ModelAndView register(){
  99. ModelAndView modelAndView=new ModelAndView("www/tuiyijunren/register");
  100. modelAndView.addObject("resPath",httpProtocol+"://"+ host+":"+port+"/"+siteName+"/"+"static"+"/"+"www");
  101. return modelAndView;
  102. }
  103. @RequestMapping("/queryDescription")
  104. public ModelAndView QueryTitleDescription (String keyword, String siteId, @RequestParam(value = "number",defaultValue = "1") Integer pageNumber){
  105. ModelAndView modelAndView=new ModelAndView("www/xczxw/listBySouSuo");
  106. Map<String,Object> map =new HashMap<String,Object>(2);
  107. map.put("keyword",keyword);
  108. PageInfo<TCmsContent> tCmsContentPageInfo = contentService.QueryTitleDescription(pageNumber, map);
  109. TCmsSite site = new TCmsSite();
  110. site.setSiteId(Integer.parseInt(siteId));
  111. modelAndView.addObject("model",tCmsContentPageInfo);
  112. modelAndView.addObject("frontPath",httpProtocol+"://"+ host+":"+port+"/"+siteName+"/"+sitePrefix);
  113. modelAndView.addObject("resPath",httpProtocol+"://"+ host+":"+port+"/"+siteName+"/"+"static"+"/"+"www");
  114. modelAndView.addObject("keyword",keyword);
  115. modelAndView.addObject("siteId",siteId);
  116. modelAndView.addObject("site",site);
  117. return modelAndView;
  118. }
  119. //搜索
  120. @RequestMapping("/searchFor")
  121. public ModelAndView SearchTitleFor(String type, String lmid, String keyword, String siteId, @RequestParam(value = "number",defaultValue = "1") Integer pageNumber){
  122. ModelAndView modelAndView=new ModelAndView("www/tuiyijunren/listForSearch");
  123. Map<String,Object>map=new HashMap<>(3);
  124. map.put("type",type);
  125. if(lmid != null && !lmid.equals("0")){
  126. map.put("categoryId",lmid);
  127. }
  128. map.put("keyword",keyword);
  129. PageInfo<TCmsContent> tCmsContentPageInfo = contentService.SearchTitleFor(pageNumber,map);
  130. TCmsSite site = new TCmsSite();
  131. site.setSiteId(Integer.parseInt(siteId));
  132. modelAndView.addObject("model",tCmsContentPageInfo);
  133. modelAndView.addObject("frontPath",httpProtocol+"://"+ host+":"+port+"/"+siteName+"/"+sitePrefix);
  134. modelAndView.addObject("resPath",httpProtocol+"://"+ host+":"+port+"/"+siteName+"/"+"static"+"/"+"www");
  135. modelAndView.addObject("keyword",keyword);
  136. modelAndView.addObject("siteId",siteId);
  137. modelAndView.addObject("site",site);
  138. return modelAndView;
  139. }
  140. /**
  141. * 站点首页
  142. * @param siteId
  143. * @param model
  144. * @return
  145. */
  146. @GetMapping("/${system.site.prefix}/{siteId}")
  147. public String index(@PathVariable("siteId") Integer siteId,
  148. Model model,HttpServletRequest request){
  149. log.debug("通过站点Id访问网站首页[{}]",siteId);
  150. SimpleDateFormat formatYear = new SimpleDateFormat("yyyy");
  151. SimpleDateFormat format = new SimpleDateFormat("yyyy-M-d");
  152. SimpleDateFormat formatMonth = new SimpleDateFormat("M");
  153. //查询新闻资讯
  154. TCmsContentVo c= new TCmsContentVo();
  155. c.setCategoryId((long) 1058);
  156. PageInfo p = contentService.pages(1,4,c);
  157. List<IndexObject> xwdtList=p.getList();
  158. /* TCmsCategory category =categoryService.findById((long) 1036);
  159. TCmsModel cmsModel = modelService.findById(category.getModelId());*/
  160. /*判断是否开启静态*/
  161. File file = new File(PathUtil.getWebRootPath() +File.separator+ "html" + File.separator+ siteId + File.separator+"index.html");
  162. if (file.exists() && Boolean.parseBoolean(siteStatic)&& HtmlThread.size()<=0&&!ControllerUtil.isMobile()) {
  163. return "redirect:/html/"+ siteId + "/index.html";
  164. }
  165. TCmsSite site = siteService.findById(siteId);
  166. if(CmsUtil.isNullOrEmpty(site)) {
  167. throw new CmsException(CmsConst.SITE_NOT_FOUND);
  168. }
  169. if(!site.getStatus()) {
  170. throw new CmsException(CmsConst.SITE_LOCKED);
  171. }
  172. // model.addAttribute("content",contentService.findContentByContentIdAndTableName((long) 12834,cmsModel.getTableName()));
  173. model.addAttribute("title",site.getTitle());
  174. model.addAttribute("keyword",site.getKeyword());
  175. model.addAttribute("description",site.getDescription());
  176. model.addAttribute("site",site);
  177. model.addAttribute("xwdtList",xwdtList);
  178. TCmsUser user = (TCmsUser) request.getSession().getAttribute(LOGIN_USER);
  179. if (user == null) {
  180. model.addAttribute("btnId", "login");
  181. } else {
  182. model.addAttribute("btnId", "exit");
  183. model.addAttribute("nickname", user.getNickname());
  184. }
  185. if(StrUtil.isBlank(site.getTemplate())) {
  186. return view(CmsConst.INDEX_TPL);
  187. }
  188. return view((ControllerUtil.isMobile()&&site.getIsMobile())?site.getMobileTpl():site.getTemplate(),CmsConst.INDEX_TPL);
  189. }
  190. @GetMapping("/${system.site.prefix}/{siteId}/{categoryId}")
  191. public String category(@PathVariable("siteId") Integer siteId,
  192. @PathVariable("categoryId") Long categoryId,
  193. Model model, HttpServletRequest request){
  194. log.debug("栏目");
  195. TCmsSite site = siteService.findById(siteId);
  196. if(CmsUtil.isNullOrEmpty(site)) {
  197. throw new CmsException(CmsConst.SITE_NOT_FOUND);
  198. }
  199. TCmsCategory category = categoryService.findById(categoryId);
  200. if (request.getSession().getAttribute(LOGIN_USER) == null) {
  201. model.addAttribute("showState", false);
  202. } else {
  203. model.addAttribute("showState", true);
  204. }
  205. if(CmsUtil.isNullOrEmpty(category)) {
  206. throw new CmsException(CmsConst.CATEGORY_NOT_FOUND);
  207. }
  208. PageInfo page = contentService.page(1,siteId,category.getCategoryId());
  209. model.addAttribute("title",category.getCategoryName());
  210. model.addAttribute("keyword",site.getKeyword());
  211. model.addAttribute("description",site.getDescription());
  212. model.addAttribute("site",site);
  213. model.addAttribute("category",category);
  214. model.addAttribute("page",page);
  215. TCmsUser user = (TCmsUser) request.getSession().getAttribute(LOGIN_USER);
  216. if (user == null) {
  217. model.addAttribute("btnId", "login");
  218. } else {
  219. model.addAttribute("btnId", "exit");
  220. model.addAttribute("nickname", user.getNickname());
  221. }
  222. if(StrUtil.isBlank(site.getTemplate())) {
  223. return view(category.getIndexTpl());
  224. }
  225. return view((ControllerUtil.isMobile()&&site.getIsMobile())?site.getMobileTpl():site.getTemplate(),category.getIndexTpl());
  226. }
  227. /*网站栏目列表页*/
  228. @GetMapping("/${system.site.prefix}/{siteId}/{categoryId}/index_{pageNumber}")
  229. public String page(@PathVariable("siteId") Integer siteId,
  230. @PathVariable("categoryId") Long categoryId,
  231. @PathVariable(value = "pageNumber") Integer pageNumber,
  232. Model model){
  233. log.debug("列表");
  234. TCmsSite site = siteService.findById(siteId);
  235. if(CmsUtil.isNullOrEmpty(site)) {
  236. throw new CmsException(CmsConst.SITE_NOT_FOUND);
  237. }
  238. TCmsCategory category = categoryService.findById(categoryId);
  239. if(CmsUtil.isNullOrEmpty(category)) {
  240. throw new CmsException(CmsConst.CATEGORY_NOT_FOUND);
  241. }
  242. if(CmsUtil.isNullOrEmpty(pageNumber)) {
  243. throw new CmsException(CmsConst.PAGE_NOT_FOUND);
  244. }
  245. PageInfo page = contentService.page(pageNumber,siteId,category.getCategoryId());
  246. model.addAttribute("title",category.getCategoryName());
  247. model.addAttribute("keyword",site.getKeyword());
  248. model.addAttribute("description",site.getDescription());
  249. model.addAttribute("site",site);
  250. model.addAttribute("category",category);
  251. model.addAttribute("page",page);
  252. if(StrUtil.isBlank(site.getTemplate())) {
  253. return view(category.getListTpl());
  254. }
  255. return view((ControllerUtil.isMobile()&&site.getIsMobile())?site.getMobileTpl():site.getTemplate(),category.getListTpl());
  256. }
  257. /*网站内容页*/
  258. @GetMapping("/${system.site.prefix}/{siteId}/{categoryId}/{contentId}")
  259. public String content(@PathVariable("siteId") Integer siteId,
  260. @PathVariable("categoryId") Long categoryId,
  261. @PathVariable("contentId") Long contentId,
  262. Model model){
  263. TCmsSite site = siteService.findById(siteId);
  264. if(CmsUtil.isNullOrEmpty(site)) {
  265. throw new CmsException(CmsConst.SITE_NOT_FOUND);
  266. }
  267. TCmsCategory category = categoryService.findById(categoryId);
  268. if(CmsUtil.isNullOrEmpty(category)) {
  269. throw new CmsException(CmsConst.CATEGORY_NOT_FOUND);
  270. }
  271. TCmsModel contentModel = modelService.findById(category.getModelId());
  272. if(CmsUtil.isNullOrEmpty(category)) {
  273. throw new CmsException(CmsConst.PAGE_NOT_FOUND);
  274. }
  275. Map content = contentService.findContentByContentIdAndTableName(contentId,contentModel.getTableName());
  276. if(CmsUtil.isNullOrEmpty(content)) {
  277. throw new CmsException(CmsConst.CONTENT_NOT_FOUND);
  278. }
  279. contentService.viewUpdate(contentId);
  280. model.addAttribute("title",content.get("title"));
  281. model.addAttribute("keyword",content.get("keywords"));
  282. model.addAttribute("description",content.get("description"));
  283. model.addAttribute("site",site);
  284. model.addAttribute("category",category);
  285. model.addAttribute("content",content);
  286. if(StrUtil.isBlank(site.getTemplate())) {
  287. return this.view(category.getContentTpl());
  288. }
  289. return this.view((ControllerUtil.isMobile()&&site.getIsMobile())?site.getMobileTpl():site.getTemplate(),category.getContentTpl());
  290. }
  291. /*全文检索和模型字段检索*/
  292. @RequestMapping("/search")
  293. public String search(@RequestParam(value = "keyword",required = false) String keyword,
  294. @RequestParam(value = "m",defaultValue = "0") Integer modelId,
  295. @RequestParam(value = "s",defaultValue = "0") Integer siteId,
  296. @RequestParam(value = "c",defaultValue = "0") Long catId,
  297. @RequestParam(value = "p",defaultValue = "1") Integer pageNumber,
  298. HttpServletRequest request){
  299. log.debug("搜索");
  300. TCmsSite site = siteService.findById(siteId);
  301. if(CmsUtil.isNullOrEmpty(site)) {
  302. throw new CmsException(CmsConst.SITE_NOT_FOUND);
  303. }
  304. if (modelId > 0 && catId > 0) {
  305. String action = httpProtocol + "://" + ControllerUtil.getDomain()+"/"+sitePrefix+"/"+site.getSiteId();
  306. action += "/search?m=" + modelId + "&c=" + catId;
  307. TCmsCategory category = categoryService.findById(catId);
  308. if(CmsUtil.isNullOrEmpty(category)) {
  309. throw new CmsException(CmsConst.CATEGORY_NOT_FOUND);
  310. }
  311. TCmsModel model = modelService.findById(modelId);
  312. Map<String, Object> param = Maps.newHashMap();
  313. List<TCmsModelFiled> modelFileds = modelFiledService.findModelFiledListByModelId(modelId);
  314. /* 循环检索获取filedName和fildValue*/
  315. for (TCmsModelFiled filed : modelFileds) {
  316. String filedValue = request.getParameter(filed.getFiledName());
  317. if (!StrUtil.isBlank(filedValue)) {
  318. param.put(HtmlKit.getText(filed.getFiledName()).trim(), HtmlKit.getText(filedValue).trim());
  319. action += "&" + filed.getFiledName() + "=" + filedValue;
  320. }
  321. }
  322. PageInfo page = contentService.findContentListByModelFiledValue(pageNumber,catId,model.getTableName(), param);
  323. request.setAttribute("title",category.getCategoryName());
  324. request.setAttribute("keyword",site.getKeyword());
  325. request.setAttribute("description",site.getDescription());
  326. request.setAttribute("site", site);
  327. request.setAttribute("category", category);
  328. request.setAttribute("page", page);
  329. request.setAttribute("param", param);
  330. request.setAttribute("action", action);
  331. return view(site.getTemplate(), category.getListTpl());
  332. }else{
  333. String action = httpProtocol + "://" + ControllerUtil.getDomain()+"/"+sitePrefix+"/"+site.getSiteId();
  334. if(StrUtil.isBlank(keyword)) {
  335. throw new CmsException(CmsConst.SEARCH_KEYWORD_NOT_FOUND);
  336. }
  337. action +="/search?keyword="+keyword;
  338. PageInfo page =luceneService.page(pageNumber,Integer.parseInt(this.pageSize),keyword);
  339. request.setAttribute("page",page);
  340. request.setAttribute("site",site);
  341. request.setAttribute("action", action);
  342. request.setAttribute("keyword", keyword);
  343. return view(site.getTemplate(), CmsConst.SEARCH_TPL);
  344. }
  345. }
  346. /*专题*/
  347. @GetMapping("/${system.site.prefix}/{siteId}/topic/{topicId}")
  348. public String topic(@PathVariable("siteId") Integer siteId,
  349. @PathVariable("topicId") Integer topicId,
  350. Model model){
  351. TCmsSite site = siteService.findById(siteId);
  352. if(CmsUtil.isNullOrEmpty(site)) {
  353. throw new CmsException(CmsConst.SITE_NOT_FOUND);
  354. }
  355. TCmsTopic topic =topicService.findById(topicId);
  356. if(CmsUtil.isNullOrEmpty(topic)) {
  357. throw new CmsException(CmsConst.TOPIC_NOT_FOUND);
  358. }
  359. model.addAttribute("title",topic.getTopicName());
  360. model.addAttribute("keyword",topic.getKeywords());
  361. model.addAttribute("description",topic.getDescription());
  362. model.addAttribute("site",site);
  363. model.addAttribute("topic",topic);
  364. return view(site.getTemplate(), !StrUtil.isBlank(topic.getTopicTpl())?topic.getTopicTpl():CmsConst.TOPIC_TPL);
  365. }
  366. @RequestMapping(value = "/ad/js/{id}",produces = "text/javascript; charset=UTF-8")
  367. @ResponseBody
  368. public String AdJs(@PathVariable Integer id){
  369. if(CmsUtil.isNullOrEmpty(id)) {
  370. throw new CmsException("广告不存在!");
  371. }
  372. return adService.toJavascript(id);
  373. }
  374. @PostMapping("getAllCategory")
  375. @ResponseBody
  376. public List<TCmsCategory> getAllCategory(){
  377. return categoryService.findAll();
  378. }
  379. private String view(String viewName){
  380. return this.view("default",viewName);
  381. }
  382. private String view(String theme,String viewName){
  383. return "www/"+theme.trim()+"/"+viewName.trim();
  384. }
  385. }