Esempio n. 1
0
        /**
         * 批量设置用户标签
         */
        public ResponseResult BatchSet(TagModel tagModel)
        {
            String message = CommonUtil.CheckFiled(tagModel, PATH, CheckMethod.TAG_BATCH_SET);

            if (null != message)
            {
                return((ResponseResult)RongJsonUtil.JsonStringToObj <ResponseResult>(message));
            }

            String body = RongJsonUtil.ObjToJsonString(tagModel);

            String result = RongHttpClient.ExecutePost(appKey, appSecret, body,
                                                       rongCloud.ApiHostType.Type + "/user/tag/batch/set.json", "application/json");

            return((ResponseResult)RongJsonUtil.JsonStringToObj <ResponseResult>(CommonUtil.GetResponseByCode(PATH, CheckMethod.TAG_BATCH_SET, result)));
        }
Esempio n. 2
0
        /**
         * 推送
         *
         * @param push 推送数据
         * @return PushResult
         **/
        public PushResult Send(PushModel push)
        {
            // 需要校验的字段
            String message = CommonUtil.CheckFiled(push, PATH, CheckMethod.PUSH);

            if (null != message)
            {
                return((PushResult)RongJsonUtil.JsonStringToObj <PushResult>(message));
            }

            String body = RongJsonUtil.ObjToJsonString(push);

            String result = RongHttpClient.ExecutePost(appKey, appSecret, body,
                                                       RongCloud.ApiHostType.Type + "/push.json", "application/json");

            return((PushResult)RongJsonUtil.JsonStringToObj <PushResult>(CommonUtil.GetResponseByCode(PATH, CheckMethod.BROADCAST, result)));
        }
Esempio n. 3
0
        /**
         * 广播
         *
         * @param broadcast 广播数据
         * @return PushResult
         **/
        public async Task <PushResult> Send(BroadcastModel broadcast)
        {
            // 需要校验的字段
            string message = CommonUtil.CheckFiled(broadcast, PATH, CheckMethod.BROADCAST);

            if (null != message)
            {
                return(RongJsonUtil.JsonStringToObj <PushResult>(message));
            }

            string body = RongJsonUtil.ObjToJsonString(broadcast);

            string result = await RongHttpClient.ExecutePost(appKey, appSecret, body,
                                                             RongCloud.ApiHostType.Type + "/push.json", "application/json");

            return(RongJsonUtil.JsonStringToObj <PushResult>(CommonUtil.GetResponseByCode(PATH, CheckMethod.BROADCAST,
                                                                                          result)));
        }
Esempio n. 4
0
        /**
         * 设置用户标签
         */
        public async Task <ResponseResult> Set(TagModel tagModel)
        {
            //需要校验的字段
            string message = CommonUtil.CheckFiled(tagModel, PATH, CheckMethod.TAG_SET);

            if (null != message)
            {
                return(RongJsonUtil.JsonStringToObj <ResponseResult>(message));
            }

            string body = RongJsonUtil.ObjToJsonString(tagModel);

            string result = await RongHttpClient.ExecutePost(appKey, appSecret, body,
                                                             RongCloud.ApiHostType.Type + "/user/tag/set.json", "application/json");

            return(RongJsonUtil.JsonStringToObj <ResponseResult>(
                       CommonUtil.GetResponseByCode(PATH, CheckMethod.TAG_SET, result)));
        }
        /// <summary>
        /// 融云-消息路由
        /// </summary>
        public dynamic TemplateRouteCallback(TemplateRouteInputDto inputDto)
        {
            var form  = HttpContext.Current?.Request?.Form;
            var items = form.AllKeys.SelectMany(form.GetValues, (k, v) => new { key = k, value = v });

            var fromUserId    = items.FirstOrDefault(o => o.key.ToUpper() == "FROMUSERID")?.value;
            var toUserId      = items.FirstOrDefault(o => o.key.ToUpper() == "TOUSERID")?.value;
            var objectName    = items.FirstOrDefault(o => o.key.ToUpper() == "OBJECTNAME")?.value;
            var content       = items.FirstOrDefault(o => o.key.ToUpper() == "CONTENT")?.value;
            var channelType   = items.FirstOrDefault(o => o.key.ToUpper() == "CHANNELTYPE")?.value;
            var msgTimestamp  = items.FirstOrDefault(o => o.key.ToUpper() == "MSGTIMESTAMP")?.value;
            var msgUID        = items.FirstOrDefault(o => o.key.ToUpper() == "MSGUID")?.value;
            var sensitiveType = items.FirstOrDefault(o => o.key.ToUpper() == "SENSITIVETYPE")?.value;
            var source        = items.FirstOrDefault(o => o.key.ToUpper() == "SOURCE")?.value;
            var groupUserIds  = items.FirstOrDefault(o => o.key.ToUpper() == "GROUPUSERIDS")?.value;


            string appKey    = ConfigurationManager.AppSettings["RongCloudAppKey"];
            string appSecret = ConfigurationManager.AppSettings["RongCloudAppSecret"];

            string signature = RongHttpClient.GetHash(appSecret + inputDto.Nonce + inputDto.SignTimestamp);

            if (signature.ToUpper() != inputDto.Signature.ToUpper())
            {
                var massage = string.Format("[RouteCallback]:Error {0}==>{1},{2}", inputDto.Signature, signature, RongJsonUtil.ObjToJsonString(inputDto));
                LoggerHelper.Error(massage);
                return(new { pass = "******" });
            }


            var rongCloudContent = new RongCloudContent
            {
                Id         = Guid.NewGuid().ToString(),
                CreateTime = DateTime.UtcNow.AddHours(8),

                FromUserId    = fromUserId,
                ToUserId      = toUserId,//此ID对应会议ID
                ObjectName    = objectName,
                ChannelType   = channelType,
                MsgTimeStamp  = msgTimestamp,
                MsgUID        = msgUID,
                SensitiveType = sensitiveType,
                Source        = source,
                Audit         = 0,
                Remark        = RongJsonUtil.ObjToJsonString(items),
            };

            if (objectName == "RC:TxtMsg" && !string.IsNullOrEmpty(content))
            {
                var res = (ContentInputDto)RongJsonUtil.JsonStringToObj <ContentInputDto>(content);

                //var doctor = _rep.FirstOrDefault<WxUserModel>(s => s != null && s.IsDeleted != 1 && s.Id == toUserId);

                rongCloudContent.WxName    = res?.User?.Name;
                rongCloudContent.WxPicture = res?.User?.Avatar;
                rongCloudContent.Content   = res.Content;
            }
            else
            {
                rongCloudContent.Content = content;
            }

            rongCloudContent.GroupUserIds = groupUserIds;

            _rep.Insert <RongCloudContent>(rongCloudContent);
            _rep.SaveChanges();

            return(new { pass = "******" });
        }
        /// <summary>
        /// 以发送聊天室消息方法实现:业务处理聊天室禁言与解禁
        /// </summary>
        /// <returns></returns>
        public ReturnValueModel ChatroomSend(ChatroomSendInputDto dto, WorkUser workUser)
        {
            ReturnValueModel rvm = new ReturnValueModel();

            var meetInfo = _rep.FirstOrDefault <MeetInfo>(s => s != null && s.IsDeleted != 1 && s.Id == dto.Id);

            if (meetInfo == null)
            {
                rvm.Msg     = "获取会议失败";
                rvm.Success = false;
                rvm.Result  = "";
                return(rvm);
            }

            string appKey    = ConfigurationManager.AppSettings["RongCloudAppKey"];
            string appSecret = ConfigurationManager.AppSettings["RongCloudAppSecret"];
            string _host     = ConfigurationManager.AppSettings["RongCloudUrl"];
            string url       = $"{_host}/message/chatroom/publish.json";

            StringBuilder sb = new StringBuilder();

            var content = RongJsonUtil.ObjToJsonString(new
            {
                content     = dto.Content,
                messageName = "TextMessage",
                extra       = "extra"
                              //user = new
                              //{
                              //    id = workUser.User.Id,
                              //    name = "系统管理员",
                              //    icon = "http://example.com/p1.png",
                              //    extra = "extra"
                              //}
            });
            var objectName = $"RCFK:{dto.Content}";

            sb.Append("&fromUserId=").Append(HttpUtility.UrlEncode(workUser.User.Id, Encoding.UTF8)); //发送人用户 Id
            sb.Append("&toChatroomId=").Append(HttpUtility.UrlEncode(dto.Id, Encoding.UTF8));         //接收聊天室 Id
            sb.Append("&objectName=").Append(HttpUtility.UrlEncode(objectName, Encoding.UTF8));
            sb.Append("&content=").Append(HttpUtility.UrlEncode(content, Encoding.UTF8));
            String body = sb.ToString();

            if (body.IndexOf("&") == 0)
            {
                body = body.Substring(1, body.Length - 1);
            }
            string result = RongHttpClient.ExecutePost(appKey, appSecret, body, url, "application/x-www-form-urlencoded");
            var    res    = (ResponseResult)RongJsonUtil.JsonStringToObj <ResponseResult>(result);

            if (res.Code == 200)
            {
                meetInfo.UpdateTime       = DateTime.Now;
                meetInfo.UpdateUser       = workUser.User.Id;
                meetInfo.IsForbiddenWords = dto.Content == "Close" ? 1 : 0;
                _rep.Update(meetInfo);
                _rep.Insert <RongCloudChatRoomHandle>(new RongCloudChatRoomHandle
                {
                    Id         = Guid.NewGuid().ToString(),
                    CreateUser = workUser.User.Id,
                    CreateTime = DateTime.UtcNow.AddHours(8),
                    ChatRoomId = dto.Id,
                    Event      = dto.Content,
                });
                _rep.SaveChanges();

                rvm.Msg     = "success";
                rvm.Success = true;
                rvm.Result  = res;
                return(rvm);
            }
            else
            {
                rvm.Msg     = "消息失败";
                rvm.Success = false;
                rvm.Result  = result;
                return(rvm);
            }
        }
        /// <summary>
        /// 融云-聊天室 状态同步
        /// </summary>
        public dynamic ChatroomStatusSync(ChatroomStatusSyncDto inputDto, string body)
        {
            var    bodys     = RongJsonUtil.JsonStringToObj <List <RongCloudChatroomStatusDto> >(body);
            string appKey    = ConfigurationManager.AppSettings["RongCloudAppKey"];
            string appSecret = ConfigurationManager.AppSettings["RongCloudAppSecret"];

            string signature = RongHttpClient.GetHash(appSecret + inputDto.Nonce + inputDto.SignTimestamp);

            if (signature.ToUpper() != inputDto.Signature.ToUpper())
            {
                var massage = string.Format("[ChatroomStatusSync]:Error {0}==>{1},{2}", inputDto.Signature, signature, RongJsonUtil.ObjToJsonString(inputDto));
                LoggerHelper.Error(massage);
                return(new { pass = "******" });
            }
            List <RongCloudChatroomStatus> rongCloudChatroomStatus = new List <RongCloudChatroomStatus>();

            foreach (var item in bodys)
            {
                if (item.UserIds.Count > 0)
                {
                    foreach (var user in item.UserIds)
                    {
                        var doctor = _rep.FirstOrDefault <WxUserModel>(s => s != null && s.IsDeleted != 1 && s.Id == user);
                        if (doctor != null)
                        {
                            rongCloudChatroomStatus.Add(new RongCloudChatroomStatus
                            {
                                Id           = Guid.NewGuid().ToString(),
                                CreateTime   = DateTime.UtcNow.AddHours(8),
                                ChatRoomId   = item.ChatRoomId,
                                UserId       = doctor.Id,
                                Status       = item.Status,
                                Type         = item.Type,
                                Time         = item.Time,
                                UserName     = doctor.UserName,
                                HospitalName = doctor.HospitalName,
                            });
                        }
                    }
                }
                else
                {
                    rongCloudChatroomStatus.Add(new RongCloudChatroomStatus
                    {
                        Id         = Guid.NewGuid().ToString(),
                        CreateTime = DateTime.UtcNow.AddHours(8),
                        ChatRoomId = item.ChatRoomId,
                        Status     = item.Status,
                        Type       = item.Type,
                        Time       = item.Time,
                        //UserName = doctor.UserName,
                        //HospitalName = doctor.HospitalName,
                    });
                }
            }

            //var doctor = _rep.FirstOrDefault<WxUserModel>(s => s != null && s.IsDeleted != 1 && s.Id == toUserId);


            _rep.InsertList <RongCloudChatroomStatus>(rongCloudChatroomStatus);
            _rep.SaveChanges();

            return(new { pass = "******" });
        }
        /// <summary>
        /// 新增会议信息
        /// </summary>
        /// <param name="meetInfo"></param>
        /// <returns></returns>
        public ReturnValueModel AddMeetInfo(MeetInfoSubscribeDto dto, string body)
        {
            ReturnValueModel rvm = new ReturnValueModel();
            var meetInfoView     = RongJsonUtil.JsonStringToObj <MeetInfoViewDtoModel>(body);

            string loginSecretkey = ConfigurationManager.AppSettings["ThirdPartyKey"];
            string signature      = RongHttpClient.GetHash(loginSecretkey + dto.Nonce + dto.SignTimestamp);

            if (signature.ToUpper() != dto.Signature.ToUpper())
            {
                var massage = string.Format("Error:input={0}==>service={1},{2}", dto.Signature, signature, RongJsonUtil.ObjToJsonString(dto));
                LoggerHelper.Error(massage);
                rvm.Success = false;
                rvm.Msg     = massage;
                return(rvm);
            }
            string MeetType = string.Empty;

            if (meetInfoView?.Meet == null)
            {
                rvm.Msg     = "The parameter 'Meet' is required.";
                rvm.Success = false;
                return(rvm);
            }

            if (meetInfoView?.Schedules == null || meetInfoView.Schedules.Count() == 0)
            {
                rvm.Msg     = "The parameter 'Schedules' is required, and cannot be empty.";
                rvm.Success = false;
                return(rvm);
            }

            MeetInfo meet = null;

            if (!string.IsNullOrEmpty(meetInfoView.Meet.Id))
            {
                meet = _rep.FirstOrDefault <MeetInfo>(s => s.Id == meetInfoView.Meet.Id && s.IsDeleted != 1);
            }

            //if (meet != null && meet.MeetStartTime.HasValue && meet.MeetStartTime <= DateTime.Now)
            //{
            //    rvm.Msg = "This meeting is started, cannot change it now.";
            //    rvm.Success = false;
            //    return rvm;
            //}

            // var approvalEnabled = false; //是否启用审核

            using (var tran = _rep.Database.BeginTransaction())
            {
                try
                {
                    if (meet == null)
                    {
                        meetInfoView.Meet.Id          = Guid.NewGuid().ToString();
                        meetInfoView.Meet.CreateTime  = DateTime.Now;
                        meetInfoView.Meet.CreateUser  = "******";
                        meetInfoView.Meet.IsCompleted = EnumComplete.Approved;
                        meetInfoView.Meet.Remark      = "第三方调用";
                    }

                    meet = meetInfoView.Meet;

                    _rep.Insert(meet);
                    _rep.SaveChanges();
                    //线下会议需要生成签到二维码
                    if ((meet.MeetType == 2 || meet.MeetType == 3) && string.IsNullOrEmpty(meet.MeetCodeUrl))
                    {
                        meet.MeetCodeUrl = GetQRImgUrl(meet.Id);
                    }
                    //全国会议
                    if (meet.MeetType == 4 && string.IsNullOrEmpty(meet.MeetCodeUrl))
                    {
                        meet.MeetCodeUrl = GetQRImgUrl(meet.Id, 5);
                    }

                    //直播会议
                    if (meet.MeetType == 5 && string.IsNullOrEmpty(meet.MeetCodeUrl))
                    {
                        meet.MeetCodeUrl = GetQRImgUrl(meet.Id, 6);
                    }
                    //添加参会医生名单
                    if (meetInfoView.DoctorList != null)
                    {
                        foreach (var item in meetInfoView.DoctorList)
                        {
                            DoctorMeeting doctorMeeting = new DoctorMeeting
                            {
                                Id         = Guid.NewGuid().ToString(),
                                DoctorID   = item,
                                MeetingID  = meet.Id,
                                CreateUser = "******",
                                CreateTime = DateTime.Now
                            };
                            _rep.Insert(doctorMeeting);
                        }
                        _rep.SaveChanges();
                    }
                    else
                    {
                        //全部人员都可访问
                        DoctorMeeting doctorMeeting = new DoctorMeeting
                        {
                            Id         = Guid.NewGuid().ToString(),
                            DoctorID   = "00000000-0000-0000-0000-000000000000",
                            MeetingID  = meet.Id,
                            CreateUser = "******",
                            CreateTime = DateTime.Now
                        };
                        _rep.Insert(doctorMeeting);
                        _rep.SaveChanges();
                    }

                    //添加标签分组信息
                    if (meetInfoView.TagGroupList != null)
                    {
                        foreach (var item in meetInfoView.TagGroupList)
                        {
                            DoctorMeeting doctorMeeting = new DoctorMeeting
                            {
                                Id         = Guid.NewGuid().ToString(),
                                TagGroupID = item,
                                MeetingID  = meet.Id,
                                CreateUser = "******",
                                CreateTime = DateTime.Now
                            };
                            _rep.Insert(doctorMeeting);
                        }
                        _rep.SaveChanges();
                    }

                    //添加封面图片
                    if (meetInfoView.CoverPictures != null)
                    {
                        foreach (var item in meetInfoView.CoverPictures)
                        {
                            if (string.IsNullOrEmpty(item?.MeetPicType) || string.IsNullOrEmpty(item?.MeetPicUrl))
                            {
                                continue; //过滤空数据
                            }

                            item.Id     = Guid.NewGuid().ToString();
                            item.MeetId = meet.Id;
                            switch (item.MeetPicType)
                            {
                            case "L":
                                meet.MeetCoverBig = item.Id;
                                break;

                            case "S":
                                meet.MeetCoverSmall = item.Id;
                                break;
                            }
                            item.CreateTime = DateTime.Now;
                            item.CreateUser = "******";
                            _rep.Insert(item);
                            _rep.SaveChanges();
                        }
                    }

                    _rep.Update(meet);
                    _rep.SaveChanges();

                    //添加会议资料
                    if (meetInfoView.Files != null)
                    {
                        foreach (var item in meetInfoView.Files)
                        {
                            item.Id         = Guid.NewGuid().ToString();
                            item.MeetId     = meet.Id;
                            item.CreateTime = DateTime.Now;
                            item.CreateUser = "******";
                            _rep.Insert(item);
                            _rep.SaveChanges();
                        }
                    }

                    //添加讲者
                    if (meetInfoView.Speakers != null)
                    {
                        foreach (var item in meetInfoView.Speakers)
                        {
                            item.Id         = Guid.NewGuid().ToString();
                            item.MeetId     = meet.Id;
                            item.CreateTime = DateTime.Now;
                            item.CreateUser = "******";
                            _rep.Insert(item);
                            _rep.SaveChanges();
                        }
                    }

                    //添加会议日程
                    if (meetInfoView.Schedules != null)
                    {
                        DateTime?startTime = null;
                        DateTime?endTime   = null;
                        foreach (var item in meetInfoView.Schedules)
                        {
                            var scheduledate = item.ScheduleDate;
                            scheduledate = Convert.ToDateTime(scheduledate).ToString("yyyy-MM-dd");

                            MeetSchedule Schedule;
                            foreach (var val in item.ScheduleViews)
                            {
                                if (meetInfoView.Speakers == null || meetInfoView.Speakers.Count() == 0)
                                {
                                    val.Speaker.Id         = Guid.NewGuid().ToString();
                                    val.Speaker.MeetId     = meet.Id;
                                    val.Speaker.CreateTime = DateTime.Now;
                                    val.Speaker.CreateUser = "******";
                                    _rep.Insert(val.Speaker);
                                    _rep.SaveChanges();
                                }
                                else
                                {
                                    val.Speaker.Id = meetInfoView.Speakers.First(s => s.SpeakerName == val.Speaker.SpeakerName)?.Id;
                                }

                                Schedule                 = new MeetSchedule();
                                Schedule.Id              = Guid.NewGuid().ToString();
                                Schedule.MeetId          = meet.Id;
                                Schedule.MeetSpeakerId   = val.Speaker.Id;
                                Schedule.ScheduleStart   = DateTime.Parse(scheduledate + " " + val.Schedule.ScheduleStart);
                                Schedule.ScheduleEnd     = DateTime.Parse(scheduledate + " " + val.Schedule.ScheduleEnd);
                                Schedule.ScheduleContent = val.Schedule.ScheduleContent;


                                Schedule.Sort    = val.Schedule.Sort;
                                Schedule.AMPM    = val.Schedule.AMPM;
                                Schedule.Topic   = val.Schedule.Topic;
                                Schedule.Speaker = val.Schedule.Speaker;

                                Schedule.CreateTime = DateTime.Now;
                                Schedule.CreateUser = "******";
                                Schedule.Remark     = scheduledate;

                                if (!startTime.HasValue || Schedule.ScheduleStart < startTime)
                                {
                                    startTime = Schedule.ScheduleStart;
                                }
                                if (!endTime.HasValue || Schedule.ScheduleEnd > endTime)
                                {
                                    endTime = Schedule.ScheduleEnd;
                                }

                                _rep.Insert(Schedule);
                            }
                        }
                        if (startTime.HasValue)
                        {
                            meet.MeetStartTime = startTime;
                        }
                        if (endTime.HasValue)
                        {
                            meet.MeetEndTime = endTime;
                        }
                        _rep.Update(meet);
                        _rep.SaveChanges();
                    }

                    //添加会议和产品和科室关系表
                    if (meetInfoView.ProductAndDeps != null &&
                        meetInfoView.ProductAndDeps.BuNameList != null &&
                        meetInfoView.ProductAndDeps.Products != null &&
                        meetInfoView.ProductAndDeps.Departments != null)
                    {
                        MeetAndProAndDepRelation meetAndProAndDep;
                        foreach (var buName in meetInfoView.ProductAndDeps.BuNameList)
                        {
                            foreach (var pro in meetInfoView.ProductAndDeps.Products)
                            {
                                foreach (var dep in meetInfoView.ProductAndDeps.Departments)
                                {
                                    meetAndProAndDep              = new MeetAndProAndDepRelation();
                                    meetAndProAndDep.Id           = Guid.NewGuid().ToString();
                                    meetAndProAndDep.MeetId       = meet.Id;
                                    meetAndProAndDep.ProductId    = pro.ProId;
                                    meetAndProAndDep.DepartmentId = dep.DeptId;
                                    meetAndProAndDep.BuName       = buName;
                                    meetAndProAndDep.CreateTime   = DateTime.Now;
                                    meetAndProAndDep.CreateUser   = "******";
                                    _rep.Insert(meetAndProAndDep);
                                }
                            }
                        }
                        _rep.SaveChanges();
                    }

                    //会议标识
                    if (meetInfoView.Tags != null)
                    {
                        MeetTag meetTag;
                        foreach (var item in meetInfoView.Tags)
                        {
                            meetTag            = new MeetTag();
                            meetTag.Id         = Guid.NewGuid().ToString();
                            meetTag.MeetId     = meet.Id;
                            meetTag.TagId      = item.Id;
                            meetTag.CreateTime = DateTime.Now;
                            meetTag.CreateUser = "******";
                            meetTag.Remark     = "第三方调用";
                            _rep.Insert(meetTag);
                        }
                        _rep.SaveChanges();
                    }
                    tran.Commit();
                    rvm.Msg     = "success";
                    rvm.Success = true;
                    rvm.Result  = new
                    {
                        meet = meet ?? meetInfoView.Meet
                    };
                }
                catch (Exception ex)
                {
                    tran.Rollback();
                    rvm.Msg     = ex.Message;
                    rvm.Success = false;
                }
            }
            return(rvm);
        }
        /// <summary>
        /// 从其它会议导入题目或者从题库中选择题目
        /// </summary>
        /// <param name="meetQAs"></param>
        /// <returns></returns>
        public ReturnValueModel AddOrUpdateMeetQA(MeetInfoSubscribeDto dto, string body)
        {
            ReturnValueModel rvm = new ReturnValueModel();
            var meetQAs          = RongJsonUtil.JsonStringToObj <MeetQARelationViewModel>(body);

            string loginSecretkey = ConfigurationManager.AppSettings["ThirdPartyKey"];
            string signature      = RongHttpClient.GetHash(loginSecretkey + dto.Nonce + dto.SignTimestamp);

            if (signature.ToUpper() != dto.Signature.ToUpper())
            {
                var massage = string.Format("Error:input={0}==>service={1},{2}", dto.Signature, signature, RongJsonUtil.ObjToJsonString(dto));
                LoggerHelper.Error(massage);
                rvm.Success = false;
                rvm.Msg     = massage;
                return(rvm);
            }
            IEnumerable <string> questionIdList;
            IEnumerable <MeetQAContentViewModel> listNew;

            if (string.IsNullOrEmpty(meetQAs?.MeetId))
            {
                rvm.Msg     = "The parameter 'MeetId' is required.";
                rvm.Success = false;
                return(rvm);
            }

            //如果来源会议Id不为空,说明是过往会议的问卷添加
            if (!string.IsNullOrEmpty(meetQAs?.FromMeetId))
            {
                if (!meetQAs.FromQAType.HasValue)
                {
                    rvm.Msg     = "The parameter 'FromQAType' is required if exsits 'FromMeetId'.";
                    rvm.Success = false;
                    return(rvm);
                }
                questionIdList = _rep.Where <MeetQAModel>(s => s.MeetId == meetQAs.FromMeetId && s.QAType == meetQAs.FromQAType).Select(s => s.QuestionId).Distinct();
            }
            else if (meetQAs?.meetQAs != null)
            {
                questionIdList = meetQAs.meetQAs.Select(s => s?.QuestionId).Distinct();
            }
            else
            {
                rvm.Msg     = "One of parameter 'meetQAs' or 'FromMeetId' is required.";
                rvm.Success = false;
                return(rvm);
            }

            questionIdList = questionIdList.ToList();

            listNew = from b in _rep.Where <QuestionModel>(s => s.IsDeleted != 1 && questionIdList.Contains(s.Id))
                      join c in _rep.Where <AnswerModel>(s => s.IsDeleted != 1) on b.Id equals c.QuestionId into bc
                      from c1 in bc.DefaultIfEmpty()
                      group c1 by b into g1
                      select new MeetQAContentViewModel
            {
                Question = g1.Key,
                Answers  = from v1 in g1
                           where v1 != null
                           select v1
            };

            listNew = listNew.ToList();

            using (var tran = _rep.Database.BeginTransaction())
            {
                try
                {
                    if (listNew.Count() > 0)
                    {
                        //_rep.DeleteList(list);

                        foreach (var item in listNew)
                        {
                            var question = item.Question;
                            if (question.MeetId != meetQAs.MeetId)
                            {
                                //题库或者其他会议的题目,需要复制
                                question = new QuestionModel
                                {
                                    Id              = Guid.NewGuid().ToString(),
                                    MeetId          = meetQAs.MeetId,
                                    QuestionType    = item.Question.QuestionType,
                                    QuestionContent = item.Question.QuestionContent,
                                    QuestionOfA     = item.Question.QuestionOfA
                                };
                                _rep.Insert(question);

                                foreach (var a in item.Answers)
                                {
                                    var answer = new AnswerModel
                                    {
                                        Id            = Guid.NewGuid().ToString(),
                                        QuestionId    = question.Id,
                                        AnswerContent = a.AnswerContent,
                                        Sort          = a.Sort,
                                        IsRight       = a.IsRight
                                    };
                                    _rep.Insert(answer);
                                }
                            }
                            if (question.MeetId == meetQAs.MeetId && meetQAs.FromQAType != meetQAs.QAType)
                            {
                                //题库或者其他会议的题目,需要复制
                                question = new QuestionModel
                                {
                                    Id              = Guid.NewGuid().ToString(),
                                    MeetId          = meetQAs.MeetId,
                                    QuestionType    = item.Question.QuestionType,
                                    QuestionContent = item.Question.QuestionContent,
                                    QuestionOfA     = item.Question.QuestionOfA
                                };
                                _rep.Insert(question);

                                foreach (var a in item.Answers)
                                {
                                    var answer = new AnswerModel
                                    {
                                        Id            = Guid.NewGuid().ToString(),
                                        QuestionId    = question.Id,
                                        AnswerContent = a.AnswerContent,
                                        Sort          = a.Sort,
                                        IsRight       = a.IsRight
                                    };
                                    _rep.Insert(answer);
                                }
                            }

                            var meetQA = new MeetQAModel
                            {
                                Id         = Guid.NewGuid().ToString(),
                                MeetId     = meetQAs.MeetId,
                                QAType     = meetQAs.QAType,
                                QuestionId = question.Id,
                                CreateTime = DateTime.Now,
                                CreateUser = "******"
                            };
                            _rep.Insert(meetQA);
                        }
                        _rep.SaveChanges();
                    }

                    tran.Commit();
                    rvm.Msg     = "success";
                    rvm.Success = true;
                }
                catch (Exception e)
                {
                    tran.Rollback();
                    rvm.Msg     = "fail";
                    rvm.Success = false;
                }
            }

            return(rvm);
        }
        /// <summary>
        /// 获取问卷列表
        /// </summary>
        /// <param name="rowNum"></param>
        /// <returns></returns>
        public ReturnValueModel GetQuestionList(MeetInfoSubscribeDto dto, string body)
        {
            ReturnValueModel rvm = new ReturnValueModel();
            var rowNum           = RongJsonUtil.JsonStringToObj <RowNumModel <QuestionModel> >(body);

            string loginSecretkey = ConfigurationManager.AppSettings["ThirdPartyKey"];
            string signature      = RongHttpClient.GetHash(loginSecretkey + dto.Nonce + dto.SignTimestamp);

            if (signature.ToUpper() != dto.Signature.ToUpper())
            {
                var massage = string.Format("Error:input={0}==>service={1},{2}", dto.Signature, signature, RongJsonUtil.ObjToJsonString(dto));
                LoggerHelper.Error(massage);
                rvm.Success = false;
                rvm.Msg     = massage;
                return(rvm);
            }

            var list = _rep.Where <QuestionModel>(s => s.IsDeleted != 1 && string.IsNullOrEmpty(s.MeetId)).Where(rowNum.SearchParams);

            var total = list.Count();
            var rows  = list.OrderByDescending(s => s.CreateTime).ToPaginationList(rowNum.PageIndex, rowNum.PageSize);

            rvm.Msg     = "success";
            rvm.Success = true;
            rvm.Result  = new
            {
                total = total,
                rows  = rows
            };

            return(rvm);
        }
        /// <summary>
        /// 获取会议列表,用于选择过往会议的问卷
        /// </summary>
        /// <param name="workUser"></param>
        /// <returns></returns>
        public ReturnValueModel GetMeetListOfQA(MeetInfoSubscribeDto dto, string body)
        {
            ReturnValueModel rvm = new ReturnValueModel();
            var rowNum           = RongJsonUtil.JsonStringToObj <RowNumModel <MeetSearchViewModel> >(body);

            string loginSecretkey = ConfigurationManager.AppSettings["ThirdPartyKey"];
            string signature      = RongHttpClient.GetHash(loginSecretkey + dto.Nonce + dto.SignTimestamp);

            if (signature.ToUpper() != dto.Signature.ToUpper())
            {
                var massage = string.Format("Error:input={0}==>service={1},{2}", dto.Signature, signature, RongJsonUtil.ObjToJsonString(dto));
                LoggerHelper.Error(massage);
                rvm.Success = false;
                rvm.Msg     = massage;
                return(rvm);
            }
            var listQA = from A in _rep.Where <MeetQAModel>(s => s.IsDeleted != 1)
                         group A by new { A.MeetId, A.QAType } into g1
            select g1.Key;

            var list = from A in _rep.Where <MeetInfo>(s => s.IsCompleted == EnumComplete.Approved)
                       join B in listQA on A.Id equals B.MeetId
                       group B by A into g1
                       select new
            {
                Meet        = g1.Key,
                IsMeetEnd   = DateTime.Now > g1.Key.MeetEndTime ? 2 : DateTime.Now < g1.Key.MeetStartTime ? 0 : 1,
                HasQABefore = g1.Any(s => s.QAType == 1),            //是否有会前问卷
                HasQAAfter  = g1.Any(s => s.QAType == 2)             //是否有会后问卷
            };


            if (rowNum?.SearchParams != null)
            {
                if (rowNum.SearchParams.Meet != null)
                {
                    //会议标题
                    if (!string.IsNullOrEmpty(rowNum.SearchParams.Meet.MeetTitle))
                    {
                        list = list.Where(s => s.Meet.MeetTitle.Contains(rowNum.SearchParams.Meet.MeetTitle));
                    }
                    //会议类型
                    if (rowNum.SearchParams.Meet.MeetType != null && rowNum.SearchParams.Meet.MeetType != 0)
                    {
                        list = list.Where(s => s.Meet.MeetType == rowNum.SearchParams.Meet.MeetType);
                    }
                }

                //会议开始时间结束时间
                if (rowNum.SearchParams.Meet_Start.HasValue && rowNum.SearchParams.Meet_End.HasValue)
                {
                    DateTime startTime = rowNum.SearchParams.Meet_Start.Value;
                    DateTime endTime   = rowNum.SearchParams.Meet_End.Value.AddDays(1);

                    list = list.Where(s => s.Meet.MeetStartTime < endTime && s.Meet.MeetEndTime >= startTime);
                }
            }

            var total = list.Count();
            var rows  = list.OrderByDescending(s => s.Meet.CreateTime).ToPaginationList(rowNum?.PageIndex, rowNum?.PageSize).ToList();

            rvm.Msg     = "success";
            rvm.Success = true;
            rvm.Result  = new
            {
                total,
                rows
            };
            return(rvm);
        }
        /// <summary>
        /// 获取BU
        /// </summary>
        /// <param name="workUser"></param>
        /// <returns></returns>
        public ReturnValueModel GetBu(MeetInfoSubscribeDto dto)
        {
            ReturnValueModel rvm            = new ReturnValueModel();
            string           loginSecretkey = ConfigurationManager.AppSettings["ThirdPartyKey"];
            string           signature      = RongHttpClient.GetHash(loginSecretkey + dto.Nonce + dto.SignTimestamp);

            if (signature.ToUpper() != dto.Signature.ToUpper())
            {
                var massage = string.Format("Error:input={0}==>service={1},{2}", dto.Signature, signature, RongJsonUtil.ObjToJsonString(dto));
                LoggerHelper.Error(massage);
                rvm.Success = false;
                rvm.Msg     = massage;
                return(rvm);
            }

            var pros  = _rep.Table <ProductInfo>();
            var depts = _rep.Table <DepartmentInfo>();
            var list  = from a in _rep.Table <BuProDeptRel>()
                        group a by a.BuName
                        into g1
                        select new
            {
                BuName  = g1.Key,
                DeptPro = from b in g1
                          join c in pros on b.ProId equals c.Id
                          where b.BuName == g1.Key
                          group b by c into g2
                          select new
                {
                    ProId   = g2.Key.Id,
                    ProName = g2.Key.ProductName,
                    ProUrl  = g2.Key.ProductUrl,
                    Depts   = from d in g2
                              join e in depts on d.DeptId equals e.Id
                              select new
                    {
                        e.DepartmentName,
                        e.DepartmentType,
                        e.Id
                    }
                }
            };

            rvm.Success = true;
            rvm.Msg     = "";
            rvm.Result  = new
            {
                list
            };
            return(rvm);
        }