问题知识库-转发接口。

This commit is contained in:
wangzhijiang
2022-08-31 16:46:56 +08:00
parent 930478bbeb
commit a80267d6c2
3 changed files with 153 additions and 0 deletions
@@ -4,6 +4,8 @@ import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONObject;
import com.jero.common.api.vo.Result;
import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.problemKnowledgeBase.entity.ProblemKnowledgeBaseEO;
@@ -172,4 +174,11 @@ public class ProblemKnowledgeBaseEOController extends JeroController<ProblemKnow
return super.importExcel(request, response, ProblemKnowledgeBaseEO.class);
}
@AutoLog(value = "问题知识库表-转发")
@ApiOperation(value="问题知识库表-转发", notes="问题知识库表-转发")
@PostMapping(value = "/forward")
public Result<?> forward(@RequestBody JSONObject json) {
return this.problemKnowledgeBaseEOService.forward(json);
}
}
@@ -1,6 +1,8 @@
package com.jero.modules.problemKnowledgeBase.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.common.api.vo.Result;
import com.jero.modules.problemKnowledgeBase.entity.ProblemKnowledgeBaseEO;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -75,4 +77,11 @@ public interface IProblemKnowledgeBaseEOService extends IService<ProblemKnowledg
* @param queryWrapper
*/
void createQueryPermission(QueryWrapper<ProblemKnowledgeBaseEO> queryWrapper,ProblemKnowledgeBaseEO problemKnowledgeBaseEO);
/**
* 转发
* @param json
* @return
*/
Result<?> forward(JSONObject json);
}
@@ -4,14 +4,21 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.common.api.vo.Result;
import com.jero.common.constant.CommonConstant;
import com.jero.common.constant.WebsocketConst;
import com.jero.common.constant.enums.CutEnum;
import com.jero.common.constant.enums.MessageTypeEnum;
import com.jero.common.es.JeroElasticsearchTemplate;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.system.vo.DictModel;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.document.enums.SearchEnum;
import com.jero.modules.document.utils.ReadPdfUtil;
import com.jero.modules.document.utils.ReadWordUtil;
import com.jero.modules.feishu.service.IFeishuService;
import com.jero.modules.message.websocket.WebSocket;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
import com.jero.modules.problemKnowledgeBase.entity.*;
@@ -20,16 +27,24 @@ import com.jero.modules.problemKnowledgeBase.enums.PraiseStatusEnum;
import com.jero.modules.problemKnowledgeBase.enums.ShowPermissionsEnum;
import com.jero.modules.problemKnowledgeBase.mapper.ProblemKnowledgeBaseEOMapper;
import com.jero.modules.problemKnowledgeBase.service.*;
import com.jero.modules.project.enums.JumpLinkEnum;
import com.jero.modules.searchcenter.enums.ModuleTypeFlagEnum;
import com.jero.modules.system.entity.SysAnnouncement;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.enums.DicCodeEnum;
import com.jero.modules.system.service.ISysAnnouncementService;
import com.jero.modules.system.service.ISysDepartService;
import com.jero.modules.system.service.ISysDictService;
import com.jero.modules.system.service.ISysUserService;
import com.jero.modules.system.util.StringUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.shiro.SecurityUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
@@ -37,6 +52,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
/**
@@ -67,10 +83,23 @@ public class ProblemKnowledgeBaseEOServiceImpl extends ServiceImpl<ProblemKnowle
private JeroElasticsearchTemplate jeroElasticsearchTemplate;
@Autowired
private IOSSFileService iOSSFileService;
@Resource
private WebSocket webSocket;
@Autowired
private ISysAnnouncementService sysAnnouncementService;
@Resource
private IFeishuService iFeishuService;
@Autowired
private ISysDepartService sysDepartService;
@Autowired
private ISysUserService sysUserService;
public static final String SEARCH_FLAG = "";
@Value(value = "${jero.path.upload}")
private String uploadpath;
@Value(value = "${jero.backUrl}")
private String backUrl;
/**
* 保存
@@ -724,4 +753,110 @@ public class ProblemKnowledgeBaseEOServiceImpl extends ServiceImpl<ProblemKnowle
});
}
}
@Override
public Result<?> forward(JSONObject json) {
String cut = json.getString("cut");
String userIds = json.getString("userIds");
String departIds = json.getString("departIds");
if(StringUtils.isEmpty(userIds) && StringUtils.isNotEmpty(departIds)){
if(StringUtils.equals(cut,CutEnum.CN.getValue())){
throw new JeroBootException("至少选择一个人或部门进行转发!");
}else if(StringUtils.equals(cut,CutEnum.EN.getValue())){
throw new JeroBootException("Select at least one person or department to forward!");
}
}
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
List<SysUser> userList = new ArrayList<>();
Set<String> allDepartIds = new HashSet<>();
if(StringUtils.isNotEmpty(departIds)){
String[] departIdArr = departIds.split(",");
for (String departId : departIdArr) {
List<String> subDepIdsByDepId = this.sysDepartService.getSubDepIdsByDepId(departId);
allDepartIds.addAll(subDepIdsByDepId);
}
//查询部门下的人员
if(allDepartIds.size() != 0){
List<SysUser> userListByDepIds = this.sysUserService.getUserListByDepIds(new ArrayList<>(allDepartIds));
userList.addAll(userListByDepIds);
}
}
if(StringUtils.isNotEmpty(userIds)){
List<SysUser> sysUsers = this.sysUserService.querySysUserListByIdList(Arrays.asList(userIds.split(",")));
userList.addAll(sysUsers);
}
List<String> userIdList = new ArrayList<>();
List<String> thirdIdList = new ArrayList<>();
if (userList.size() != 0) {
userIdList.addAll(userList.stream().map(SysUser::getId).distinct().collect(Collectors.toList()));
thirdIdList.addAll(userList.stream().map(SysUser::getThirdId).distinct().collect(Collectors.toList()));
}
//String msgType = json.getString("msgType");
String problemKnowledgeBaseId = json.getString("problemKnowledgeBaseId");
//问题知识库标题
String problemKnowledgeBaseTitle = json.getString("problemKnowledgeBaseTitle");
//XXX向您推送了XXXXXXXXXX,请注意查看。
String msgContentEN = currentUser.getUsername()+" pushed " + problemKnowledgeBaseTitle + " to you.Please be reminded to check it out.";
String msgTitle = problemKnowledgeBaseTitle + " has been shared with you, please check.";
//飞书跳转链接
String hrefFeishu = backUrl + JumpLinkEnum.PROBLEM_KNOWLEDGE_BASE_DETAIL.getLink() + "?id=" + problemKnowledgeBaseId;
//系统内部跳转链接
String href = "<a href='"
+ JumpLinkEnum.PROBLEM_KNOWLEDGE_BASE_DETAIL.getLink()+ "?id="
+ problemKnowledgeBaseId
+ "'>" + " View details" + "</a>";
String contentInfo = msgContentEN + " " + href;
//封装消息的实体类
SysAnnouncement sysAnnouncement = getSysAnnouncement(userIdList, msgTitle, msgContentEN, contentInfo,MessageTypeEnum.PUSH.getValue(),MessageTypeEnum.SYSTEMATIC_NOTIFICATION.getName());
this.sysAnnouncementService.saveAnnouncement(sysAnnouncement);
this.sendWebsocket(StringUtils.join(thirdIdList, ","), contentInfo);
//飞书
try {
this.iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), msgContentEN, MessageTypeEnum.PUSH.getName(), hrefFeishu);
} catch (IOException e) {
log.error("飞书推送失败");
}
this.sendWebsocket(problemKnowledgeBaseId, contentInfo);
return Result.OK("转发成功!");
}
public void sendWebsocket(String msgId, String msgTet) {
JSONObject obj = new JSONObject();
obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC);
obj.put(WebsocketConst.MSG_ID, msgId);
obj.put(WebsocketConst.MSG_TXT, msgTet);
webSocket.sendMessage(obj.toJSONString());
}
@NotNull
public SysAnnouncement getSysAnnouncement(List<String> userIdList,
String title,
String content,
String contentInfo,
String messageType,
String initiator) {
SysAnnouncement sysAnnouncement = new SysAnnouncement();
sysAnnouncement.setInitiator(initiator);
sysAnnouncement.setDelFlag("0");
sysAnnouncement.setSendStatus("0");
sysAnnouncement.setSendTime(new Date());
sysAnnouncement.setMsgCategory(messageType);//消息类型
sysAnnouncement.setMsgType(CommonConstant.MSG_TYPE_UESR);//指定用户
sysAnnouncement.setTitile(title);
sysAnnouncement.setMsgContent(content);
sysAnnouncement.setMsgContentInfo(contentInfo);
sysAnnouncement.setUserIds(StringUtils.join(userIdList, ","));
return sysAnnouncement;
}
}