mingsoft 3 年 前
コミット
78354c7933

+ 1 - 1
src/main/java/net/mingsoft/cms/action/CategoryAction.java

@@ -54,7 +54,7 @@ import java.util.List;
  * 创建日期:2019-11-28 15:12:32<br/>
  * 历史修订:<br/>
  */
-@Api(value = "分类接口")
+@Api(tags={"后端-内容模块接口"})
 @Controller("cmsCategoryAction")
 @RequestMapping("/${ms.manager.path}/cms/category")
 public class CategoryAction extends BaseAction {

+ 1 - 4
src/main/java/net/mingsoft/cms/action/ContentAction.java

@@ -20,7 +20,6 @@
  */
 package net.mingsoft.cms.action;
 
-import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -34,12 +33,10 @@ import net.mingsoft.basic.util.StringUtil;
 import net.mingsoft.cms.bean.ContentBean;
 import net.mingsoft.cms.biz.ICategoryBiz;
 import net.mingsoft.cms.biz.IContentBiz;
-import net.mingsoft.cms.constant.e.CategoryTypeEnum;
 import net.mingsoft.cms.entity.CategoryEntity;
 import net.mingsoft.cms.entity.ContentEntity;
 import net.mingsoft.mdiy.biz.IModelBiz;
 import net.mingsoft.mdiy.entity.ModelEntity;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -62,7 +59,7 @@ import java.util.Map;
  * 创建日期:2019-11-28 15:12:32<br/>
  * 历史修订:<br/>
  */
-@Api(value = "文章接口")
+@Api(tags={"后端-内容模块接口"})
 @Controller("cmsContentAction")
 @RequestMapping("/${ms.manager.path}/cms/content")
 public class ContentAction extends BaseAction {

+ 2 - 0
src/main/java/net/mingsoft/cms/action/GeneraterAction.java

@@ -49,6 +49,7 @@ import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -64,6 +65,7 @@ import java.util.List;
  * @date: 2018年1月31日 下午2:52:07
  * @Copyright: 2018 www.mingsoft.net Inc. All rights reserved.
  */
+@ApiIgnore
 @Controller("cmsGenerater")
 @RequestMapping("/${ms.manager.path}/cms/generate")
 @Scope("request")

+ 15 - 32
src/main/java/net/mingsoft/cms/action/web/CategoryAction.java

@@ -20,49 +20,32 @@
  */
 package net.mingsoft.cms.action.web;
 
-import java.util.List;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.alibaba.fastjson.JSON;
-import net.mingsoft.base.entity.ResultData;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.validation.BindingResult;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
-import org.springframework.ui.ModelMap;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.bind.annotation.ModelAttribute;
-
-import net.mingsoft.cms.biz.ICategoryBiz;
-import net.mingsoft.cms.entity.CategoryEntity;
-import net.mingsoft.base.util.JSONObject;
-import net.mingsoft.base.entity.BaseEntity;
-import net.mingsoft.basic.util.BasicUtil;
-import net.mingsoft.basic.util.StringUtil;
-import net.mingsoft.base.filter.DateValueFilter;
-import net.mingsoft.base.filter.DoubleValueFilter;
-import net.mingsoft.basic.bean.EUListBean;
-import net.mingsoft.basic.annotation.LogAnn;
-
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import net.mingsoft.base.entity.ResultData;
+import net.mingsoft.basic.bean.EUListBean;
+import net.mingsoft.basic.util.BasicUtil;
+import net.mingsoft.cms.biz.ICategoryBiz;
+import net.mingsoft.cms.entity.CategoryEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 /**
  * 分类管理控制层
  * @author 铭飞开发团队
  * 创建日期:2019-11-28 15:12:32<br/>
  * 历史修订:<br/>
  */
-@Api(value = "分类接口")
+@Api(tags={"前端-内容模块接口"})
 @Controller("WebcmsCategoryAction")
 @RequestMapping("/cms/category")
 public class CategoryAction extends net.mingsoft.cms.action.BaseAction{

+ 1 - 1
src/main/java/net/mingsoft/cms/action/web/ContentAction.java

@@ -51,7 +51,7 @@ import java.util.List;
  * 创建日期:2019-11-28 15:12:32<br/>
  * 历史修订:<br/>
  */
-@Api(value = "文章接口")
+@Api(tags={"前端-内容模块接口"})
 @Controller("WebcmsContentAction")
 @RequestMapping("/cms/content")
 public class ContentAction extends net.mingsoft.cms.action.BaseAction{

+ 2 - 20
src/main/java/net/mingsoft/cms/action/web/MCmsAction.java

@@ -22,36 +22,26 @@
 
 package net.mingsoft.cms.action.web;
 
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.lang.Editor;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.PageUtil;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import freemarker.core.ParseException;
 import freemarker.template.MalformedTemplateNameException;
-import freemarker.template.TemplateException;
 import freemarker.template.TemplateNotFoundException;
-import net.bytebuddy.implementation.bytecode.Throw;
 import net.mingsoft.base.constant.Const;
 import net.mingsoft.basic.exception.BusinessException;
 import net.mingsoft.basic.util.BasicUtil;
-import net.mingsoft.basic.util.StringUtil;
 import net.mingsoft.cms.bean.CategoryBean;
 import net.mingsoft.cms.bean.ContentBean;
 import net.mingsoft.cms.biz.ICategoryBiz;
 import net.mingsoft.cms.biz.IContentBiz;
-import net.mingsoft.cms.constant.e.CategoryTypeEnum;
 import net.mingsoft.cms.entity.CategoryEntity;
 import net.mingsoft.cms.entity.ContentEntity;
-import net.mingsoft.cms.util.CmsParserUtil;
 import net.mingsoft.mdiy.bean.PageBean;
 import net.mingsoft.mdiy.biz.IModelBiz;
 import net.mingsoft.mdiy.biz.IPageBiz;
 import net.mingsoft.mdiy.entity.ModelEntity;
 import net.mingsoft.mdiy.util.ParserUtil;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.shiro.util.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
@@ -59,6 +49,7 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
+import springfox.documentation.annotations.ApiIgnore;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -76,6 +67,7 @@ import java.util.Map;
  * @date 2018年12月17日
  * @date 2021年8月26日取消默认search.htm
  */
+@ApiIgnore
 @Controller("dynamicPageAction")
 @RequestMapping("/mcms")
 public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
@@ -571,14 +563,4 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
         }
     }
 
-
-    public static void main(String[] args) {
-
-        int[] a = PageUtil.rainbow(20, 30, 5);
-        for (int _a : a) {
-            System.out.println(_a);
-        }
-
-    }
-
 }

+ 9 - 3
src/main/java/net/mingsoft/cms/entity/CategoryEntity.java

@@ -20,9 +20,6 @@
  */
 package net.mingsoft.cms.entity;
 
-import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.annotation.JSONField;
 import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -455,4 +452,13 @@ public class CategoryEntity extends BaseEntity {
         return categoryImg;
     }
 
+    @TableField(exist = false)
+    private String typepath;
+    /**
+     * 获取栏目图片 (标签使用)
+     */
+    public String getTypepath() {
+        return categoryPath;
+    }
+
 }

+ 60 - 0
src/main/java/net/mingsoft/cms/upgrade/Upgrade.java

@@ -0,0 +1,60 @@
+package net.mingsoft.cms.upgrade;
+
+import net.mingsoft.basic.util.SpringUtil;
+import net.mingsoft.cms.biz.ICategoryBiz;
+import net.mingsoft.cms.entity.CategoryEntity;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author by 铭飞开源团队
+ * @Description
+ * @date 2020/6/19 15:58
+ */
+public class Upgrade {
+
+    /**
+     * 更新栏目分类的顶级节点和叶子节点
+     */
+    public void upgrade(){
+        ICategoryBiz categoryBiz = SpringUtil.getBean(ICategoryBiz.class);
+        List<CategoryEntity> list = categoryBiz.queryAll();
+
+        list.forEach(x->{
+
+            //将parentId第一行设为顶级节点
+            String topId = "0";
+            String parentId = x.getParentids();
+            if (parentId != null) {
+                topId = parentId.split(",")[0];
+            }
+            x.setTopId(topId);
+
+            String id = x.getId();
+            boolean leaf = true;
+            //判断是否叶子,循环查找,如果有节点的父节点中包含该节点的id则判断为否跳出循环
+            for (int i = 0; i< list.size(); i++) {
+                String pId = list.get(i).getParentids();
+                if (pId == null) {
+                    continue;
+                }
+                leaf = !pId.contains(id);
+                //如果不是叶子就跳出循环,不需要再判断了
+                if (!leaf) {
+                    break;
+                }
+            }
+            x.setLeaf(leaf);
+            //更新
+            Map<String, String> fields = new HashMap<>();
+            fields.put("leaf", x.getLeaf()?"1":"0");
+            fields.put("top_id", x.getTopId());
+            Map<String, String> where = new HashMap<>();
+            where.put("id", x.getId());
+            categoryBiz.updateBySQL("cms_category", fields, where);
+        });
+
+    }
+}

+ 167 - 0
src/main/java/net/mingsoft/config/WebConfig.java

@@ -0,0 +1,167 @@
+package net.mingsoft.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.support.spring.stat.BeanTypeAutoProxyCreator;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import net.mingsoft.basic.filter.XSSEscapeFilter;
+import net.mingsoft.basic.interceptor.ActionInterceptor;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.Ordered;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.web.context.request.RequestContextListener;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+
+
+    @Bean
+    public ActionInterceptor actionInterceptor() {
+        return new ActionInterceptor();
+    }
+
+//    @Bean
+//    public ConfigurationCustomizer configurationCustomizer() {
+//        return configuration -> configuration.setUseDeprecatedExecutor(false);
+//    }
+    // 最新版
+//    @Bean
+//    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+//        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+//        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.));
+//        return interceptor;
+//    }
+
+
+    /**
+     * 增加对rest api鉴权的spring mvc拦截器
+     */
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        // 排除配置
+        registry.addInterceptor(actionInterceptor()).excludePathPatterns("/static/**", "/app/**", "/webjars/**",
+                "/*.html", "/*.htm");
+    }
+
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        String uploadMapping = MSProperties.upload.mapping;
+        String uploadFloderPath = MSProperties.upload.path;
+        String template = MSProperties.upload.template;
+        String htmlDir = MSProperties.htmlDir;
+        registry.addResourceHandler(uploadMapping).addResourceLocations(File.separator + uploadFloderPath + File.separator, "file:" + uploadFloderPath + File.separator);
+        registry.addResourceHandler("/template/**").addResourceLocations(File.separator + template + File.separator, "file:" + template + File.separator);
+        registry.addResourceHandler("/"+htmlDir+"/**").addResourceLocations("/"+htmlDir+"/", "file:"+htmlDir+"/");
+        //三种映射方式 webapp下、当前目录下、jar内
+        registry.addResourceHandler("/app/**").addResourceLocations("/app/", "file:app/", "classpath:/app/");
+        registry.addResourceHandler("/static/**").addResourceLocations("/static/", "file:static/", "classpath:/static/", "classpath:/META-INF/resources/");
+        registry.addResourceHandler("/api/**").addResourceLocations("/api/", "file:api/", "classpath:/api/");
+        if (new File(uploadFloderPath).isAbsolute()) {
+            //如果指定了绝对路径,上传的文件都映射到uploadMapping下
+            registry.addResourceHandler(uploadMapping).addResourceLocations("file:" + uploadFloderPath + File.separator
+                    //映射其他路径文件
+                    //,file:F://images
+            );
+        }
+    }
+
+
+    /**
+     * druid数据库连接池监控
+     */
+    @Bean
+    public BeanTypeAutoProxyCreator beanTypeAutoProxyCreator() {
+        BeanTypeAutoProxyCreator beanTypeAutoProxyCreator = new BeanTypeAutoProxyCreator();
+        beanTypeAutoProxyCreator.setTargetBeanType(DruidDataSource.class);
+        beanTypeAutoProxyCreator.setInterceptorNames("druidStatInterceptor");
+        return beanTypeAutoProxyCreator;
+    }
+
+    //XSS过滤器
+    @Bean
+    public FilterRegistrationBean xssFilterRegistration() {
+        XSSEscapeFilter xssFilter = new XSSEscapeFilter();
+        FilterRegistrationBean registration = new FilterRegistrationBean();
+        registration.setName("XSSFilter");
+        registration.addUrlPatterns("/*");
+        registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
+        xssFilter.includes.add(".*/search.do");
+        Map<String, String> initParameters = new HashMap();
+        boolean enable = true;
+        initParameters.put("isIncludeRichText", "false");
+        registration.setInitParameters(initParameters);
+        registration.setFilter(xssFilter);
+        registration.setEnabled(enable);
+        return registration;
+    }
+
+    /**
+     * RequestContextListener注册
+     */
+    @Bean
+    public ServletListenerRegistrationBean<RequestContextListener> requestContextListenerRegistration() {
+        return new ServletListenerRegistrationBean<>(new RequestContextListener());
+    }
+
+    /**
+     * 设置默认首页
+     */
+    @Override
+    public void addViewControllers(ViewControllerRegistry registry) {
+        registry.addViewController("/").setViewName("forward:/index");
+        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
+        WebMvcConfigurer.super.addViewControllers(registry);
+    }
+
+
+    /**
+     * 解决com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException 问题,提交实体不存在的字段异常
+     */
+    @Override
+    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
+        // TODO Auto-generated method stub
+        converters.add(mappingJackson2HttpMessageConverter());
+        WebMvcConfigurer.super.configureMessageConverters(converters);
+
+    }
+
+    @Bean
+    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
+        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
+        ObjectMapper objectMapper = new ObjectMapper();
+
+        //添加此配置
+        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        converter.setObjectMapper(objectMapper);
+        return converter;
+    }
+
+    @Bean
+    public ExecutorService crawlExecutorPool() {
+        // 创建线程池
+        ExecutorService pool =
+                new ThreadPoolExecutor(20, 20,
+                        0L, TimeUnit.MILLISECONDS,
+                        new LinkedBlockingQueue<Runnable>());
+        return pool;
+    }
+
+
+}