/// <summary> /// 修改用户,只修改基本信息 /// </summary> /// <returns></returns> public ActionResult NimUserUpdateInfo(Int32 id) { NimUser NimUser = entities.NimUser.Find(id); ViewData.Model = NimUser.NimUserEx; return(View()); }
public ActionResult CheckPermission(Int32 folderId, Int32 userId) { Folder folder = entities.Folder.Find(folderId); if (folder.Member.Any()) { DateTime now = DateTime.Now; var vfmu = entities.View_Folder_Member_User.Where(o => o.FolderId == folderId && o.UserId == userId && o.From < now && now < o.To).ToList(); NimUser user = entities.NimUser.Find(userId); if (user != null && user.Category == 1) { return(Json(new { code = 200, desc = "拥有权限", info = vfmu.Select(o => new { o.MemberId, o.FolderId, o.UserId }) })); } if (vfmu.Count > 0) { return(Json(new { code = 200, desc = "拥有权限", info = vfmu.Select(o => new { o.MemberId, o.FolderId, o.UserId }) })); } else { return(Json(new { code = 201, desc = "没有权限" })); } } else { return(Json(new { code = 200, desc = "不需要权限" })); } }
public ActionResult Recharge(Int32 id) { NimUser user = entities.NimUser.Find(id); ViewData.Model = user; return(View()); }
public ActionResult Dequeue(Int32 id) { NimUser user = entities.NimUser.Find(id); if (user == null) { return(Json(new { code = 201, desc = "用户不存在" })); } if (user.Category != 1) { return(Json(new { code = 202, desc = "用户类型错误" })); } //Queue<> user.IsOnline = 0; user.IsEnable = 0; //user.Enqueue = DateTime.Now.Ticks; // user.Refresh = DateTime.Now.Ticks; try { entities.SaveChanges(); return(Refresh(id, 0, 25)); } catch (Exception ex) { return(Json(new { code = 203, desc = ex.Message })); } }
private static void NewMethod3() { StudyOnlineEntities entities = new StudyOnlineEntities(); DateTime now = DateTime.Now; for (int i = 1; i <= 150; i++) { //创建帐号 NimUser nimuser = new NimUser() { Accid = Guid.NewGuid().ToString().Replace("-", ""), Category = 0, IsActive = 1, IsEnable = 1, Username = String.Format("CFFD{0:D3}", i), Password = EncryptionUtil.Md5Encode("00000000"), CreateDate = now, NimUserEx = new NimUserEx() { Coins = 600 } }; //同步云信 String json = NimUtil.UserCreate(nimuser.Accid, null, null, null); Answer a = JsonConvert.DeserializeObject <Answer>(json); if (a.code == 200) { nimuser.Token = a.info.token; } //保存数据 entities.NimUser.Add(nimuser); Console.WriteLine("帐号:{0},密码:{2},学币:{1},accid={3},token={4}", nimuser.Username, nimuser.NimUserEx.Coins, nimuser.Password, nimuser.Accid, nimuser.Token); } entities.SaveChanges(); }
public ActionResult Refresh(Int32 id, Int32 skip, Int32 take) { var all = entities.NimUser.Where(o => o.Category == 1 && o.IsOnline == 1 && o.IsEnable == 1).OrderBy(o => o.Id); Int32 Index = -1; NimUser k = all.FirstOrDefault(o => o.Id == id); if (k != null) { Index = all.Count(); } return(Json(new { code = 200, desc = "查询成功", info = new { Index, Count = all.Count(), Current = k == null ? null : new { k.Id, k.Username, k.IsOnline, k.IsEnable }, Teacher = all.Skip(skip).Take(take).Select(o => new { o.Id, o.Username, o.IsOnline, o.IsEnable }) } })); }
public ActionResult GetListByUserId(Int32 userId, Int32?skip, Int32?take, DateTime?from, DateTime?to) { NimUser user = entities.NimUser.Find(userId); if (user == null) { return(Json(new { code = 201, desc = "用户不存在" })); } //区分用户类型,如果是学生,则取学生的,如果是老师,则取老师的 Expression <Func <View_Chat_user, bool> > predicateCategory = o => true; if (user.Category == 0) { predicateCategory = o => o.Source == user.Id; } else if (user.Category == 1) { predicateCategory = o => o.Target == user.Id; } Expression <Func <View_Chat_user, bool> > predicateFrom = o => true; if (from != null) { predicateFrom = o => from < o.Start; } Expression <Func <View_Chat_user, bool> > predicateTo = o => true; if (to != null) { predicateTo = o => o.Start < to; } var query = entities.View_Chat_user.Where(o => o.ChatType == 1 && o.BalanceS == 1).Where(predicateCategory).Where(predicateFrom).Where(predicateTo).OrderByDescending(o => o.Start); Int32 count = query.Count(); Int32 duration = query.Sum(o => o.Duration) ?? 0; var temp = query.Skip(skip ?? 0).Take(take ?? Int32.MaxValue).ToList().Select(o => new { o.Id, o.Source, o.Student, o.Target, o.Teacher, UtcStart = o.Start.Value.ToUniversalTime().ToString("u"), UtcFinish = o.Finish.Value.ToUniversalTime().ToString("u"), o.Start, o.Finish, o.ChatId, o.ChatType, o.Duration, o.BalanceS, o.Coins, Themes = entities.LogTheme.Where(t => t.ChatId == o.ChatId).Select(t => new { t.Theme.Name, Id = t.ThemeId }) }); return(new DateTimeSEJsonResult(new { code = 200, desc = "查询成功", info = new { duration, count, from, to, list = temp } })); }
public ActionResult GetByUserIdAndYearMonth(Int32?id, Int32?skip, Int32?take, DateTime?from, DateTime?to) { NimUser user = entities.NimUser.Find(id); if (user == null) { return(Json(new { code = 201, desc = "指定用户名不存在" })); } Expression <Func <CallLog, bool> > userPredicate = o => user.Category == 0 ? o.Source == id : o.Target == id; Expression <Func <CallLog, bool> > rangePredicate = o => from < o.Start && o.Start <= to; List <CallLog> chats = entities.CallLog.Where(o => o.Start != null && o.Finish != null).Where(userPredicate).Where(rangePredicate).OrderByDescending(o => o.Start).Skip(skip ?? 0).Take(take ?? pageSize).ToList(); var tha = chats.Where(o => o.Duration == null); if (tha.Any()) { foreach (var item in tha) { item.Duration = (Int32)((item.Finish - item.Start).Value.TotalMinutes + 0.5); } try { entities.SaveChanges(); } catch (Exception ex) { logger.Error(ex); } } return(Json(new { code = 200, desc = "查询成功", info = chats.Select(o => new { Start = o.Start.Value.ToString("yyyy-MM-dd HH:mm:ss"), Finish = o.Finish.Value.ToString("yyyy-MM-dd HH:mm:ss"), Duration = (Int32)((o.Finish - o.Start).Value.TotalMinutes + 0.5), Teacher = new { o.NimUser1.Id, Nickname = o.NimUser1.NimUserEx.Name ?? "", o.NimUser1.Username }, Student = new { o.NimUser.Id, Nickname = o.NimUser.NimUserEx.Name ?? "", o.NimUser.Username }, Themes = entities.LogTheme.Where(i => i.ChatId == o.ChatId).Select(i => new { i.Theme.Name }), o.Score, o.Coins }) })); }
/// <summary> /// 初始化消息列表 /// </summary> /// <param name="myId">己方云信ID</param> /// <param name="user">对方云信名片</param> public void init(string myId, NimUser user) { this.myId = myId; target = user; mlcMessage.init(user); mmeInput.Select(); }
public ActionResult GetListByFolderId(Int32 folderId, Int32?userId, Int32?skip, Int32?take) { Folder folder = entities.Folder.Find(folderId); if (folder == null) { return(Json(new { code = 202, desc = "指定文件夹不存在" })); } var temp = folder.Document.Where(o => o.AuditCase == AuditCase.审核).OrderBy(o => o.Sort).ThenByDescending(o => o.AuditDate).Skip(skip ?? 0).Take(take ?? Int32.MaxValue).Select(o => new { o.Id, o.Title, o.TitleTwo, TitleCn = o.Title, TitleEn = o.TitleTwo, o.TitlePy, o.TitleSubCn, o.TitleSubEn, o.TitleSubPy, o.Category, o.SoundPath, o.Duration, o.Length, o.LengthString, o.Contents, o.FolderId, o.LevelId, AuditDate = (o.AuditDate.HasValue ? o.AuditDate.Value.ToString("yyyy-MM-dd HH:mm:ss") : null), Date = (o.AuditDate.HasValue ? o.AuditDate.Value.ToString("yyyy-MM-dd") : null), Size = o.Length, Time = o.Duration }); if (folder.Member.Any()) { DateTime now = DateTime.Now; var vfmu = entities.View_Folder_Member_User.Where(o => o.FolderId == folderId && o.UserId == userId && o.From < now && now < o.To).ToList(); NimUser nimuser = entities.NimUser.Find(userId); if (vfmu.Count > 0 || (nimuser != null && nimuser.Category == 1)) { return(Json(new { code = 200, desc = "查询成功", info = temp.ToList() })); } else { return(Json(new { code = 201, desc = "没有权限" })); } } return(Json(new { code = 200, desc = "查询成功", info = temp.ToList() })); }
public ActionResult NimUserUpdate(NimUser nimUser) { NimUser model = entities.NimUser.Find(nimUser.Id); int exist = entities.NimUser.Where(o => o.Id != nimUser.Id && o.Username == nimUser.Username).Count(); if (exist > 0) { return(Json(new { statusCode = "300", message = "帐号重复" })); } model.Username = nimUser.Username; model.Password = ChineseChat.Library.EncryptionUtil.Md5Encode(nimUser.Password);//密码加密 model.Category = nimUser.Category; entities.SaveChanges(); var data = new { statusCode = "200", message = "操作成功", navTabId = "AdminNimUserIndex", rel = "", callbackType = "closeCurrent", forwardUrl = "" }; return(Json(data)); }
public ActionResult GetStudentByUsername(String username, Int32 skip, Int32 take) { try { NimUser nimuser = entities.NimUser.Single(o => o.Username == username); var temp = entities.CallLog.Where(o => o.Source == nimuser.Id && o.Start != null && o.Finish != null).OrderByDescending(o => o.Start).Skip(skip).Take(take).ToList(); return(Json(new { code = 200, desc = "查询成功", info = temp.Select(o => new { o.Target, Start = o.Start.Value.ToString("yyyy-MM-dd HH:mm:ss"), Finish = o.Finish.Value.ToString("yyyy-MM-dd HH:mm:ss"), (o.Finish - o.Start).Value.TotalSeconds, Duration = (o.Finish - o.Start).Value.ToString(@"hh\:mm\:ss"), Teacher = new { o.NimUser1.Id, Nickname = o.NimUser1.NimUserEx.Name, o.NimUser1.Username }, Student = new { o.NimUser.Id, Nickname = o.NimUser.NimUserEx.Name, o.NimUser.Username }, Themes = entities.LogTheme.Where(i => i.ChatId == o.ChatId).Select(i => new { i.Theme.Name }), o.Score, o.Coins }) })); } catch (Exception ex) { return(Json(new { code = 201, desc = ex.Message })); } }
public void Execute(IJobExecutionContext context) { log.Info("now sync teacher"); try { StudyOnlineEntities entities = new StudyOnlineEntities(); List <Teacherreginfo> teachers = entities.Teacherreginfo.Where(o => o.IsEnable == 1 && o.IsSync != 1).ToList(); foreach (var item in teachers) { //先创建云信帐号 //同步云信帐号系统 String json = NimUtil.UserCreate(Guid.NewGuid().ToString().Replace("-", ""), null, null, HttpUtility.UrlEncode(item.Truename)); Answer a = JsonConvert.DeserializeObject <Answer>(json); if (a.code == 200) { //修改数据库状态 item.IsSync = 1; //创建新用户 NimUser nimUser = new NimUser() { Username = item.Username, Password = item.Password, Category = 1, Accid = a.info.accid, Token = a.info.token, CreateDate = DateTime.Now, IsActive = 1, IsOnline = 0 }; nimUser.NimUserEx = new NimUserEx() { Email = item.Username, Mobile = item.Phonenumber, Spoken = item.ForeignLanguages, School = item.Education, About = item.Note }; entities.NimUser.Add(nimUser); } log.Info(String.Format("Syncint the teacher:{0}", item.Username)); } entities.SaveChanges(); } catch (Exception) { log.Info("sync failure"); } }
public ActionResult GetByUsername(String username, Int32 type, Int32 skip, Int32 take) { NimUser user = entities.NimUser.Single(o => o.Username == username); Expression <Func <CallLog, bool> > predicate = o => (type == 0 ? o.Source == user.Id : o.Target == user.Id); var temp = entities.CallLog.Where(o => o.Start != null && o.Finish != null).Where(predicate).OrderByDescending(o => o.Start).Skip(skip).Take(take).ToList(); temp.Select(o => o.Coins).Sum(); return(Json(new { code = 200, desc = "查询成功", info = temp.Select(o => new { UtcStart = o.Start.Value.ToUniversalTime().ToString("u"), UtcFinish = o.Finish.Value.ToUniversalTime().ToString("u"), Start = o.Start.Value.ToString("yyyy-MM-dd HH:mm:ss"), Finish = o.Finish.Value.ToString("yyyy-MM-dd HH:mm:ss"), (o.Finish - o.Start).Value.TotalSeconds, Duration = (Int32)((o.Finish - o.Start).Value.TotalMinutes + 0.5), Teacher = new { o.NimUser1.Id, Nickname = o.NimUser1.NimUserEx.Name ?? "", o.NimUser1.Username }, Student = new { o.NimUser.Id, Nickname = o.NimUser.NimUserEx.Name ?? "", o.NimUser.Username }, Themes = entities.LogTheme.Where(i => i.ChatId == o.ChatId).Select(i => new { i.Theme.Name }), o.Score, o.Coins }) })); }
public ActionResult Select(Int32?userId) { //默认提供的是没有任何机构关联的价格表 var temp = entities.Product.Where(o => o.Enabled == 1 && !o.Member.Any()).OrderBy(o => o.Sort).ToList(); //20170210处理机构相关价格表问题 //由于...默认每个用户只能属于一个机构或会员单位,所以如果用户设定了两个机构那么,该价格表就有可能查询不出来任何东西 //如果用户没有输入userId,返回默认的价格表 //如果用户所属的机构没有价格表,返回默认的价格表 //如果用户所属的机构有多个,返回第一个机构的价格表 if (userId.HasValue && userId.Value > 0) { NimUser user = entities.NimUser.Find(userId); if (user != null && user.Member_User.Any()) { Member member = user.Member_User.FirstOrDefault().Member; if (member.Product.Any()) { temp = member.Product.Where(o => o.Enabled == 1).OrderBy(o => o.Sort).ToList(); } } } return(Json(new { code = 200, desc = "查询成功", info = temp.Select(o => new { o.Coin, o.USD, o.CNY, o.Hour }) })); }
public ActionResult Finish(String callId, Int64?chatId, Int32?userId) { CallLog chat = null; if (!string.IsNullOrEmpty(callId)) { chat = entities.CallLog.Find(callId); } if (chat == null) { chat = entities.CallLog.SingleOrDefault(o => o.ChatId == chatId); } if (chat == null) { return(Json(new { code = 2001, desc = "记录为空" })); } if (chat.Finish == null) { chat.Finish = DateTime.Now; } //扣费情况,一分钟一个币,如果大于等于30秒,算一分钟 //TimeSpan s = new TimeSpan(0, 0, 0, 29,999); //(Int32)(s.TotalMinutes + 0.5)=0; //TimeSpan s = new TimeSpan(0, 0, 0, 29,1000); //(Int32)(s.TotalMinutes + 0.5)=1; var span = chat.Finish - chat.Start; int duration = ((Int32)(span.Value.TotalMinutes + 0.5));//29秒不算,但是如果满30秒,当一分钟算,如:5:30,按6MIN算 int coins = duration * Constants.Price; //学生和老师 NimUser student = entities.NimUser.Find(chat.Source); NimUser teacher = entities.NimUser.Find(chat.Target); ////学生扣除学币 //if (chat.IsBalance != 1) //{ // student.NimUserEx.Coins -= coins;//从学生的帐号中去掉学币数 // chat.Coins = coins;//把这次的学币说写入聊天记录 // chat.IsBalance = 1;//平衡学币 // chat.Duration = duration;//这个chat的时长(单位分钟,满30秒算1分钟) // chat.Price = Constants.Price;//每分钟单价 // chat.BalanceS = 1;//平衡学生学币 // chat.BalanceT = 0;//统计老师课时 //} //记录该通话的结束时间和结束人员 if (userId != null && chat.ChatId.HasValue) { ChatData data = new ChatData() { Id = Guid.NewGuid().ToString().Replace("-", ""), ChatId = chat.ChatId.Value, UserId = userId.Value, Type = (Int32)ChatType.通话结束, Time = DateTime.Now }; entities.ChatData.Add(data); } //只有通话记录没有平衡时,并且当前用户不是教师的时候才计算(包括学生和userId为空的用户) if (chat.BalanceS != 1 && chat.Target != userId) { logger.Debug(String.Format("通话结束:chatId={0},balance={1},coins={2} userId={3}", chat.ChatId, chat.BalanceS, chat.NimUser.NimUserEx.Coins, userId)); Balance(chat); entities.SaveChanges(); } //老师重新入队 teacher.IsEnable = 1; teacher.IsOnline = 1; teacher.Enqueue = DateTime.Now; teacher.Refresh = DateTime.Now; //老师计算总课时,当月课时 DateTime from = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); DateTime to = from.AddMonths(1); var c = entities.CallLog.Where(o => o.Target == teacher.Id && o.Start != null && o.Finish != null).Where(o => from < o.Start && o.Start <= to).Where(o => o.Id != callId); Int32 month = from.Month; Int32 d = (c.Sum(o => o.Duration) ?? 0) + duration; Int32 count = c.Count() + 1; try { entities.SaveChanges(); return(Json(new { code = 200, desc = "记录成功", info = new { chat.Id, Student = new { student.Id, student.Username, Nickname = student.NimUserEx.Name, student.NimUserEx.Coins }, Teacher = new { teacher.Id, teacher.Username, Nickname = teacher.NimUserEx.Name, Summary = new { month, count, duration = d } } , chat.Price , chat.Duration //, //chat.Source, //chat.Target, //chat.Coins //, //span.Value.TotalSeconds, //teacher.IsEnable, //teacher.IsOnline, //teacher.NimUserEx.Name } })); } catch (Exception ex) { logger.Debug(ex.StackTrace); return(Json(new { code = 201, desc = ex.StackTrace })); } }
public static void Create(NimUser nimuser) { throw new NotImplementedException(); }
public ActionResult VerifyPayPal(String orderId, String paymentId) { Orders order = entities.Orders.Find(orderId); if (order == null) { return(Json(new { code = 201, desc = "指定订单不存在" })); } NimUser user = entities.NimUser.SingleOrDefault(o => o.Username == order.UserName); //OAuthTokenCredential tokenCredential = new OAuthTokenCredential("<CLIENT_ID>", "<CLIENT_SECRET>"); //string accessToken = tokenCredential.GetAccessToken(); // ### Api Context // Pass in a `APIContext` object to authenticate // the call and to send a unique request id // (that ensures idempotency). The SDK generates // a request id if you do not pass one explicitly. // See [Configuration.cs] to know more about APIContext. var apiContext = Configuration.GetAPIContext(); Payment payment = Payment.Get(apiContext, paymentId); //You should verify that the Payment: //Is approved ("state": "approved"). //Contains a Transaction with: //An Amount with total and currency values that match your expectation. //A Sale that is completed (in related_resources, with "state": "completed"). if (payment.state != "approved") { return(Json(new { code = 201, desc = "交易记录验证不成功" })); } //由手机端传过来的信息,如支付总额,货币 String clientAmount = order.Amount + ""; String clientCurrency = order.Currency + ""; Transaction d = payment.transactions[0]; String serverAmount = d.amount.total; String serverCurrentcy = d.amount.currency; String saleState = d.related_resources[0].sale.state; //插入数据库 //验证交易总额 if (clientAmount != serverAmount) { return(Json(new { code = 201, desc = "交易总额验证不成功" })); } //验证货币类型 if (clientCurrency != serverCurrentcy) { return(Json(new { code = 201, desc = "货币类型验证不成功" })); } //验证交易状态 if (saleState != "completed") { return(Json(new { code = 201, desc = "交易状态验证不成功" })); } //保存数据 order.TradeNo = paymentId; order.TradeStatus = "completed"; //平衡学币 user.NimUserEx.Coins = order.Coin + (user.NimUserEx.Coins ?? 0); order.IsBalance = 1; entities.SaveChanges(); return(Json(new { code = 200, desc = "支付成功", info = new { user.Username, user.NimUserEx.Name, user.NimUserEx.Coins } })); }
public ActionResult VerifyAliPay(String orderId, String result) { Orders order = entities.Orders.Find(orderId); if (order == null) { return(Json(new { code = 201, desc = "指定订单不存在" })); } NimUser user = entities.NimUser.Single(o => o.Username == order.UserName); //如果异步通知成功,直接返回 if (order.TradeStatus == "TRADE_SUCCESS" || order.TradeStatus == "TRADE_FINISHED") { //平衡学币 user.NimUserEx.Coins = order.Coin + (user.NimUserEx.Coins ?? 0); order.IsBalance = 1; entities.SaveChanges(); return(Json(new { code = 200, desc = "支付成功", info = new { user.Username, Nickname = user.NimUserEx.Name, user.NimUserEx.Coins } })); } //如果服务端没有收到异步通知的时候,则要验证客户端发过来的同步通知(https://doc.open.alipay.com/doc2/detail.htm?spm=0.0.0.0.bsvyrx&treeId=59&articleId=103665&docType=1) //1、原始数据是否跟商户请求支付的原始数据一致(必须验证这个); //2、验证这个签名是否能通过。上述1、2通过后,在sign字段中success = true才是可信的。 //构建原始数据,并验证是否一致,比如如果订单号不存在,那么就会验证不成功 String orderString = OrderUtil.getOrderInfo(order); if (!result.Contains(orderString)) { return(Json(new { code = 201, desc = "数据验证不通过" })); } //验证数据的签名,以[&sign_type="RSA"&sign=]为界,前面的为(原始数据&支付结果),后面的为带双引号的签名结果,在验证签名时,记录把开头和结尾的引号trim掉 String[] a = result.Split(new String[] { "&sign_type=\"RSA\"&sign=" }, StringSplitOptions.None); bool isPass = RSAFromPkcs8.verify(a[0], a[1].Trim(new char[] { '"' }), Config.Public_key, Config.Input_charset); if (!isPass) { return(Json(new { code = 201, desc = "数据签名不相符" })); } //验证是否包含""这样的支付结果 if (!a[0].Contains("&success=\"true\"")) { return(Json(new { code = 201, desc = "支付失败" })); } order.TradeNo = ""; order.TradeStatus = "COMPLETED";//只说明是同步验证成功,应该尽量依靠服务器异步验证 if (order.IsBalance != 1) { user.NimUserEx.Coins = order.Coin + (user.NimUserEx.Coins ?? 0); order.IsBalance = 1; } entities.SaveChanges(); return(Json(new { code = 200, desc = "支付成功", info = new { user.Username, Nickname = user.NimUserEx.Name, user.NimUserEx.Coins } })); }