diff --git a/com/api/meeting/cusvideo/util/YealinkVideoUtil.java b/com/api/meeting/cusvideo/util/YealinkVideoUtil.java index 6ed3386..a5b716b 100644 --- a/com/api/meeting/cusvideo/util/YealinkVideoUtil.java +++ b/com/api/meeting/cusvideo/util/YealinkVideoUtil.java @@ -306,7 +306,7 @@ public class YealinkVideoUtil { JSONObject body = new JSONObject(); body.put("name", comInfo.getLastname(userId)); body.put("extension", comInfo.getWorkcode(userId)); - String mobile = comInfo.getMobile(userId); + String mobile = getUserMobile(Util.getIntValue(userId));//comInfo.getMobile(userId); body.put("mobile", mobile); //判断手机号是否存在 if (StringUtils.isBlank(mobile)) { @@ -329,6 +329,19 @@ public class YealinkVideoUtil { } } + /** + * 获取脱敏前的手机号 + * @param uid + * @return + */ + public static String getUserMobile(int uid) { + RecordSet rs = new RecordSet(); + rs.setEncrypt(false); + rs.executeQuery("select mobile from hrmresource where id=?", uid); + rs.next(); + return Util.null2String(rs.getString(1)); + } + /** * 根据手机号查询用户 * diff --git a/com/engine/meeting/cmd/meetingvideo/DoAddVideoMeetingCmd.java b/com/engine/meeting/cmd/meetingvideo/DoAddVideoMeetingCmd.java new file mode 100644 index 0000000..dc2ad96 --- /dev/null +++ b/com/engine/meeting/cmd/meetingvideo/DoAddVideoMeetingCmd.java @@ -0,0 +1,233 @@ +package com.engine.meeting.cmd.meetingvideo; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.biz.SimpleBizLogger; +import com.engine.common.constant.BizLogType; +import com.engine.common.constant.ParamConstant; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.meeting.video.consumer.MeetingVideoFactory; +import weaver.meeting.video.consumer.VideoMeetingClient; +import weaver.meeting.video.util.BizLogSmallType4VideoMeeting; +import weaver.meeting.video.util.VideoMeetingUtil; +import weaver.systeminfo.SystemEnv; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +/* + * 新建+编辑视频会议 + * @author yp + * @date 2020/4/28 + * @param + * @return + */ +public class DoAddVideoMeetingCmd extends AbstractCommonCommand> { + + private SimpleBizLogger logger; + private BizLogContext bizLogContext; + public static VideoMeetingClient videoMeetingClient; + + public DoAddVideoMeetingCmd(User user, Map params) { + this.user = user; + this.params = params; + this.logger = new SimpleBizLogger(); + this.bizLogContext = new BizLogContext(); + } + + + @Override + public Map execute(CommandContext commandContext) { + Map ret = new HashMap(); + RecordSet recordSet = new RecordSet(); + String manufacturers = ""; + String host_id = ""; + String controlLine = ""; + String id = Util.null2String(params.get("id")); + recordSet.executeQuery("select * from meeting_videoset"); + while (recordSet.next()) { + if ("manufacturers".equals(recordSet.getString("keyname"))) { + manufacturers = Util.null2String(recordSet.getString("keyvalue")); + } + if ("controlLine".equals(recordSet.getString("keyname"))) { + controlLine = Util.null2String(recordSet.getString("keyvalue")); + } + } + params.put("manufacturers", manufacturers); + params.put("controlLine", controlLine); + params.put("userid", user.getUID()); + videoMeetingClient = MeetingVideoFactory.getInstance(manufacturers); + String pwd = Util.null2String(params.get("mtpassword")); + if(!"".equals(pwd) && (pwd.length() > 6 || pwd.length() < 4) && "tencent".equals(manufacturers)){ + if(pwd.length() > 6){ + ret.put("msg",SystemEnv.getHtmlLabelName(31865, user.getLanguage())+"6"); + } + if(pwd.length() < 4){ + ret.put("msg",SystemEnv.getHtmlLabelName(20172, user.getLanguage())+"4"); + } + ret.put("ret", "false"); + return ret; + } + //会议名称,开始时间,结束时间,从前台点击按钮传参。 + Map map = VideoMeetingUtil.getFreeLine(params); + String uniquetype = Util.null2String(map.get("uniquetype")); + if ("email".equals(uniquetype) && !"gnet".equals(manufacturers)) { + params.put("email", Util.null2String(map.get("line"))); + host_id = Util.null2String(videoMeetingClient.getUserInfo(params).get("id")); + } else { + host_id = Util.null2String(map.get("line")); + } + //如果hostid为空,说明没有配置线路,或者当前线路全忙,请重新选择时间 + if(!"huaweicloud".equals(manufacturers) && !"xylink".equals(manufacturers) && !"yealink".equals(manufacturers) && !"tencent".equals(manufacturers) && !"InfowareLab".equals(manufacturers) && !"BizConf".equals(manufacturers)){ + if (StringUtils.isBlank(host_id)) { + ret.put("msg", SystemEnv.getHtmlLabelName(519495, user.getLanguage())); + ret.put("ret", "false"); + return ret; + } + } + //hostid在这里处理。用检测冲突那一套逻辑,去检测出来不冲突的线路,并取出hostid。 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + int minute = 0; + try { + minute = (int) ((sdf.parse(Util.null2String(params.get("videomtenddate"))).getTime() - sdf.parse(Util.null2String(params.get("videomtbegindate"))).getTime()) / (1000 * 60)); + } catch (ParseException e) { + e.printStackTrace(); + } + if(Util.null2String(params.get("videomtbegindate")).length() == 19){ + String bgdateTemp = Util.null2String(params.get("videomtbegindate")).substring(0, 16); + params.put("videomtbegindate",bgdateTemp); + } + if(Util.null2String(params.get("videomtenddate")).length() == 19){ + String eddateTemp = Util.null2String(params.get("videomtenddate")).substring(0, 16); + params.put("videomtenddate",eddateTemp); + } + Map zoomMap = new HashMap(); + zoomMap.put("host_id", host_id); + zoomMap.put("type", "2"); + zoomMap.put("topic", Util.null2String(params.get("videomtname"))); + zoomMap.put("start_time", VideoMeetingUtil.localToUTC(Util.null2String(params.get("videomtbegindate"))+":00")); + zoomMap.put("end_time", Util.null2String(params.get("videomtenddate"))); + zoomMap.put("starttime", Util.null2String(params.get("videomtbegindate")));//这里多添加一个,是为了保证入库的时候,展示原本的时间。不展示utc时间。 + zoomMap.put("userid", Util.null2String(user.getUID())); + if (StringUtils.isNotBlank(Util.null2String(params.get("mtpassword")))) { + zoomMap.put("password", Util.null2String(params.get("mtpassword"))); + } + zoomMap.put("duration", Util.null2String(minute)); + zoomMap.put("manufacturers", manufacturers); + zoomMap.put("mouldkey", Util.null2String(params.get("mouldkey"))); + zoomMap.put("frommould", Util.null2String(params.get("frommould"))); + zoomMap.put("hrmids", Util.null2String(params.get("hrmids"))); + zoomMap.put("videoparties", Util.null2String(params.get("videoparties"))); + zoomMap = VideoMeetingUtil.dealParams(zoomMap); + String manu = ""; + try { + Map result = new HashMap(); + VideoMeetingUtil videoMeetingUtil = new VideoMeetingUtil(); + if (StringUtils.isNotBlank(id)) { + zoomMap.put("videoid", id); + recordSet.executeQuery("select * from meeting_videolist where id = ?", id); + recordSet.next(); + zoomMap.put("id", Util.null2String(recordSet.getString("videomtid"))); + manu = Util.null2String(recordSet.getString("manufacturers")); + String hrmidsOld = recordSet.getString("hrmids"); + String[] strOld= hrmidsOld.split(","); + String[] strNew= Util.null2String(params.get("hrmids")).split(","); + Set setOld = new HashSet<>(); + Set setNew = new HashSet<>(); + Collections.addAll(setOld, strOld); + Collections.addAll(setNew, strNew); + Map diffMap = VideoMeetingUtil.diffSet(setNew,setOld); + //添加人员 + Set addMemberSet = diffMap.get("add"); + //删除人员 + Set delMemberSet = diffMap.get("del"); + //原封不到的人员 + Set keepMemberSet = diffMap.get("keep"); + if(!manu.equals(manufacturers)){ + ret.put("msg",SystemEnv.getHtmlLabelName(523363, user.getLanguage())); + ret.put("ret", false); + return ret; + }else{ + result = videoMeetingClient.editMeeting(zoomMap); + if(Boolean.parseBoolean(Util.null2String(result.get("api_status")))){ + if(addMemberSet.size()>0){ + videoMeetingUtil.remindByThread(id, new User(user.getUID()),999,addMemberSet.stream().collect(Collectors.joining(","))); + } + if(delMemberSet.size()>0){ + videoMeetingUtil.remindByThread(id, new User(user.getUID()),1001,delMemberSet.stream().collect(Collectors.joining(","))); + } + if(keepMemberSet.size()>0){ + videoMeetingUtil.remindByThread(id, new User(user.getUID()),1000,keepMemberSet.stream().collect(Collectors.joining(","))); + } + } + } + } else { + if(Boolean.parseBoolean(Util.null2String(result.get("api_status")))){ + videoMeetingUtil.remindByThread(result.get("maxid")+"", new User(user.getUID()),999); + } + } + boolean api_status = Boolean.parseBoolean(Util.null2String(result.get("api_status"))); + ret.put("maxid",result.get("maxid")); + ret.put("ret", api_status); + if(StringUtils.isNotBlank(id) && !api_status){ + if(manu.equals(manufacturers)){ + ret.put("msg",SystemEnv.getHtmlLabelName(523362, user.getLanguage())); + }else{ + ret.put("msg",SystemEnv.getHtmlLabelName(523363, user.getLanguage())); + } + } + if(StringUtils.isNotBlank(Util.null2String(result.get("msg")))){ + ret.put("msg",Util.null2String(result.get("msg"))); + } + } catch (Exception e) { + e.printStackTrace(); + ret.put("ret", "false"); + } + this.beforeLog(); + String mainSql = "select * from meeting_videolines "; + logger.setMainSql(mainSql, "id"); + return ret; + } + + /** + * 日志操作记录 + */ + public void beforeLog() { + bizLogContext.setDateObject(new Date()); + bizLogContext.setUserid(user.getUID()); + bizLogContext.setUsertype(Util.getIntValue(user.getLogintype())); + bizLogContext.setTargetId("1"); + //bizLogContext.setTargetName("应用设置"); + bizLogContext.setLogType(BizLogType.MEETING_ENGINE); + bizLogContext.setBelongType(BizLogSmallType4VideoMeeting.MEETING_VideMeeting); + bizLogContext.setLogSmallType(BizLogSmallType4VideoMeeting.MEETING_VideMeeting); + //bizLogContext.setBelongTypeTargetName(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005423,weaver.general.ThreadVarLanguage.getLang())+""); + bizLogContext.setParams(params); + bizLogContext.setClientIp(Util.null2String(params.get(ParamConstant.PARAM_IP))); + logger.setUser(user);//当前操作人 + logger.setParams(params);//request请求参数 + + RecordSet recordSet = new RecordSet(); + String mainSql = "select * from meeting_videoset "; + logger.setMainSql(mainSql, "id"); + + //logger.setMainTargetNameColumn(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005423,weaver.general.ThreadVarLanguage.getLang())+""); + logger.before(bizLogContext); + } + + /** + * 生成logContext对象 + * + * @return BizLogContext对象 + */ + @Override + public BizLogContext getLogContext() { + return logger.getBizLogContext(); + } +} diff --git a/com/engine/meeting/cmd/meetingvideo/getVideoMeetingBtnCmd.java b/com/engine/meeting/cmd/meetingvideo/getVideoMeetingBtnCmd.java new file mode 100644 index 0000000..f835d83 --- /dev/null +++ b/com/engine/meeting/cmd/meetingvideo/getVideoMeetingBtnCmd.java @@ -0,0 +1,190 @@ +package com.engine.meeting.cmd.meetingvideo; + +import com.alibaba.fastjson.JSONObject; +import com.api.meeting.util.MeetingPrmUtil; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.biz.SimpleBizLogger; +import com.engine.common.constant.BizLogType; +import com.engine.common.constant.ParamConstant; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.meeting.video.util.BizLogSmallType4VideoMeeting; +import weaver.meeting.video.util.VideoMeetingUtil; +import weaver.systeminfo.SystemEnv; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/* + * 按钮显示逻辑 + * @author yp + * @date 2020/4/28 + * @param + * @return + */ +public class getVideoMeetingBtnCmd extends AbstractCommonCommand> { + + private SimpleBizLogger logger; + private BizLogContext bizLogContext; + + public getVideoMeetingBtnCmd(User user, Map params) { + this.user = user; + this.params = params; + this.logger = new SimpleBizLogger(); + this.bizLogContext = new BizLogContext(); + } + + + @Override + public Map execute(CommandContext commandContext) { + boolean canedit = false; + Map ret = new HashMap(); + VideoMeetingUtil vmt = new VideoMeetingUtil(); + String frommould = Util.null2String(params.get("frommould")); + String mouldkey = Util.null2String(params.get("mouldkey")); + String _ec_os = Util.null2String(params.get("_ec_os"));//移动端os类型 + String ismobile = Util.null2String(params.get("ismobile"));//是否伟移动端请求 + RecordSet recordSet = new RecordSet(); + if("MEETING".equals(frommould)){//新视频会议应用,frommould和mouldkey分别是MobileVideoMeeting和id字段。修改一下sql + recordSet.executeQuery("select * from meeting_videolist where videomtstatus in (0,1) and frommould = ? and mouldkey = ?", frommould, mouldkey); + }else{ + recordSet.executeQuery("select * from meeting_videolist where videomtstatus in (0,1) and id = ?", mouldkey); + } + if (recordSet.next()) { + JSONObject json = new JSONObject(); + json.put("sharetypename", SystemEnv.getHtmlLabelName(2103,user.getLanguage())); + json.put("content",recordSet.getString("videomtname")); + json.put("sysid",""); + json.put("desc",recordSet.getString("videomtname")); + json.put("jcpiurl",recordSet.getString("videomtjoinurl")); + json.put("canforword",0); + json.put("opentype",1); + json.put("opentype_pc",1); + json.put("shareid",recordSet.getString("videomtid")); + String general_pwd = ""; + //如果存在数据,看下是查看会议,还是加入会议 + if (Util.null2String(user.getUID()).equals(recordSet.getString("videomtcreater"))) { + ret.put("type", "view"); + ret.put("joinurl", recordSet.getString("videomtstarturl")); + ret.put("joinType",1); + ret.put("mtid",recordSet.getString("videomtid")); + ret.put("manufacturers",recordSet.getString("manufacturers")); + ret.put("mttitle",recordSet.getString("videomtname")); + if("huaweicloud".equals(recordSet.getString("manufacturers"))){ + ret.put("mtpwd", JSONObject.parseObject(recordSet.getString("mtpassword")).getString("chair_pwd")); + } + if("xylink".equals(recordSet.getString("manufacturers"))){ + ret.put("joinurl", vmt.getXylinkUrl(recordSet.getString("videomtid"),user.getUID()+"",JSONObject.parseObject(recordSet.getString("mtpassword")).getString("chair_pwd"))); + } + if ("yealink".equals(recordSet.getString("manufacturers"))) { + ret.put("mtpwd", Util.null2String(recordSet.getString("mtpassword"))); + ret.put("mtnum", recordSet.getString("oamtid")); + ret.put("phone", com.api.meeting.cusvideo.util.YealinkVideoUtil.getUserMobile(user.getUID())); + } + } else { + ret.put("joinurl", recordSet.getString("videomtjoinurl")); + ret.put("type", "join"); + ret.put("joinType",2); + ret.put("mtid",recordSet.getString("videomtid")); + ret.put("manufacturers",recordSet.getString("manufacturers")); + ret.put("mttitle",recordSet.getString("videomtname")); + if("huaweicloud".equals(recordSet.getString("manufacturers"))){ + general_pwd = JSONObject.parseObject(recordSet.getString("mtpassword")).getString("general_pwd"); + ret.put("mtpwd", general_pwd); + } + if("xylink".equals(recordSet.getString("manufacturers"))){ + ret.put("joinurl", vmt.getXylinkUrl(recordSet.getString("videomtid"),user.getUID()+"",JSONObject.parseObject(recordSet.getString("mtpassword")).getString("general_pwd"))); + }else if("InfowareLab".equals(recordSet.getString("manufacturers")) && "1".equals(ismobile)){ + ret.put("joinurl",vmt.getHSSLinkUrl(user.getUID()+"",_ec_os,recordSet.getString("videomtid"),recordSet.getString("mtpassword"),false)); + } + if ("yealink".equals(recordSet.getString("manufacturers"))) { + ret.put("mtpwd", Util.null2String(recordSet.getString("mtpassword"))); + ret.put("mtnum", recordSet.getString("oamtid")); + ret.put("phone", com.api.meeting.cusvideo.util.YealinkVideoUtil.getUserMobile(user.getUID())); + } + } + json.put("linkurl","meetingid="+recordSet.getString("videomtid")+"&manufacturers="+recordSet.getString("manufacturers")+"&pwd="+general_pwd); + ret.put("msgInfo",json); + ret.put("msgType",10); + } else { + //如果不存在,那么就是新建会议 + //如果所属模块是会议,那么要根据创建人权限来展示的。 + if ("MEETING".equals(frommould)) { + MeetingPrmUtil mpu = new MeetingPrmUtil(user, mouldkey); + //不根据权限了。只要是这三个人,都可以 + if (mpu.getIscaller() || mpu.getIscontacter() || mpu.getIscreater()) { + ret.put("type", "create"); + } + } else { + ret.put("type", "create"); + } + } + boolean showBtn = false; + String meetingid = Util.null2String(params.get("meetingid")); + RecordSet rs2 = new RecordSet(); + rs2.executeQuery("select * from meeting where id = ?", meetingid); + if (rs2.next() && "2".equals(rs2.getString("meetingstatus"))) { + rs2.execute("SELECT * FROM meeting_videoset"); + String allowvideoMeeting = ""; + while (rs2.next()) { + if ("allowvideoMeeting".equals(rs2.getString("keyname"))) { + allowvideoMeeting = Util.null2String(rs2.getString("keyvalue")); + } + } + if ("1".equals(allowvideoMeeting)) { + rs2.executeQuery("select * from meeting_videolist where videomtstatus in (0,1) and frommould = ? and mouldkey = ? ", "MEETING", meetingid); + if (rs2.next()) { + showBtn = true; + } else { + MeetingPrmUtil mpu = new MeetingPrmUtil(user, meetingid); + //不根据权限了。只要是这三个人,都可以 + if (mpu.getIscaller() || mpu.getIscontacter() || mpu.getIscreater()) { + showBtn = true; + } + } + } + } + ret.put("isShowVideoBtn",showBtn); + return ret; + } + + /** + * 日志操作记录 + */ + public void beforeLog() { + bizLogContext.setDateObject(new Date()); + bizLogContext.setUserid(user.getUID()); + bizLogContext.setUsertype(Util.getIntValue(user.getLogintype())); + bizLogContext.setTargetId("1"); + //bizLogContext.setTargetName("应用设置"); + bizLogContext.setLogType(BizLogType.MEETING_ENGINE); + bizLogContext.setBelongType(BizLogSmallType4VideoMeeting.MEETING_VideMeeting); + bizLogContext.setLogSmallType(BizLogSmallType4VideoMeeting.MEETING_VideMeeting); + //bizLogContext.setBelongTypeTargetName(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005423,weaver.general.ThreadVarLanguage.getLang())+""); + bizLogContext.setParams(params); + bizLogContext.setClientIp(Util.null2String(params.get(ParamConstant.PARAM_IP))); + logger.setUser(user);//当前操作人 + logger.setParams(params);//request请求参数 + + RecordSet recordSet = new RecordSet(); + String mainSql = "select * from meeting_videoset "; + logger.setMainSql(mainSql, "id"); + + //logger.setMainTargetNameColumn(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005423,weaver.general.ThreadVarLanguage.getLang())+""); + logger.before(bizLogContext); + } + + /** + * 生成logContext对象 + * + * @return BizLogContext对象 + */ + @Override + public BizLogContext getLogContext() { + return logger.getBizLogContext(); + } +} diff --git a/weaver/filter/RequestLoggingFilter.java b/weaver/filter/RequestLoggingFilter.java index 53c4b08..43fca09 100644 --- a/weaver/filter/RequestLoggingFilter.java +++ b/weaver/filter/RequestLoggingFilter.java @@ -31,14 +31,17 @@ public class RequestLoggingFilter implements Filter { String method = ((HttpServletRequest) request).getMethod(); // 获取请求参数 - String queryString = ((HttpServletRequest) request).getQueryString(); + String queryString = ((HttpServletRequest) request).getQueryString(); String remoteHost = request.getRemoteHost(); Map parameterMap = request.getParameterMap(); + + String userAgent = ((HttpServletRequest) request).getHeader("User-Agent"); logger.writeLog("Request URL:-----" + requestURI); logger.writeLog("Request Method: " + method); logger.writeLog("Request Parameters: " + queryString); logger.writeLog("Request remoteHost: " + remoteHost); logger.writeLog("Request parameterMap: " + parameterMap.toString()); + logger.writeLog("Request userAgent: " + userAgent); chain.doFilter(request, response); }catch (Exception e){ e.printStackTrace(); diff --git a/weaver/interfaces/workflow/action/javacode/Action20240719095314.java b/weaver/interfaces/workflow/action/javacode/Action20240719092616.java similarity index 100% rename from weaver/interfaces/workflow/action/javacode/Action20240719095314.java rename to weaver/interfaces/workflow/action/javacode/Action20240719092616.java diff --git a/weaver/interfaces/workflow/action/javacode/Action20240719101107.java b/weaver/interfaces/workflow/action/javacode/Action20240719101107.java index 53a1f1d..786a85f 100644 --- a/weaver/interfaces/workflow/action/javacode/Action20240719101107.java +++ b/weaver/interfaces/workflow/action/javacode/Action20240719101107.java @@ -14,7 +14,7 @@ import java.util.ArrayList; /** * Online custom action interface */ -public class Action20240719092807 extends BaseBean implements Action{ +class Action20240719092807 extends BaseBean implements Action{ @Override public String execute(RequestInfo request) { String requestId = request.getRequestid();