Forráskód Böngészése

Merge branch 'usky-zyj' of uskycloud/usky-modules into server-165

James 1 éve
szülő
commit
a950e0d4d3

+ 2 - 1
service-website/service-website-biz/src/main/java/com/usky/website/controller/web/SiteArticleController.java

@@ -35,11 +35,12 @@ public class SiteArticleController {
     @GetMapping("siteArticleList")
     public ApiResult<CommonPage<SiteArticle>> siteArticleList(@RequestParam(value = "categoryid", required = false) Integer categoryid,
                                                               @RequestParam(value = "id", required = false) Integer id,
+                                                              @RequestParam(value = "articleid", required = false) Integer articleid,
                                                               @RequestParam(value = "title", required = false) String title,
                                                               @RequestParam(value = "order", required = false) String order,
                                                               @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
                                                               @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
-        return ApiResult.success(siteArticleService.siteArticleList(categoryid, id, title, order, pageNum, pageSize));
+        return ApiResult.success(siteArticleService.siteArticleList(categoryid, id, articleid, title, order, pageNum, pageSize));
     }
 
     /**

+ 43 - 0
service-website/service-website-biz/src/main/java/com/usky/website/interceptor/RedisInterceptor.java

@@ -0,0 +1,43 @@
+package com.usky.website.interceptor;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+import java.util.Set;
+
+@Component  //此处将其注入到容器中
+public class RedisInterceptor  implements HandlerInterceptor {
+
+    @Resource
+    RedisTemplate redisTemplate;
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        //拦截每一次请求并获取请求的URL作为Key
+        String url = String.valueOf(request.getRequestURL());
+        Map<String,String[]> map = request.getParameterMap();
+        Set<String> keys = map.keySet();
+        for(String key : keys){
+            if(key.equals("id")){
+                String[] value = map.get(key);
+                if(StringUtils.isNotBlank(value[0])){
+                    //默认访问一次请求都会对该请求进行计数+1
+                    redisTemplate.opsForValue().increment(value[0]);
+                }
+
+                break;
+            }
+        }
+
+        //放行
+        return true;
+    }
+}

+ 1 - 1
service-website/service-website-biz/src/main/java/com/usky/website/service/SiteArticleService.java

@@ -23,7 +23,7 @@ public interface SiteArticleService extends CrudService<SiteArticle> {
      * @param pageSize   每页条数
      * @return
      */
-    CommonPage<SiteArticle> siteArticleList(Integer categoryid, Integer id, String title, String order, Integer pageNum, Integer pageSize);
+    CommonPage<SiteArticle> siteArticleList(Integer categoryid, Integer id, Integer articleid, String title, String order, Integer pageNum, Integer pageSize);
 
     /**
      * 官网-内容的新增

+ 49 - 0
service-website/service-website-biz/src/main/java/com/usky/website/service/config/ExecutorConfig.java

@@ -0,0 +1,49 @@
+package com.usky.website.service.config;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Configuration
+@EnableAsync
+@Slf4j
+public class ExecutorConfig {
+
+    /** 核心线程数(默认线程数) */
+    private int corePoolSize = 10;
+    /** 最大线程数 */
+    private int maxPoolSize = 20;
+    /** 允许线程空闲时间(单位:默认为秒) */
+    private static final int keepAliveTime = 60;
+    /** 缓冲队列大小 */
+    private int queueCapacity = 10;
+
+    @Bean
+    public Executor asyncServiceExecutor(){
+        log.info("start asyncServiceExecutor++++++++++++++++++++++");
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        //配置核心线程数
+        executor.setCorePoolSize(corePoolSize);
+        //配置最大线程数
+        executor.setMaxPoolSize(maxPoolSize);
+        //配置空闲时间
+        executor.setKeepAliveSeconds(keepAliveTime);
+        //配置队列大小
+        executor.setQueueCapacity(queueCapacity);
+        //配置线程前缀名
+        executor.setThreadNamePrefix("async-service-");
+
+        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
+        // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+
+        //执行初始化
+        executor.initialize();
+        return executor;
+    }
+}

+ 25 - 0
service-website/service-website-biz/src/main/java/com/usky/website/service/config/interceptor/WebConfig.java

@@ -0,0 +1,25 @@
+package com.usky.website.service.config.interceptor;
+
+
+import com.usky.website.interceptor.RedisInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+//@Configuration告诉springboot这个类为配置类
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+
+    //从容器中取出RedisInterceptor
+    @Autowired
+    RedisInterceptor redisInterceptor;
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        //注册拦截器
+        registry.addInterceptor(redisInterceptor)
+                .addPathPatterns("/siteArticle/siteArticleList");  //设置拦截路径, “/**”表示对所有请求都进行拦截
+//                .excludePathPatterns("/static");   //设置不拦截的路径,一般可以设置静态资源的访问路径....
+    }
+}

+ 21 - 1
service-website/service-website-biz/src/main/java/com/usky/website/service/impl/SiteArticleServiceImpl.java

@@ -2,6 +2,9 @@ package com.usky.website.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -14,6 +17,7 @@ import com.usky.website.mapper.SiteArticleMapper;
 import com.usky.website.mapper.SiteCategoryMapper;
 import com.usky.website.service.SiteArticleService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
@@ -35,7 +39,7 @@ public class SiteArticleServiceImpl extends AbstractCrudService<SiteArticleMappe
     private SiteCategoryMapper siteCategoryMapper;
 
     @Override
-    public CommonPage<SiteArticle> siteArticleList(Integer categoryid, Integer id, String title, String order, Integer pageNum, Integer pageSize) {
+    public CommonPage<SiteArticle> siteArticleList(Integer categoryid, Integer id, Integer articleid, String title, String order, Integer pageNum, Integer pageSize) {
         IPage<SiteArticle> page = new Page<>(pageNum, pageSize);
         List<Integer> categoryidList = new ArrayList<>();
         if (categoryid != null && categoryid != 0) {
@@ -53,6 +57,10 @@ public class SiteArticleServiceImpl extends AbstractCrudService<SiteArticleMappe
             }
         }
 
+        if(articleid != null){
+            this.updateArticleHits(articleid);
+        }
+
         LambdaQueryWrapper<SiteCategory> queryWrapper1 = Wrappers.lambdaQuery();
         queryWrapper1.eq(SiteCategory::getStatus, 1)
                 .in(CollectionUtil.isNotEmpty(categoryidList), SiteCategory::getId, categoryidList);
@@ -96,4 +104,16 @@ public class SiteArticleServiceImpl extends AbstractCrudService<SiteArticleMappe
     public void delSiteArticle(Integer id) {
         this.removeById(id);
     }
+
+    //异步多线程调用
+    //更新官网_内容管理表中点击量字段值(每调用一次某个内容,就+1次对应表id的点击量字段值)
+    @Async("asyncServiceExecutor")
+    public void updateArticleHits(Integer articleid){
+        UpdateWrapper<SiteArticle> updateWrapper = Wrappers.update();
+        updateWrapper.setSql("hits = hits + 1")
+                .eq("id",articleid);
+
+        this.update(updateWrapper);
+
+    }
 }

+ 1 - 1
service-website/service-website-biz/src/main/java/com/usky/website/service/impl/SiteCategoryServiceImpl.java

@@ -108,7 +108,7 @@ public class SiteCategoryServiceImpl extends AbstractCrudService<SiteCategoryMap
 
     private List<SiteCategory> getChildrenData(SiteCategory root, List<SiteCategory> all) {
         List<SiteCategory> children = all.stream().filter(subjectVO ->
-                subjectVO.getPid().equals(root.getId()) && !root.getCategoryName().equals("客户案例")
+                subjectVO.getPid().equals(root.getId())
         ).map(subjectVO -> {
             subjectVO.setChildren(getChildrenData(subjectVO, all));
             return subjectVO;