Browse Source

作者:张哲
时间:2023/01/10
类型:开发
描述:配置xxl-job

ZizgZh 2 years ago
parent
commit
9c3678c689

+ 4 - 0
.flattened-pom.xml

@@ -165,6 +165,10 @@
       <groupId>com.redxun</groupId>
       <artifactId>jpaas-web-spring-boot-starter</artifactId>
     </dependency>
+    <dependency>
+      <groupId>com.redxun</groupId>
+      <artifactId>jpaas-job-spring-boot-starter</artifactId>
+    </dependency>
     <dependency>
       <groupId>com.alibaba.cloud</groupId>
       <artifactId>spring-cloud-starter-stream-rocketmq</artifactId>

+ 5 - 0
pom.xml

@@ -191,6 +191,11 @@
             <artifactId>jpaas-web-spring-boot-starter</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.redxun</groupId>
+            <artifactId>jpaas-job-spring-boot-starter</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-stream-rocketmq</artifactId>

+ 1 - 1
src/main/java/com/redxun/config/ClientWebsecurityConfigurer.java

@@ -38,7 +38,7 @@ public class ClientWebsecurityConfigurer extends WebSecurityConfigurerAdapter {
         http
                 .authorizeRequests()
                 .antMatchers("/", "/login", "/demo/**","/certificate/**","/api-knowledge/**","/api/api-knowledge/**",
-                        "/actuator/**",
+                        "/executor/**", "/actuator/**",
                         "/restApi/**","/global/**", "/druid/**", "/v2/api-docs/**","/swagger-ui.html").permitAll()
                 .anyRequest().authenticated()
                 .withObjectPostProcessor(urlObjectPostProcessor());

+ 13 - 0
src/main/java/com/redxun/knowledge/common/UserService.java

@@ -122,5 +122,18 @@ public class UserService {
         return userClient.findByUserId(userId);
     }
 
+    /**
+     * 根据用户姓名(工号)查询用户对象
+     *
+     * @param username 用户姓名(工号)
+     * @return
+     */
+    public JPaasUser queryByUsername(String username){
+        if (StringUtils.isEmpty(username)) {
+            return null;
+        }
+        return userClient.findByUsername(username);
+    }
+
 
 }

+ 53 - 0
src/main/java/com/redxun/knowledge/controller/ActionLogController.java

@@ -0,0 +1,53 @@
+package com.redxun.knowledge.controller;
+
+import com.redxun.common.annotation.ClassDefine;
+import com.redxun.common.base.db.BaseService;
+import com.redxun.common.base.entity.JsonResult;
+import com.redxun.knowledge.entity.dao.ActionLog;
+import com.redxun.knowledge.service.ActionLogServiceImpl;
+import com.redxun.web.controller.BaseController;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 文件名: ActionLog
+ * 作者: Zizg
+ * 时间: 2023/1/10
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api-knowledge/knowledge/actionLog")
+@Api(tags = "业务--数量统计表")
+@ClassDefine(title = "业务--数量统计表", alias = "ActionLog", path = "/api-knowledge/knowledge/actionLog", packages = "", packageName = "子系统名称")
+public class ActionLogController extends BaseController<ActionLog> {
+
+    @Autowired
+    private ActionLogServiceImpl actionLogService;
+
+    @Override
+    public BaseService getBaseService() {
+        return actionLogService;
+    }
+
+    @Override
+    public String getComment() {
+        return "业务--数量统计";
+    }
+
+    @GetMapping("/findAll")
+    public JsonResult findAll(){
+        JsonResult successResult = JsonResult.getSuccessResult("");
+        List<ActionLog> actionLogList = actionLogService.findAll(null);
+        return successResult.setData(actionLogList);
+    }
+}

+ 17 - 3
src/main/java/com/redxun/knowledge/controller/KnowledgeController.java

@@ -18,8 +18,10 @@ import com.redxun.web.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -64,17 +66,29 @@ public class KnowledgeController extends BaseController<Knowledge> {
         return jsonResult;
     }
 
+    @ApiOperation(value = "修改知识", httpMethod = "POST")
+    @Override
+    public JsonResult save(@Validated @ApiParam @RequestBody Knowledge entity,BindingResult validResult) {
+        int update = knowledgeService.update(entity);
+        if (update == -1){
+            return JsonResult.Success("知识正在审核中,无法修改");
+        } else {
+            return JsonResult.getSuccessResult("修改知识成功!");
+        }
+    }
+
+
     @ApiOperation(value = "知识详情", httpMethod = "GET")
     @GetMapping("info")
     public JsonResult info(@RequestParam(value = "pkId") String pkId,
                            @RequestParam(value = "isPc",required = false) Integer flag) {
         KnowledgeVo knowledgeVo = knowledgeService.info(pkId, flag);
         JsonResult jsonResult;
+        jsonResult = JsonResult.getSuccessResult("");
         if (knowledgeVo == null){
-            jsonResult = JsonResult.getFailResult("您查看的知识不存在或您没有权限查看该知识");
-            jsonResult.setData(null);
+            // 知识不存在或者没有权限
+            jsonResult.setData(1);
         } else {
-            jsonResult = JsonResult.getSuccessResult("");
             jsonResult.setData(knowledgeVo);
         }
         return jsonResult;

+ 67 - 0
src/main/java/com/redxun/knowledge/entity/dao/ActionLog.java

@@ -0,0 +1,67 @@
+package com.redxun.knowledge.entity.dao;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.redxun.common.base.entity.BaseExtEntity;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+/**
+ * 文件名: ActionLog
+ * 作者: Zizg
+ * 时间: 2023/1/10
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Setter
+@Getter
+@Accessors(chain = true)
+@TableName(value = "KM_ACTION_LOG")
+public class ActionLog extends BaseExtEntity<String>{
+    @JsonCreator
+    public ActionLog() {
+    }
+
+    //主键
+    @TableId(value = "PK_ID",type = IdType.ASSIGN_ID)
+    private String pkId;
+
+    // 类型 (1 知识 2 专辑)
+    @TableField(value = "TYPE")
+    private Integer type;
+
+    // 知识Id
+    @TableField(value = "KNOWLEDGE_ID")
+    private String knowledgeId;
+
+    // 用户Id
+    @TableField(value = "USER_ID")
+    private String userId;
+
+    // 执行器执行次数
+    @TableField(value = "EXECUTIONS")
+    private Integer executions;
+
+    //删除标记
+    @TableField(value = "IS_DEL")
+    @TableLogic
+    private Integer isDel;
+
+    @Override
+    public String getPkId() {
+        return pkId;
+    }
+
+    @Override
+    public void setPkId(String pkId) {
+        this.pkId=pkId;
+    }
+
+
+    /**
+     生成子表属性的Array List
+     */
+}

+ 22 - 0
src/main/java/com/redxun/knowledge/entity/vo/ActionLogVo.java

@@ -0,0 +1,22 @@
+package com.redxun.knowledge.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 文件名: ActionLogVo
+ * 作者: Zizg
+ * 时间: 2023/1/10
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Data
+public class ActionLogVo implements Serializable {
+
+    private String knowledgeId;
+
+    private Integer sum;
+}

+ 29 - 0
src/main/java/com/redxun/knowledge/mapper/ActionLogMapper.java

@@ -0,0 +1,29 @@
+package com.redxun.knowledge.mapper;
+
+import com.redxun.common.base.db.BaseDao;
+import com.redxun.knowledge.entity.dao.ActionLog;
+import com.redxun.knowledge.entity.vo.ActionLogVo;
+import org.apache.ibatis.annotations.MapKey;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 文件名: ActionLogMapper
+ * 作者: Zizg
+ * 时间: 2023/1/10
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Mapper
+public interface ActionLogMapper extends BaseDao<ActionLog> {
+
+    // 查询浏览量
+    List<ActionLogVo> countViews(Integer type);
+
+    // 清除浏览量
+    void deleteCountViews(Integer type);
+}

+ 70 - 0
src/main/java/com/redxun/knowledge/service/ActionLogServiceImpl.java

@@ -0,0 +1,70 @@
+package com.redxun.knowledge.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.redxun.common.base.db.BaseDao;
+import com.redxun.common.base.db.BaseService;
+import com.redxun.common.service.impl.SuperServiceImpl;
+import com.redxun.knowledge.entity.dao.ActionLog;
+import com.redxun.knowledge.entity.dao.Knowledge;
+import com.redxun.knowledge.entity.vo.ActionLogVo;
+import com.redxun.knowledge.mapper.ActionLogMapper;
+import com.redxun.knowledge.mapper.KnowledgeMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 文件名: ActionLogServiceImpl
+ * 作者: Zizg
+ * 时间: 2023/1/10
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Service
+@Slf4j
+public class ActionLogServiceImpl extends SuperServiceImpl<ActionLogMapper, ActionLog> implements BaseService<ActionLog> {
+
+    @Autowired
+    private ActionLogMapper actionLogMapper;
+
+    @Autowired
+    private KnowledgeMapper knowledgeMapper;
+
+    @Override
+    public BaseDao<ActionLog> getRepository() {
+        return actionLogMapper;
+    }
+
+    /**
+     * 定时执行方法(每天0时统计知识浏览量)
+     * @return
+     */
+    public boolean countViews() {
+        List<ActionLogVo> actionLogVoList = actionLogMapper.countViews(1);
+        actionLogVoList.forEach(actionLogVo -> {
+            Knowledge knowledge = knowledgeMapper.selectById(actionLogVo.getKnowledgeId());
+            // 知识没有被删除且知识状态为5
+            if (knowledge != null && knowledge.getApprovalStatus() == 5){
+                knowledge.setPkId(actionLogVo.getKnowledgeId());
+                // 在原有点击量上增加
+                Integer views = knowledge.getViews();
+                knowledge.setViews(views + actionLogVo.getSum());
+                knowledgeMapper.updateById(knowledge);
+            }
+        });
+        return true;
+    }
+
+    /**
+     * 定时执行方法(统计知识浏览量后清除记录)
+     * @return
+     */
+    public void deleteCountViews() {
+        actionLogMapper.deleteCountViews(1);
+    }
+}

+ 37 - 33
src/main/java/com/redxun/knowledge/service/KnowledgeApproveServiceImpl.java

@@ -9,6 +9,7 @@ import com.redxun.common.base.db.BaseDao;
 import com.redxun.common.base.db.BaseService;
 import com.redxun.common.base.db.PageHelper;
 import com.redxun.common.base.search.QueryFilter;
+import com.redxun.common.model.JPaasUser;
 import com.redxun.common.service.impl.SuperServiceImpl;
 import com.redxun.dto.user.OsUserDto;
 import com.redxun.knowledge.common.MessageService;
@@ -108,10 +109,6 @@ public class KnowledgeApproveServiceImpl extends SuperServiceImpl<KnowledgeAppro
                     }
                     // 把该记录加到结果集中
                     knowledgeApprovalListVoList.add(value.get(i));
-                    // 如果节点为终审节点,审核状态为3(待最终审核)
-                    //if (value.get(i).getIsFinal() == 1 && value.get(i).getApprovalStatus() != 5){
-                    //    knowledgeMapper.updateApprovalStatus(value.get(i).getKnowledgerId(),3);
-                    //}
                     break;
                 }
             }
@@ -137,11 +134,6 @@ public class KnowledgeApproveServiceImpl extends SuperServiceImpl<KnowledgeAppro
         });
         // 重新组装分页数据
         Page pages = PageListUtils.getPages(filter.getPage().getCurrent(), filter.getPage().getSize(), collect);
-        //IPage pages = new Page();
-        //pages.setCurrent(3);
-        //pages.setSize(10);
-        //pages.setRecords(collect);
-        //pages.setTotal(collect.size());
         return pages;
     }
 
@@ -165,8 +157,9 @@ public class KnowledgeApproveServiceImpl extends SuperServiceImpl<KnowledgeAppro
             knowledge.setApprovalStatus(2);
             knowledgeMapper.updateById(knowledge);
             //给知识创建人发送站内信和企业微信消息
-            String createBy = knowledgeMapper.selectById(knowledgeApprove.getKnowledgerId()).getCreateBy();
-            sendMessage(createBy,entity.getRemark(),false);
+            Knowledge knowledgeEnd = knowledgeMapper.selectById(knowledgeApprove.getKnowledgerId());
+            String createBy = knowledgeEnd.getCreateBy();
+            sendMessage(createBy,knowledgeEnd.getTitles(),false);
         }
         // 如果审核节点是终审节点且知识未通过,修改知识状态为最终驳回 4
         if (knowledgeApprove.getIsFinal() == 1 && entity.getResult() == 0){
@@ -175,8 +168,9 @@ public class KnowledgeApproveServiceImpl extends SuperServiceImpl<KnowledgeAppro
             knowledge.setApprovalStatus(4);
             knowledgeMapper.updateById(knowledge);
             //给知识创建人发送站内信和企业微信消息
-            String createBy = knowledgeMapper.selectById(knowledgeApprove.getKnowledgerId()).getCreateBy();
-            sendMessage(createBy,entity.getRemark(),false);
+            Knowledge knowledgeEnd = knowledgeMapper.selectById(knowledgeApprove.getKnowledgerId());
+            String createBy = knowledgeEnd.getCreateBy();
+            sendMessage(createBy,knowledgeEnd.getTitles(),false);
         }
         // 如果审核节点是终审节点且知识通过,修改知识状态为最终通过 5
         if (knowledgeApprove.getIsFinal() == 1 && entity.getResult() == 1){
@@ -185,8 +179,9 @@ public class KnowledgeApproveServiceImpl extends SuperServiceImpl<KnowledgeAppro
             knowledge.setApprovalStatus(5);
             knowledgeMapper.updateById(knowledge);
             //给知识创建人发送站内信和企业微信消息
-            String createBy = knowledgeMapper.selectById(knowledgeApprove.getKnowledgerId()).getCreateBy();
-            sendMessage(createBy,entity.getRemark(),true);
+            Knowledge knowledgeEnd = knowledgeMapper.selectById(knowledgeApprove.getKnowledgerId());
+            String createBy = knowledgeEnd.getCreateBy();
+            sendMessage(createBy,knowledgeEnd.getTitles(),true);
             //把该知识附件信息传入搜索平台
             Knowledge knowledges = knowledgeMapper.selectById(knowledgeApprove.getKnowledgerId());
             // 获取知识上传人头像
@@ -234,9 +229,14 @@ public class KnowledgeApproveServiceImpl extends SuperServiceImpl<KnowledgeAppro
             knowledgeMapper.updateById(knowledge);
         }
         // 如果审核通过了,发送短信通知下一个人审核
-        //if (knowledgeApproveNext != null && entity.getResult() == 1){
-        //    sendMessage(knowledgeApproveNext.getApproverId(),entity.getRemark());
-        //}
+        if (knowledgeApproveNext != null && entity.getResult() == 1){
+            // 根据工号查询用户id
+            String approverId = knowledgeApproveNext.getApproverId();
+            JPaasUser jPaasUser = userService.queryByUsername(approverId);
+            if (jPaasUser != null){
+                sendMessage(jPaasUser.getUserId());
+            }
+        }
 
         // 修改该知识的组织架构信息
         Knowledge knowledge = knowledgeMapper.selectById(knowledgeApprove.getKnowledgerId());
@@ -250,30 +250,34 @@ public class KnowledgeApproveServiceImpl extends SuperServiceImpl<KnowledgeAppro
      * 给知识创建人发送站内信和企业微信消息(知识被驳回时,或者最终节点审核通过时)(flag为true,知识通过;为false,知识不通过)
      * @param createBy,remark,flag
      */
-    private void sendMessage(String createBy,String remark,Boolean flag){
+    private void sendMessage(String createBy,String titles,Boolean flag){
         List<OsUserDto> osUserDtoList = new ArrayList<>();
         //查询用户信息
         OsUserDto osUserDto = userService.queryOsUserDto(createBy);
         osUserDtoList.add(osUserDto);
         // 知识通过
         if (flag){
-            if (remark != null){
-                messageService.sendWechatMsg("[关于知识审核通过通知]",remark,osUserDtoList);
-                messageService.sendInnerMsg("[关于知识审核通过通知]",remark,osUserDtoList);
-            } else {
-                messageService.sendWechatMsg("[关于知识审核通过通知]","您上传的知识通过了审核",osUserDtoList);
-                messageService.sendInnerMsg("[关于知识审核通过通知]","您上传的知识通过了审核",osUserDtoList);
-            }
+            messageService.sendWechatMsg("您的提交的申请已经通过审批!","提交内容:" + titles + "审批时间:" + new Date(),osUserDtoList);
+            messageService.sendInnerMsg("您的提交的申请已经通过审批!","提交内容:" + titles + "审批时间:" + new Date(),osUserDtoList);
         } else {
             // 知识不通过
-            if (remark != null){
-                messageService.sendWechatMsg("[关于知识审核不通过通知]",remark,osUserDtoList);
-                messageService.sendInnerMsg("[关于知识审核不通过通知]",remark,osUserDtoList);
-            } else {
-                messageService.sendWechatMsg("[关于知识审核不通过通知]","您上传的知识未通过,请联系审核人询问原因",osUserDtoList);
-                messageService.sendInnerMsg("[关于知识审核不通过通知]","知识未通过,请联系审核人询问原因",osUserDtoList);
-            }
+            messageService.sendWechatMsg("您的提交的申请已被驳回!","提交内容:" + titles + "审批时间:" + new Date(),osUserDtoList);
+            messageService.sendInnerMsg("您的提交的申请已被驳回!","提交内容:" + titles + "审批时间:" + new Date(),osUserDtoList);
+
         }
+    }
 
+    /**
+     * 给下一节点审核人发消息(不包含部门)
+     * @param createBy,remark
+     */
+    private void sendMessage(String createBy){
+        List<OsUserDto> osUserDtoList = new ArrayList<>();
+        //查询用户信息
+        OsUserDto osUserDto = userService.queryOsUserDto(createBy);
+        osUserDtoList.add(osUserDto);
+        // 发消息通过前来审核
+        messageService.sendWechatMsg("您有一条待审核任务,请尽快完成审核!","",osUserDtoList);
+        messageService.sendInnerMsg("您有一条待审核任务,请尽快完成审核!","",osUserDtoList);
     }
 }

+ 34 - 14
src/main/java/com/redxun/knowledge/service/KnowledgeServiceImpl.java

@@ -33,6 +33,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.util.*;
@@ -71,6 +72,9 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
     @Autowired
     private SearchService searchService;
 
+    @Autowired
+    private ActionLogMapper actionLogMapper;
+
 
     @Override
     public BaseDao<Knowledge> getRepository() {
@@ -234,7 +238,7 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
             String deptId = osUserDto.getDeptId();
             // 如果知识最终审核通过,判断组织架构/职系/职等是否符合(前台判断)
             if (knowledge.getOrganizationId() == null){
-                knowledgeMapper.updateViewsById(pkId);
+                addCountViews(osUserDto.getUserId(),pkId);
                 knowledgeVo.setIsOrganizationId(0);
             } else {
                 // 如果职系,职等,组织架构id全部为空
@@ -242,7 +246,7 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
                         organizationIdMap.get("gradeLevelId") == null){
                     // 符合条件,增加点击量
                     knowledgeVo.setIsOrganizationId(0);
-                    knowledgeMapper.updateViewsById(pkId);
+                    addCountViews(osUserDto.getUserId(),pkId);
                     return knowledgeVo;
                 }
                 // 如果职系,职等为空,组织架构id不为空
@@ -252,7 +256,7 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
                     if (deptId.equals(organizationIdMap.get("organizationId"))){
                         // 符合条件,增加点击量
                         knowledgeVo.setIsOrganizationId(0);
-                        knowledgeMapper.updateViewsById(pkId);
+                        addCountViews(osUserDto.getUserId(),pkId);
                         return knowledgeVo;
                     } else {
                         // 没有权限(不增加点击量)
@@ -268,7 +272,7 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
                     if (sequenceCode.equals(organizationIdMap.get("gradeId"))){
                         // 符合条件,增加点击量
                         knowledgeVo.setIsOrganizationId(0);
-                        knowledgeMapper.updateViewsById(pkId);
+                        addCountViews(osUserDto.getUserId(),pkId);
                         return knowledgeVo;
                     } else {
                         // 没有权限(不增加点击量)
@@ -284,7 +288,7 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
                     if (slyGrade.equals(organizationIdMap.get("gradeLevelId"))){
                         // 符合条件,增加点击量
                         knowledgeVo.setIsOrganizationId(0);
-                        knowledgeMapper.updateViewsById(pkId);
+                        addCountViews(osUserDto.getUserId(),pkId);
                         return knowledgeVo;
                     } else {
                         // 没有权限(不增加点击量)
@@ -299,7 +303,7 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
                     if (deptId.equals(organizationIdMap.get("organizationId")) && sequenceCode.equals(organizationIdMap.get("gradeId"))){
                         // 符合条件,增加点击量
                         knowledgeVo.setIsOrganizationId(0);
-                        knowledgeMapper.updateViewsById(pkId);
+                        addCountViews(osUserDto.getUserId(),pkId);
                         return knowledgeVo;
                     } else {
                         // 没有权限(不增加点击量)
@@ -314,7 +318,7 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
                     if (deptId.equals(organizationIdMap.get("organizationId")) && slyGrade.equals(organizationIdMap.get("gradeLevelId"))){
                         // 符合条件,增加点击量
                         knowledgeVo.setIsOrganizationId(0);
-                        knowledgeMapper.updateViewsById(pkId);
+                        addCountViews(osUserDto.getUserId(),pkId);
                         return knowledgeVo;
                     } else {
                         // 没有权限(不增加点击量)
@@ -329,7 +333,7 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
                     if (sequenceCode.equals(organizationIdMap.get("gradeId")) && slyGrade.equals(organizationIdMap.get("gradeLevelId"))){
                         // 符合条件,增加点击量
                         knowledgeVo.setIsOrganizationId(0);
-                        knowledgeMapper.updateViewsById(pkId);
+                        addCountViews(osUserDto.getUserId(),pkId);
                         return knowledgeVo;
                     } else {
                         // 没有权限(不增加点击量)
@@ -346,7 +350,7 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
                             slyGrade.equals(organizationIdMap.get("gradeLevelId"))){
                         knowledgeVo.setIsOrganizationId(0);
                         // 符合条件,增加点击量
-                        knowledgeMapper.updateViewsById(pkId);
+                        addCountViews(osUserDto.getUserId(),pkId);
                         return knowledgeVo;
                     } else {
                         // 没有权限(不增加点击量)
@@ -390,10 +394,6 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
         if (count > 0){
             return false;
         }
-        //Knowledge knowledge = knowledgeMapper.selectById(knowledgeId);
-        //if (knowledge.getApprovalStatus() == 5){
-        //    throw new RuntimeException("知识已通过,删除失败");
-        //}
         // 把知识审批表中对应数据删除掉
         knowledgeApproveMapper.deleteByKnowledgeId(knowledgeId);
         knowledgeMapper.deleteKnowledge(knowledgeId);
@@ -416,7 +416,7 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
         Knowledge knowledge = this.get(entity.getPkId());
         // 知识为待节点审核状态和待最终审核状态,修改失败;知识为最终审核通过,修改失败
         if (knowledge.getApprovalStatus() == 3 || knowledge.getApprovalStatus() == 1){
-            throw new RuntimeException("知识正在审核中,无法修改");
+            return -1;
         } else {
             //知识被驳回了,重新修改进行审核(批次加1)
             entity.setApprovalStatus(1);
@@ -607,4 +607,24 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
         wrapper.eq(Knowledge::getApprovalStatus,5).eq(Knowledge::getCreateBy,loginUser);
         return knowledgeMapper.selectCount(wrapper);
     }
+
+
+    /**
+     * 向统计表中增加数据(相同数据不增加)
+     * @param userId 用户Id
+     * @param knowledgeId 知识Id
+     */
+    private void addCountViews(String userId,String knowledgeId){
+        QueryWrapper<ActionLog> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("USER_ID",userId);
+        queryWrapper.eq("KNOWLEDGE_ID",knowledgeId);
+        List<ActionLog> actionLogList = actionLogMapper.selectList(queryWrapper);
+        if (CollectionUtils.isEmpty(actionLogList)){
+            ActionLog actionLog = new ActionLog();
+            actionLog.setType(1);
+            actionLog.setKnowledgeId(knowledgeId);
+            actionLog.setUserId(userId);
+            actionLogMapper.insert(actionLog);
+        }
+    }
 }

+ 34 - 0
src/main/java/com/redxun/knowledge/task/CountViewsJobHandler.java

@@ -0,0 +1,34 @@
+package com.redxun.knowledge.task;
+
+import com.redxun.knowledge.service.ActionLogServiceImpl;
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.IJobHandler;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+@Component
+@Slf4j
+public class CountViewsJobHandler extends IJobHandler {
+
+    @Autowired
+    private ActionLogServiceImpl actionLogService;
+
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    @XxlJob("countViewsHandler")
+    public void execute() throws Exception {
+        // 统计知识点击量
+        boolean result = actionLogService.countViews();
+        if (result){
+            log.info("执行成功!");
+            actionLogService.deleteCountViews();
+        } else {
+            log.error("执行失败!");
+        }
+    }
+}

+ 14 - 1
src/main/resources/application.yml

@@ -136,4 +136,17 @@ spring:
 QYWechat:
   agent-id: 1000324
   corp-secret: xsfzBu_dAvw7K9tToeYjyqglCYjYPuXxU6lHafi8X9w
-  corp-id: ww0b35c2dc37ba3326
+  corp-id: ww0b35c2dc37ba3326
+
+xxl-job:
+  enabled: ${job.knowledge}
+  mode: nacos
+  admin:
+    admin-addresses: ${job.center}
+  executor:
+    app-name: knowledge-job #默认为 xxl-job-executor
+    address: ${spring.application.name}
+    access-token: #默认为空
+    log-path: logs/applogs/xxl-job/jobhandler #默认为 logs/applogs/xxl-job/jobhandler
+    log-retention-days: 10 #默认为 10
+    ip: #默认为空

+ 21 - 0
src/main/resources/mapper/knowledge/ActionLogMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.redxun.knowledge.mapper.ActionLogMapper">
+
+    <select id="countViews" resultType="com.redxun.knowledge.entity.vo.ActionLogVo">
+        select KNOWLEDGE_ID as knowledgeId,count(*) as sum from KM_ACTION_LOG
+        where TYPE = #{type}
+        group by KNOWLEDGE_ID
+    </select>
+
+    <delete id="deleteCountViews">
+        update KM_ACTION_LOG
+        set IS_DEL = 1
+        WHERE TYPE = #{type}
+    </delete>
+
+
+
+</mapper>
+
+

+ 2 - 1
src/main/resources/mapper/knowledge/KnowledgeMapper.xml

@@ -59,7 +59,8 @@
     <where>
         <if test="@rx.Ognl@isNotEmpty(params.keyword)">
             (TITLES LIKE '%' || #{params.keyword} || '%' OR
-            TYPE LIKE '%' || #{params.keyword} || '%')
+            TYPE LIKE '%' || #{params.keyword} || '%' OR
+            SUMMARY LIKE '%' || #{params.keyword} || '%')
         </if>
         <if test="@rx.Ognl@isNotEmpty(params.titles)">
             and TITLES LIKE '%' || #{params.titles} || '%'