using Bwp.MainSystem.BO; using BWP.B3WeChat.BO; using BWP.B3WeChat.Utils; using Forks.EnterpriseServices.DomainObjects2; using Forks.EnterpriseServices.DomainObjects2.DQuery; using Forks.EnterpriseServices.JsonRpc; using Forks.EnterpriseServices.SqlDoms; using Forks.Utils; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using TSingSoft.WebPluginFramework; namespace BWP.B3WeChat.Rpcs { [Rpc] public static class ClientRpc { static Logger logger = new Logger("ClientRpc"); internal static string GetDeviceNumber() { var user = BLContext.User; var query = new DQueryDom(new JoinAlias(typeof(DeviceAuthentication))); query.Where.Conditions.Add(DQCondition.EQ("Ticket", user.UserTag.ToString("N"))); query.Columns.Add(DQSelectColumn.Field("DeviceNumber")); query.Range = SelectRange.Top(1); var deviceNumber = query.EExecuteScalar(); return deviceNumber; } [Rpc] public static void Send(string username, string content) { string oppenid = GetOpenId(username); SendMessageUtil.SendInformInfo(oppenid, "青花瓷软件温馨提醒", DateTime.Now.ToString("yyyy-MM-dd HH:mm"), content, string.Empty, string.Empty, string.Empty, string.Empty); } static string GetOpenId(string username) { string customer = GetDeviceNumber(); var query = new DQueryDom(new JoinAlias(typeof(CustomerUser))); query.Columns.Add(DQSelectColumn.Field("OpenID")); query.Where.Conditions.Add(DQCondition.EQ("CustomerCode", customer)); query.Where.Conditions.Add(DQCondition.EQ("CustomerUsername", username)); query.Range = SelectRange.Top(1); var OppenId = query.EExecuteScalar(); if (string.IsNullOrEmpty(OppenId)) { throw new Exception("未找到该微信用户或者" + username + "未关联微信"); } return OppenId; } [Rpc] public static String GetUserQRCodeUrl(string username) { string url = string.Empty; string customer = GetDeviceNumber(); int sceneId = GetSceneId(customer, username); string ticket = InOutMessageUtil.GenerateEQCode(30, sceneId); url = string.Format("https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={0}", ticket); return url; } static int GetSceneId(string customer, string username) { var query = new DQueryDom(new JoinAlias(typeof(QRCode))); query.Columns.Add(DQSelectColumn.Field("ID")); query.Where.Conditions.Add(DQCondition.EQ("Customer", customer)); query.Where.Conditions.Add(DQCondition.EQ("UserId", username)); query.Range = SelectRange.Top(1); var sceneId = query.EExecuteScalar(); if (!sceneId.HasValue) { using (var session = Dmo.NewSession()) { QRCode newSence = new QRCode() { Customer = customer, UserId = username, }; session.Insert(newSence); session.Commit(); sceneId = newSence.ID; } } return sceneId.Value; } } }