Răsfoiți Sursa

作者:张哲
时间:2022/12/9
类型:开发
描述:发送通知功能

ZizgZh 2 ani în urmă
părinte
comite
fb9f60b0bb

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

@@ -4,6 +4,7 @@ import com.redxun.common.model.JPaasUser;
 import com.redxun.common.tool.StringUtils;
 import com.redxun.common.utils.ExceptionUtil;
 import com.redxun.common.utils.SysUserUtil;
+import com.redxun.dto.user.OsUserDto;
 import com.redxun.feign.org.UserClient;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -70,4 +71,17 @@ public class UserService {
         }
         return userClient.getUserById(userId);
     }
+
+    /**
+     * 根据用户ID查询用户对象
+     *
+     * @param userId 用户ID
+     * @return
+     */
+    public OsUserDto queryOsUserDto(String userId) {
+        if (StringUtils.isEmpty(userId)) {
+            return null;
+        }
+        return userClient.findByUserId(userId);
+    }
 }

+ 25 - 0
src/main/java/com/redxun/knowledge/controller/KnowledgeApprovalNodeController.java

@@ -1,16 +1,23 @@
 
 package com.redxun.knowledge.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.redxun.common.annotation.ClassDefine;
 import com.redxun.common.base.db.BaseService;
 
+import com.redxun.common.base.entity.JsonPageResult;
 import com.redxun.common.base.entity.JsonResult;
+import com.redxun.common.base.entity.QueryData;
+import com.redxun.common.base.search.QueryFilter;
+import com.redxun.common.base.search.QueryFilterBuilder;
+import com.redxun.common.utils.ExceptionUtil;
 import com.redxun.knowledge.entity.dao.KnowledgeApprovalNode;
 import com.redxun.knowledge.entity.dto.KnowledgeApprovalNodeDto;
 import com.redxun.knowledge.entity.vo.KnowledgeApprovalVo;
 import com.redxun.knowledge.service.KnowledgeApprovalNodeServiceImpl;
 import com.redxun.web.controller.BaseController;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
@@ -62,5 +69,23 @@ public class KnowledgeApprovalNodeController extends BaseController<KnowledgeApp
         jsonResult.setData(knowledgeApprovalNodeList);
         return jsonResult;
     }
+
+    @ApiOperation(value = "分页查询审核流程节点")
+    @ApiImplicitParam(name = "queryData", value = "查询条件")
+    @PostMapping("findAllApprovalNodes")
+    public JsonPageResult findAllApprovalNodes(@RequestBody QueryData queryData) {
+        JsonPageResult jsonResult = JsonPageResult.getSuccess("返回数据成功!");
+        try {
+            QueryFilter filter = QueryFilterBuilder.createQueryFilter(queryData);
+            IPage page = knowledgeApprovalNodeService.findAllApprovalNodes(filter);
+            this.handlePage(page);
+            jsonResult.setPageData(page);
+        } catch (Exception e) {
+            jsonResult.setSuccess(false);
+            this.logger.error(ExceptionUtil.getExceptionMessage(e));
+            jsonResult.setMessage(ExceptionUtil.getExceptionMessage(e));
+        }
+        return jsonResult;
+    }
 }
 

+ 19 - 0
src/main/java/com/redxun/knowledge/controller/KnowledgeApproveController.java

@@ -26,6 +26,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
 
 @Slf4j
 @RestController
@@ -76,6 +78,23 @@ public class KnowledgeApproveController extends BaseController<KnowledgeApprove>
         return JsonResult.Success("审核成功");
     }
 
+    @ApiOperation(value = "批量审核")
+    @PostMapping("knowledgeApproveBatchById")
+    public JsonResult knowledgeApproveBatchById(@RequestBody KnowledgeApproveDto knowledgeApproveDto){
+        List<KnowledgeApprove> knowledgeApproveList = knowledgeApproveDto.getPkIds().stream().map(e -> {
+            KnowledgeApprove knowledgeApprove = new KnowledgeApprove();
+            knowledgeApprove.setPkId(e);
+            knowledgeApprove.setResult(knowledgeApproveDto.getResult());
+            knowledgeApprove.setActualApprover(knowledgeApproveDto.getActualApprover());
+            knowledgeApprove.setActualApproverName(knowledgeApproveDto.getActualApproverName());
+            knowledgeApprove.setRemark(knowledgeApproveDto.getRemark());
+            knowledgeApprove.setApprovalTime(new Date());
+            return knowledgeApprove;
+        }).collect(Collectors.toList());
+        knowledgeApproveList.forEach(e -> knowledgeApproveService.update(e));
+        return JsonResult.Success("批量审核成功");
+    }
+
 
 
 }

+ 5 - 2
src/main/java/com/redxun/knowledge/entity/dto/KnowledgeApproveDto.java

@@ -10,6 +10,7 @@ import lombok.Setter;
 import lombok.experimental.Accessors;
 
 import javax.validation.constraints.NotBlank;
+import java.util.List;
 
 /**
  * 文件名: KnowledgeApproveDto
@@ -24,9 +25,10 @@ import javax.validation.constraints.NotBlank;
 @Getter
 public class KnowledgeApproveDto {
 
-    //主键
-    // @NotBlank(message = "审核记录Id不能为空")
+    //主键(单个审核记录)
     private String pkId;
+    //主键(多个审核记录)
+    private List<String> pkIds;
     //审批结论;0-不通过 1-通过
     private Integer result;
     //实际审批人ID;可以是人员ID或者部门下内部人员ID
@@ -35,4 +37,5 @@ public class KnowledgeApproveDto {
     private String actualApproverName;
     //审批意见
     private String remark;
+
 }

+ 6 - 0
src/main/java/com/redxun/knowledge/mapper/KnowledgeApprovalNodeMapper.java

@@ -1,11 +1,15 @@
 package com.redxun.knowledge.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.redxun.knowledge.entity.dao.Banner;
 import com.redxun.knowledge.entity.dao.KnowledgeApprovalNode;
 import com.redxun.knowledge.entity.vo.KnowledgeApprovalVo;
 import org.apache.ibatis.annotations.Mapper;
 import com.redxun.common.base.db.BaseDao;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 业务--知识审批节点表数据库访问层
@@ -14,4 +18,6 @@ import java.util.List;
 public interface KnowledgeApprovalNodeMapper extends BaseDao<KnowledgeApprovalNode> {
 
     List<KnowledgeApprovalVo> queryApprovalNodes();
+
+    IPage findAllApprovalNodes(IPage<Banner> page, @Param("params") Map<String, Object> params, @Param("w") Map<String, Object> order);
 }

+ 18 - 3
src/main/java/com/redxun/knowledge/service/KnowledgeApprovalNodeServiceImpl.java

@@ -2,21 +2,25 @@
 package com.redxun.knowledge.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 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.tool.BeanUtil;
 import com.redxun.common.tool.IdGenerator;
 import com.redxun.common.service.impl.SuperServiceImpl;
+import com.redxun.knowledge.entity.dao.Knowledge;
 import com.redxun.knowledge.entity.dao.KnowledgeApprovalNode;
+import com.redxun.knowledge.entity.vo.BannerAdminVo;
 import com.redxun.knowledge.entity.vo.KnowledgeApprovalVo;
 import com.redxun.knowledge.mapper.KnowledgeApprovalNodeMapper;
 import com.redxun.knowledge.entity.dao.KnowledgeApprovalNode;
 import com.redxun.knowledge.mapper.KnowledgeApprovalNodeMapper;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
+import java.util.*;
 import javax.annotation.Resource;
 
 /**
@@ -46,4 +50,15 @@ public class KnowledgeApprovalNodeServiceImpl extends SuperServiceImpl<Knowledge
     public int insert(KnowledgeApprovalNode entity) {
         return 0;
     }
+
+    /**
+     * 分页查询审核流程节点
+     * @param filter
+     * @return
+     */
+    public IPage findAllApprovalNodes(QueryFilter filter) {
+        Map<String, Object> params = PageHelper.constructParams(filter);
+        IPage page = knowledgeApprovalNodeMapper.findAllApprovalNodes(filter.getPage(), filter.getParams(), params);
+        return page;
+    }
 }

+ 46 - 2
src/main/java/com/redxun/knowledge/service/KnowledgeApproveServiceImpl.java

@@ -6,15 +6,21 @@ 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;
+import com.redxun.knowledge.common.UserService;
 import com.redxun.knowledge.entity.dao.Knowledge;
 import com.redxun.knowledge.entity.dao.KnowledgeApprove;
 import com.redxun.knowledge.entity.vo.KnowledgeApprovalListVo;
 import com.redxun.knowledge.entity.vo.KnowledgeCategoryAdminVo;
 import com.redxun.knowledge.mapper.KnowledgeApproveMapper;
 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 javax.annotation.Resource;
 import java.util.*;
@@ -24,6 +30,7 @@ import java.util.stream.Collectors;
 * [业务--知识审批表]业务服务类
 */
 @Service
+@Slf4j
 public class KnowledgeApproveServiceImpl extends SuperServiceImpl<KnowledgeApproveMapper, KnowledgeApprove> implements BaseService<KnowledgeApprove> {
 
     @Resource
@@ -35,6 +42,12 @@ public class KnowledgeApproveServiceImpl extends SuperServiceImpl<KnowledgeAppro
     @Autowired
     private KnowledgeMapper knowledgeMapper;
 
+    @Autowired
+    private MessageService messageService;
+
+    @Autowired
+    private UserService userService;
+
     @Override
     public BaseDao<KnowledgeApprove> getRepository() {
         return knowledgeApproveMapper;
@@ -47,9 +60,8 @@ public class KnowledgeApproveServiceImpl extends SuperServiceImpl<KnowledgeAppro
      */
     public IPage findAllKnowledgeApprove(QueryFilter filter) {
         Map<String, Object> params = PageHelper.constructParams(filter);
+        //查询出全部记录
         List<KnowledgeApprovalListVo> allKnowledgeApprove = knowledgeApproveMapper.findAllKnowledgeApprove(filter.getParams(), params);
-        // 查询出全部记录
-        // List<KnowledgeApprovalListVo> knowledgeApprovalListVos = page.getRecords();
         // 根据知识Id进行数据分组
         Map<String, List<KnowledgeApprovalListVo>> result =
                 allKnowledgeApprove.stream().collect(Collectors.groupingBy(KnowledgeApprovalListVo::getKnowledgerId));
@@ -102,6 +114,7 @@ public class KnowledgeApproveServiceImpl extends SuperServiceImpl<KnowledgeAppro
      * @param entity
      * @return
      */
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public int update(KnowledgeApprove entity) {
         KnowledgeApprove knowledgeApprove = knowledgeApproveMapper.selectById(entity.getPkId());
@@ -111,6 +124,9 @@ public class KnowledgeApproveServiceImpl extends SuperServiceImpl<KnowledgeAppro
             knowledge.setPkId(knowledgeApprove.getKnowledgerId());
             knowledge.setApprovalStatus(2);
             knowledgeMapper.updateById(knowledge);
+            //给知识创建人发送站内信和企业微信消息
+            String createBy = knowledgeMapper.selectById(knowledgeApprove.getKnowledgerId()).getCreateBy();
+            sendMessage(createBy,entity.getRemark());
         }
         // 如果审核节点是终审节点且知识未通过,修改知识状态为最终驳回 4
         if (knowledgeApprove.getIsFinal() == 1 && entity.getResult() == 0){
@@ -118,6 +134,9 @@ public class KnowledgeApproveServiceImpl extends SuperServiceImpl<KnowledgeAppro
             knowledge.setPkId(knowledgeApprove.getKnowledgerId());
             knowledge.setApprovalStatus(4);
             knowledgeMapper.updateById(knowledge);
+            //给知识创建人发送站内信和企业微信消息
+            String createBy = knowledgeMapper.selectById(knowledgeApprove.getKnowledgerId()).getCreateBy();
+            sendMessage(createBy,entity.getRemark());
         }
         // 如果审核节点是终审节点且知识通过,修改知识状态为最终通过 5
         if (knowledgeApprove.getIsFinal() == 1 && entity.getResult() == 1){
@@ -125,7 +144,32 @@ public class KnowledgeApproveServiceImpl extends SuperServiceImpl<KnowledgeAppro
             knowledge.setPkId(knowledgeApprove.getKnowledgerId());
             knowledge.setApprovalStatus(5);
             knowledgeMapper.updateById(knowledge);
+            //给知识创建人发送站内信和企业微信消息
+            String createBy = knowledgeMapper.selectById(knowledgeApprove.getKnowledgerId()).getCreateBy();
+            sendMessage(createBy,entity.getRemark());
+        }
+        // 如果审核通过了,发送短信通知下一个人审核
+        if (knowledgeApprove.getResult() == 1 && knowledgeApprove.getIsFinal() != 1){
+            // TODO: 2022/12/9
         }
         return this.getRepository().updateById(entity);
     }
+
+    /**
+     * 给知识创建人发送站内信和企业微信消息(知识被驳回时,或者最终节点审核通过时)
+     * @param createBy,remark
+     */
+    private void sendMessage(String createBy,String remark){
+        List<OsUserDto> osUserDtoList = new ArrayList<>();
+        //查询用户信息
+        OsUserDto osUserDto = userService.queryOsUserDto(createBy);
+        osUserDtoList.add(osUserDto);
+        if (remark != null){
+            messageService.sendWechatMsg("[关于知识审核不通过通知]",remark,osUserDtoList);
+            messageService.sendInnerMsg("[关于知识审核不通过通知]",remark,osUserDtoList);
+        } else {
+            messageService.sendWechatMsg("[关于知识审核不通过通知]","知识未通过",osUserDtoList);
+            messageService.sendInnerMsg("[关于知识审核不通过通知]","知识未通过",osUserDtoList);
+        }
+    }
 }

+ 8 - 3
src/main/java/com/redxun/knowledge/service/KnowledgeServiceImpl.java

@@ -223,11 +223,16 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
     @Override
     public int update(Knowledge entity) {
         Knowledge knowledge = this.get(entity.getPkId());
-        if (knowledge.getApprovalStatus() == 3){
+        // 知识为待节点审核状态和待最终审核状态,修改失败;知识为最终审核通过,修改失败
+        if (knowledge.getApprovalStatus() == 3 || knowledge.getApprovalStatus() == 1){
             throw new RuntimeException("当前知识正在审核中,无法修改");
+        } else if (knowledge.getApprovalStatus() == 5){
+            throw new RuntimeException("当前知识已通过最终审核,无法修改");
+        } else {
+            //知识被驳回了,重新修改进行审核(批次加1)
+            entity.setApprovalStatus(1);
+            entity.setApprovalBatch(knowledge.getApprovalBatch() + 1);
         }
-        entity.setApprovalStatus(1);
-        // TODO: 2022/12/2  把审核表中批次加1
         return this.getRepository().updateById(entity);
     }
 

+ 21 - 1
src/main/resources/mapper/knowledge/KnowledgeApprovalNodeMapper.xml

@@ -18,10 +18,16 @@
         <result property="updateTime" column="UPDATE_TIME_" jdbcType="DATE"/>
     </resultMap>
 
+    <sql id="COLUMNS">
+        PK_ID,NAME,APPROVER_ID,APPROVER_NAME,IS_FINAL,IS_DEL,COMPANY_ID_,
+        CREATE_DEP_ID_,TENANT_ID_,CREATE_BY_,CREATE_TIME_,UPDATE_BY_,UPDATE_TIME_
+    </sql>
+
 
     <select id="query" resultType="com.redxun.knowledge.entity.dao.KnowledgeApprovalNode" parameterType="java.util.Map">
         select
-        PK_ID,NAME,APPROVER_ID,APPROVER_NAME,IS_FINAL,IS_DEL,COMPANY_ID_,CREATE_DEP_ID_,TENANT_ID_,CREATED_BY_,CREATED_TIME_,UPDATED_BY_,UPDATED_TIME_
+        PK_ID,NAME,APPROVER_ID,APPROVER_NAME,IS_FINAL,IS_DEL,COMPANY_ID_,
+        CREATE_DEP_ID_,TENANT_ID_,CREATED_BY_,CREATED_TIME_,UPDATED_BY_,UPDATED_TIME_
         from KM_KNOWLEDGE_APPROVAL_NODE
         <where>
             <if test="@rx.Ognl@isNotEmpty(w.whereSql)">
@@ -42,6 +48,20 @@
         WHERE IS_DEL = 0
         ORDER BY IS_FINAL ASC, CREATE_TIME_ ASC
     </select>
+
+
+    <select id="findAllApprovalNodes" resultType="com.redxun.knowledge.entity.vo.KnowledgeApprovalVo">
+    SELECT
+    <include refid="COLUMNS" />
+    FROM KM_KNOWLEDGE_APPROVAL_NODE
+    <where>
+        <if test="@rx.Ognl@isNotEmpty(params.name)">
+            NAME LIKE '%' || #{params.name} || '%'
+        </if>
+        and IS_DEL = 0
+    </where>
+    ORDER BY IS_FINAL ASC
+    </select>
 </mapper>