You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

98 lines
3.1 KiB

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<string>();
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<string>();
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<int?>();
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;
}
}
}