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.
 
 

103 lines
3.3 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);
string[] param = content.Split('|');
switch (param[0])
{
case "SendAgentInfo": SendMessageUtil.SendAgentInfo(oppenid, param[1], param[2], param[3], param[4]); break;
default: SendMessageUtil.SendInformInfo(oppenid,"青花瓷软件温馨提醒",DateTime.Now.ToString("yyyy-MM-dd HH:mm"),content,string.Empty,string.Empty,string.Empty,string.Empty); break;
}
}
static string GetOpenId(string username)
{
string customer = GetDeviceNumber();
var query = new DQueryDom(new JoinAlias(typeof(QRCode)));
query.Columns.Add(DQSelectColumn.Field("OppenId"));
query.Where.Conditions.Add(DQCondition.EQ("Customer", customer));
query.Where.Conditions.Add(DQCondition.EQ("UserId", 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;
}
}
}