增加openmeetings接口

main
252535409 2 years ago
parent 386b309d7f
commit 3ce13a024c

@ -0,0 +1,171 @@
package org.jeecg.modules.ai.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.ai.entity.Room;
import org.jeecg.modules.ai.service.IRoomService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description:
* @Author: jeecg-boot
* @Date: 2023-11-30
* @Version: V1.0
*/
@Api(tags="房间表")
@RestController
@RequestMapping("/ai/room")
@Slf4j
public class RoomController extends JeecgController<Room, IRoomService> {
@Autowired
private IRoomService roomService;
/**
*
*
* @param room
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "房间表-分页列表查询")
@ApiOperation(value="房间表-分页列表查询", notes="房间表-分页列表查询")
@GetMapping(value = "/list")
public Result<?> queryPageList(Room room,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<Room> queryWrapper = QueryGenerator.initQueryWrapper(room, req.getParameterMap());
Page<Room> page = new Page<Room>(pageNo, pageSize);
IPage<Room> pageList = roomService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
*
*
* @param room
* @return
*/
@AutoLog(value = "房间表-添加")
@ApiOperation(value="房间表-添加", notes="房间表-添加")
@PostMapping(value = "/add")
public Result<?> add(@RequestBody Room room) {
roomService.save(room);
return Result.OK("添加成功!");
}
/**
*
*
* @param room
* @return
*/
@AutoLog(value = "房间表-编辑")
@ApiOperation(value="房间表-编辑", notes="房间表-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@RequestBody Room room) {
roomService.updateById(room);
return Result.OK("编辑成功!");
}
/**
* id
*
* @param id
* @return
*/
@AutoLog(value = "房间表-通过id删除")
@ApiOperation(value="房间表-通过id删除", notes="房间表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name="id",required=true) String id) {
roomService.removeById(id);
return Result.OK("删除成功!");
}
/**
*
*
* @param ids
* @return
*/
@AutoLog(value = "房间表-批量删除")
@ApiOperation(value="房间表-批量删除", notes="房间表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.roomService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* id
*
* @param id
* @return
*/
@AutoLog(value = "房间表-通过id查询")
@ApiOperation(value="房间表-通过id查询", notes="房间表-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
Room room = roomService.getById(id);
if(room==null) {
return Result.error("未找到对应数据");
}
return Result.OK(room);
}
/**
* excel
*
* @param request
* @param room
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, Room room) {
return super.exportXls(request, room, Room.class, "房间表");
}
/**
* excel
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, Room.class);
}
}

@ -0,0 +1,154 @@
package org.jeecg.modules.ai.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description:
* @Author: jeecg-boot
* @Date: 2023-11-30
* @Version: V1.0
*/
@Data
@TableName("room")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="room对象", description="房间表")
public class Room implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.Long id;
/**删除标志*/
@Excel(name = "删除标志", width = 15)
@ApiModelProperty(value = "删除标志")
private java.lang.Integer deleted;
/**创建时间*/
@Excel(name = "创建时间", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "创建时间")
private java.util.Date inserted;
/**更新时间*/
@Excel(name = "更新时间", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "更新时间")
private java.util.Date updated;
/**允许录屏*/
@Excel(name = "允许录屏", width = 15)
@ApiModelProperty(value = "允许录屏")
private java.lang.Integer allowRecording;
/**允许提问*/
@Excel(name = "允许提问", width = 15)
@ApiModelProperty(value = "允许提问")
private java.lang.Integer allowUserQuestions;
/**预约*/
@Excel(name = "预约", width = 15)
@ApiModelProperty(value = "预约")
private java.lang.Integer appointment;
/**只允许音频*/
@Excel(name = "只允许音频", width = 15)
@ApiModelProperty(value = "只允许音频")
private java.lang.Integer audioOnly;
/**房间容量*/
@Excel(name = "房间容量", width = 20)
@ApiModelProperty(value = "房间容量")
private java.lang.Long capacity;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.Integer chatModerated;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.Integer chatOpened;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.Integer closed;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.String comment;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.String confno;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.Integer demoRoom;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.Integer demoTime;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.String externalId;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.Integer filesOpened;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.Integer ispublic;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.Integer moderated;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.String name;
/** */
@Excel(name = " ", width = 20)
@ApiModelProperty(value = " ")
private java.lang.Long ownerId;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.String pin;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.String redirectUrl;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.Integer sipEnabled;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.String tag;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.String type;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.Integer waitModerator;
/** */
@Excel(name = " ", width = 15)
@ApiModelProperty(value = " ")
private java.lang.Integer waitForRecording;
}

@ -0,0 +1,18 @@
package org.jeecg.modules.ai.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.ai.entity.Room;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description:
* @Author: jeecg-boot
* @Date: 2023-11-30
* @Version: V1.0
*/
public interface RoomMapper extends BaseMapper<Room> {
}

@ -0,0 +1,5 @@
<?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="org.jeecg.modules.ai.mapper.RoomMapper">
</mapper>

@ -0,0 +1,21 @@
package org.jeecg.modules.ai.service;
import org.jeecg.modules.ai.entity.Room;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description:
* @Author: jeecg-boot
* @Date: 2023-11-30
* @Version: V1.0
*/
public interface IRoomService extends IService<Room> {
/**
*
* @return
*/
public String saveRoom(String userId);
}

@ -0,0 +1,123 @@
package org.jeecg.modules.ai.service.impl;
import java.io.StringReader;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.annotation.Resource;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.jeecg.modules.ai.entity.Room;
import org.jeecg.modules.ai.mapper.RoomMapper;
import org.jeecg.modules.ai.service.IRoomService;
import org.jeecg.modules.message.entity.SysMessage;
import org.jeecg.modules.message.service.ISysMessageService;
import org.jeecg.modules.system.entity.SysAnnouncement;
import org.jeecg.modules.system.entity.SysAnnouncementSend;
import org.jeecg.modules.system.service.ISysAnnouncementSendService;
import org.jeecg.modules.system.service.ISysAnnouncementService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.hutool.http.webservice.SoapClient;
import cn.hutool.http.webservice.SoapUtil;
/**
* @Description:
* @Author: jeecg-boot
* @Date: 2023-11-30
* @Version: V1.0
*/
@Service
@DS("multi-datasource1")
public class RoomServiceImpl extends ServiceImpl<RoomMapper, Room> implements IRoomService {
@Resource
private RoomMapper roomMapper;
/**
*
* @return
*/
public String saveRoom(String userId) {
Room room = new Room();
room.setName("远程协助"+userId);
room.setDeleted(0);
room.setInserted(new Date());
room.setAllowRecording(1);
room.setAllowUserQuestions(0);
room.setAppointment(0);
room.setAudioOnly(1);
room.setCapacity(2L);
room.setChatOpened(0);
room.setClosed(0);
room.setDemoRoom(0);
room.setFilesOpened(0);
room.setIspublic(1);
room.setModerated(0);
room.setSipEnabled(0);
room.setType("INTERVIEW");
room.setWaitForRecording(1);
room.setWaitModerator(0);
room.setChatModerated(0);
roomMapper.insert(room);
//生成房间地址
//请求地址
String soapUrl = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl";
HashMap<String, Object> map = new HashMap<>();
map.put("theCityName", "武汉");
SoapClient soapClient = SoapClient.create(soapUrl)
//请求方法,命名空间
.setMethod("web:getWeatherbyCityName", "http://WebXml.com.cn/")
.setParams(map);
String sendSoap = soapClient.send(true);
System.out.println(sendSoap);
Map<String, String> map1 = new HashMap<String, String>();
Map<String, String> soapMap = XmlMap(sendSoap, map1);
System.out.println(JSONObject.toJSONString(soapMap));
String roomUrl = "";
return roomUrl;
}
public static Map<String, String> XmlMap(String xml, Map<String, String> map) {
try {
SAXReader reader = new SAXReader();
Document doc = reader.read(new StringReader(xml));
Element root = doc.getRootElement();
String path = "";
if (map.containsKey(root.getName().trim())) {
path = map.get(root.getName().trim());
map.remove(root.getName().trim());
}
for (Iterator i = root.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
if (element.isTextOnly()) {
if (path.length() > 0) {
map.put(path + element.getName().trim(), element.getTextTrim());
} else {
map.put(element.getName().trim(), element.getTextTrim());
}
} else {
map.put(element.getName().trim(), path + element.getName().trim() + ".");
XmlMap(element.asXML(), map);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
}

@ -1,5 +1,6 @@
package org.jeecg.modules.api.controller;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
@ -17,9 +18,12 @@ import org.jeecg.modules.ai.service.IPreReviewMaterialService;
import org.jeecg.modules.ai.service.IPreReviewRecordsDetailService;
import org.jeecg.modules.ai.service.IPreReviewRecordsService;
import org.jeecg.modules.ai.service.IReasonEvaluationService;
import org.jeecg.modules.ai.service.IRoomService;
import org.jeecg.modules.ai.vo.PreExaminationMattersVo;
import org.jeecg.modules.ai.vo.PreReviewMaterialVo;
import org.jeecg.modules.ai.vo.PreReviewRecordsDetailVo;
import org.jeecg.modules.system.entity.SysAnnouncement;
import org.jeecg.modules.system.service.ISysAnnouncementService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@ -53,6 +57,10 @@ public class AiAPIController {
private IPreReviewRecordsService preReviewRecordsService;
@Autowired
private IReasonEvaluationService reasonEvaluationService;
@Autowired
private IRoomService iRoomService;
@Autowired
private ISysAnnouncementService iSysAnnouncementService;
/**
*
@ -137,6 +145,19 @@ public class AiAPIController {
return Result.OK("设置成功");
}
/**
*
* @param reviewInfo
* @return
*/
@GetMapping(value = "/createRoom")
public Result<?> createRoom(@RequestParam(name = "userId", required = true) String userId) {
String roomUrl = iRoomService.saveRoom(userId);
//发送系统消息
iSysAnnouncementService.saveRoomAnnouncement(roomUrl);
return Result.OK(roomUrl);
}
/**
*
* @param req

@ -22,4 +22,5 @@ public interface ISysAnnouncementService extends IService<SysAnnouncement> {
public Page<SysAnnouncement> querySysCementPageByUserId(Page<SysAnnouncement> page,String userId,String msgCategory);
public boolean saveRoomAnnouncement(String roomUrl);
}

@ -1,20 +1,25 @@
package org.jeecg.modules.system.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.WebsocketConst;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.message.websocket.WebSocket;
import org.jeecg.modules.system.entity.SysAnnouncement;
import org.jeecg.modules.system.entity.SysAnnouncementSend;
import org.jeecg.modules.system.mapper.SysAnnouncementMapper;
import org.jeecg.modules.system.mapper.SysAnnouncementSendMapper;
import org.jeecg.modules.system.service.ISysAnnouncementService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.List;
@ -33,6 +38,10 @@ public class SysAnnouncementServiceImpl extends ServiceImpl<SysAnnouncementMappe
@Resource
private SysAnnouncementSendMapper sysAnnouncementSendMapper;
@Value(value = "${message_receive_id}")
private String messageReceiveId;
@Resource
private WebSocket webSocket;
@Transactional
@Override
@ -115,5 +124,49 @@ public class SysAnnouncementServiceImpl extends ServiceImpl<SysAnnouncementMappe
public Page<SysAnnouncement> querySysCementPageByUserId(Page<SysAnnouncement> page, String userId,String msgCategory) {
return page.setRecords(sysAnnouncementMapper.querySysCementListByUserId(page, userId, msgCategory));
}
@Override
public boolean saveRoomAnnouncement(String roomUrl) {
SysAnnouncement sysAnnouncement = new SysAnnouncement();
sysAnnouncement.setTitile("远程协助请求");
sysAnnouncement.setMsgContent("有用户请求远程协助,请登录:"+roomUrl+",密码是111111");
sysAnnouncement.setSender("admin");
sysAnnouncement.setMsgCategory("2");
sysAnnouncement.setMsgType("USER");
sysAnnouncement.setSendStatus("1");
sysAnnouncement.setSendTime(new Date());
sysAnnouncement.setUserIds(messageReceiveId);
sysAnnouncement.setDelFlag("0");
sysAnnouncement.setCreateBy("admin");
sysAnnouncement.setCancelTime(new Date());
sysAnnouncement.setStartTime(new Date());
sysAnnouncement.setPriority("H");
Calendar calendar = Calendar.getInstance();
// 延迟一个小时
calendar.add(Calendar.HOUR_OF_DAY, 1);
sysAnnouncement.setEndTime(calendar.getTime());
sysAnnouncement.setCancelTime(calendar.getTime());
sysAnnouncementMapper.insert(sysAnnouncement);
SysAnnouncementSend send = new SysAnnouncementSend();
send.setAnntId(sysAnnouncement.getId());
send.setCreateTime(new Date());
send.setCreateBy("admin");
send.setCreateTime(new Date());
send.setReadFlag("0");
send.setUserId(messageReceiveId);
int r = sysAnnouncementSendMapper.insert(send);
if(r>0) {
JSONObject obj = new JSONObject();
obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
obj.put(WebsocketConst.MSG_USER_ID, messageReceiveId);
obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId());
obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile());
webSocket.sendMessage(messageReceiveId, obj.toJSONString());
}
return r>0;
}
}

@ -113,11 +113,11 @@ spring:
password: Wzw7788521
driver-class-name: com.mysql.cj.jdbc.Driver
# 多数据源配置
# multi-datasource1:
# url: jdbc:mysql://222.128.10.207:9002/kp_admin?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
# username: blroot
# password: KgshvIerauLFCYTl
# driver-class-name: com.mysql.cj.jdbc.Driver
multi-datasource1:
url: jdbc:mysql://47.92.244.192:3306/openmeetings?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
username: root
password: Wzw7788521
driver-class-name: com.mysql.cj.jdbc.Driver
#redis 配置
redis:
database: 9
@ -259,4 +259,5 @@ ucap:
connectTimeout: 10000
aliyun:
accessKey: 123
accessKeySecret: 456
accessKeySecret: 456
message_receive_id: 1000000

Loading…
Cancel
Save