using Api.Framework;
using Api.Framework.Enums;
using Api.Framework.Model;
using Api.Framework.SDK;
using Api.Framework.Tools;
using BackupAndImport.NianChu.Entitys;
using CsharpHttpHelper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static BackupAndImport.NianChu.EventLog;
namespace BackupAndImport.NianChu
{
public class Nianchu
{
private Random random = new Random();
private string token = string.Empty;
public Nianchu(string token)
{
try
{
this.token = token;
var url = $"{domainUrl}/5ca310d13e8b3?pageNo=1&pageSize=10&page=1&size=10";
var html = GetNCHtml(url);
if (!string.IsNullOrWhiteSpace(html))
{
if (!html.Contains("操作成功"))
{
token = string.Empty;
throw new Exception($"念初token无效,请重新获取!{html}");
}
}
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 默认域名
///
string domainUrl = "https://yun-api95d.nianchu.net:9991/api";
///
/// 获取机器人列表
///
///
private List GetRobots()
{
List robotList = null;
try
{
var objJson = GetNCHtml($"{domainUrl}/5ca310d13e8b3?pageSize=10000&page=1&size=10000");
var robots = HttpHelper.JsonToObject(objJson) as robots;
if (robots != null && robots.code == 1)
{
if (robots.data.count == 0) throw new Exception("机器人列表为空,导入终止");
if (robots.data.list != null)
robotList = robots.data.list;
}
}
catch (Exception ex)
{
OnEvent(this, $"获取机器人信息异常:{ex.Message} ~ {ex.StackTrace}");
throw new Exception($"{ex.Message} ~ {ex.StackTrace}");
}
return robotList;
}
///
/// 获取机器人对应的用户列表
///
///
///
private Dictionary> GetMembers(List robots)
{
Dictionary> objectDic = new Dictionary>();
try
{
if (robots != null)
{
var page = 1;//获取的页数
var size = 5000;//获取的数量
var isGo = false;//是否获取下一页的member数据
var objJson = string.Empty;
for (int i = 0; i < robots.Count; i++)
{
var members = new List();
var robot = robots[i];
page = 1;
isGo = false;
do
{
objJson = GetNCHtml($"{domainUrl}/5cb07ea5d4413?pageNo={page}&pageSize={size}&sub_id={robot.id}&page={page}&size={size}");
var _members = HttpHelper.JsonToObject(objJson) as members;
if (_members != null && _members.code == 1)
{
if (_members.data.count == 0) throw new Exception("用户列表为空,导入终止");
isGo = (_members.data.count > size * page);//判断是否获取下一页数据
members.AddRange(_members.data.list);//追加数据到
}
Thread.Sleep(2000 + random.Next(1000));
page++;
} while (isGo);
objectDic.Add(robot, members);
}
}
}
catch (Exception ex)
{
OnEvent(this, $"获取机器人信息异常:{ex.Message} ~ {ex.StackTrace}");
throw new Exception($"{ex.Message} ~ {ex.StackTrace}");
}
return objectDic;
}
///
/// 插入用户数据到秒单客数据库(包括绑定上下级)
///
public void InsertMember()
{
var session = ApiClient.GetSession();
session.BeginTransaction();
try
{
var robots = GetRobots();
var wxInfos = GetMembers(robots);//所有的机器人账号,键 为 机器人信息,值 为 用户集合信息
if (wxInfos != null && wxInfos.Count != 0)
{
var srcMemberInfo = session.Find("select * from fl_member_info");
List unMemberInfos = new List();//保存不存在的用户对象
List memberInfos = new List();//保存存在的用户对象
foreach (KeyValuePair> item in wxInfos)
{
var members = item.Value;
foreach (var member in members)
{
var user = srcMemberInfo.FirstOrDefault(f => f.username == member.wxid && f.robot_type == ChatType.微信);
if (user == null)
{
user = new fl_member_info()
{
username = member.wxid,
robot_type = ChatType.微信,
usernick = member.nickname.Replace("'", "''"),
cur_point = double.Parse(member.balance),
sum_point = 0,
ext_point = 0,
finish_order = member.order_num,
bind_order = member.order_num,
robot_name = item.Key.wx_id,
alipay_name = string.Empty,
alipay_num = string.Empty,
remark = string.Empty
};
var groups = session.FindGroups();
if (groups.Count != 0)
user.group_id = groups[0].id;
unMemberInfos.Add(user);
}
else
{
user.cur_point = (double)((decimal)user.cur_point + (decimal.Parse(member.balance)));
user.finish_order = user.finish_order + member.order_num;
user.bind_order = user.bind_order + member.order_num;
if (string.IsNullOrWhiteSpace(user.robot_name))
{
user.robot_name = item.Key.wx_id;
user.robot_type = ChatType.微信;
}
memberInfos.Add(user);
}
}
}
OnEvent(this, $"执行用户导入操作...");
var _num1 = (int)Math.Ceiling((decimal)unMemberInfos.Count / 1000m);
for (int o = 1; o <= _num1; o++)
{
var _list = unMemberInfos.Skip((o - 1) * 1000).Take(1000).ToList();
session.Insertable(_list.ToArray()).ExecuteCommand();
}
var _num2 = (int)Math.Ceiling((decimal)memberInfos.Count / 1000m);
for (int o = 1; o <= _num2; o++)
{
var _list = memberInfos.Skip((o - 1) * 1000).Take(1000).ToList();
session.Updateable(_list.ToArray()).ExecuteCommand();
}
OnEvent(this, $"导入数据完成,正在绑定上下级...");
//将有上级的用户筛选出来
var memberss = wxInfos.Values.ToList();
List memberList = new List();//所有的用户用户列表
foreach (var item in memberss)
{
memberList.AddRange(item);
}
var exiteInviteMemberList = memberList.Where(f => f.trjid != "0").ToList();//存在上级的用户集合
//绑定上下级
if (exiteInviteMemberList != null && exiteInviteMemberList.Count != 0)
{
var newDbs = session.Queryable().ToList();
foreach (var item in exiteInviteMemberList)
{
var new_user = newDbs.FirstOrDefault(f => f.username == item.wxid);
if (new_user != null && new_user.inviter_id == 0)
{
var invitemember = memberList.FirstOrDefault(f => item.trjid == f.uid.ToString());
if (invitemember != null)
{
var inviter = newDbs.FirstOrDefault(f => f.username == invitemember.wxid);//找出上级账号
if (inviter != null)
{
new_user.inviter_id = inviter.id;//填写上级ID
session.Updateable(new { inviter_id = inviter.id }).Where(f => f.id == new_user.id).ExecuteCommand();
}
else
{
}
}
else
{ }
}
}
newDbs.Clear();
}
OnEvent(this, $"用户上下级关系绑定成功!");
session.Commit();
srcMemberInfo.Clear();
exiteInviteMemberList.Clear();
memberss.Clear();
memberList.Clear();
}
}
catch (Exception ex)
{
OnEvent(this, $"导入用户数据异常,开始回滚数据...");
session.Rollback();
OnEvent(this, $"导入用户数据异常,回滚执行成功! 异常:{ex.Message} ~ {ex.StackTrace}");
throw new Exception($"{ex.Message} ~ {ex.StackTrace}");
}
}
///
/// 绑定淘宝订单
///
public void BindTb()
{
var session = ApiClient.GetSession();
try
{
var robots = GetRobots();
if (robots != null)
{
var page = 1;//获取的页数
var size = 5000;//获取的数量
var isGo = false;//是否获取下一页的member数据
var objJson = string.Empty;
TbOrder tbOrder = null;
List orderList = new List();//将所有的订单保存下来
for (int i = 0; i < robots.Count; i++)
{
var robot = robots[i];
page = 1;
isGo = false;
do
{
objJson = GetNCHtml($"{domainUrl}/5caf22f33b600?pageNo={page}&pageSize={size}&page={page}&size={size}&sub_id={robot.id}");
tbOrder = HttpHelper.JsonToObject(objJson) as TbOrder;
if (tbOrder != null && tbOrder.code == 1)
{
if (tbOrder.data.count == 0) continue;
orderList.AddRange(tbOrder.data.list.Where(f => !string.IsNullOrWhiteSpace(f.userid)));
isGo = (tbOrder.data.count > page * size);
Thread.Sleep(2000 + random.Next(1000));
page++;
}
} while (isGo);
}
#region 绑定订单
var unBinds = session.Find("select * from fl_order_alimama where db_userid = 0");//本地所有没有绑定的订单
if (unBinds != null && unBinds.Count != 0)
{
var userId = session.Find("select id,username from fl_member_info", new { });//所有 fl_member_info 用户id 和 username
foreach (var item in unBinds)
{
var result = orderList.Where(f => f.orderno == item.trade_parent_id).ToList();
//EventClient.OnEvent(this,$"找到订单-{item.trade_parent_id}");
if (result != null)
{
try
{
for (int i = 0; i < result.Count; i++)
{
var user = userId.FirstOrDefault(f => f.username == result[i].wxid);//fl_member_info 查询用户信息
//EventClient.OnEvent(this, $"找到用户-{item.trade_parent_id}");
if (user != null)
{
item.db_userid = user.id;
if (!item.IsFinish())
{
SystemOrderStatus orderStatus = SystemOrderStatus.订单付款;
switch (result[i].orderstatus)
{
case 0:
orderStatus = SystemOrderStatus.订单付款;
break;
case 2:
orderStatus = SystemOrderStatus.订单失效;
break;
case 3:
orderStatus = SystemOrderStatus.全额退款;
break;
case 1:
case 4:
orderStatus = SystemOrderStatus.订单结算;
break;
default:
break;
}
item.db_status = orderStatus;
item.db_endtime = string.IsNullOrWhiteSpace(result[i].accountdt) ? DateTime.MinValue : DateTime.Parse(result[i].accountdt);
var member = session.FindMemberInfoById(user.id);
if (member != null)
{
item.db_robotname = member.robot_name;
item.db_robottype = member.robot_type;
}
}
else
{
if (string.IsNullOrWhiteSpace(item.db_robotname))
{
var member = session.FindMemberInfoById(user.id);
if (member != null)
{
item.db_robotname = member.robot_name;
item.db_robottype = member.robot_type;
}
}
}
session.SaveOrUpdate(item);
}
}
}
catch (Exception)
{
}
}
}
}
#endregion
}
}
catch (Exception ex)
{
OnEvent(this, $"绑定淘宝订单异常:{ex.Message} ~ {ex.StackTrace}");
throw new Exception($"{ex.Message} ~ {ex.StackTrace}");
}
}
///
/// 绑定京东订单
///
public void BindJd()
{
var session = ApiClient.GetSession();
try
{
var robots = GetRobots();
if (robots != null)
{
var page = 1;//获取的页数
var size = 5000;//获取的数量
var isGo = false;//是否获取下一页的member数据
var objJson = string.Empty;
TbOrder tbOrder = null;
List orderList = new List();//将所有的订单保存下来
for (int i = 0; i < robots.Count; i++)
{
var robot = robots[i];
page = 1;
isGo = false;
do
{
objJson = GetNCHtml($"{domainUrl}/5cb0037ad62f5?pageNo={page}&pageSize={size}&page={page}&size={size}&sub_id={robot.id}");
tbOrder = HttpHelper.JsonToObject(objJson) as TbOrder;
if (tbOrder != null && tbOrder.code == 1)
{
if (tbOrder.data.count == 0) continue;
orderList.AddRange(tbOrder.data.list.Where(f => !string.IsNullOrWhiteSpace(f.userid)));
isGo = (tbOrder.data.count > page * size);
Thread.Sleep(2000 + random.Next(1000));
page++;
}
} while (isGo);
}
#region 绑定订单
var unBinds = session.Find("select * from fl_order_alimama where db_userid = 0");//本地所有没有绑定的订单
if (unBinds != null && unBinds.Count != 0)
{
var userId = session.Find("select id,username from fl_member_info", new { });//所有 fl_member_info 用户id 和 username
foreach (var item in unBinds)
{
var result = orderList.Where(f => f.orderno == item.trade_parent_id).ToList();
//EventClient.OnEvent(this,$"找到订单-{item.trade_parent_id}");
if (result != null)
{
try
{
for (int i = 0; i < result.Count; i++)
{
var user = userId.FirstOrDefault(f => f.username == result[i].wxid);//fl_member_info 查询用户信息
//EventClient.OnEvent(this, $"找到用户-{item.trade_parent_id}");
if (user != null)
{
item.db_userid = user.id;
if (!item.IsFinish())
{
SystemOrderStatus orderStatus = SystemOrderStatus.订单付款;
switch (result[i].orderstatus)
{
case 0:
orderStatus = SystemOrderStatus.订单付款;
break;
case 2:
orderStatus = SystemOrderStatus.订单失效;
break;
case 3:
orderStatus = SystemOrderStatus.全额退款;
break;
case 1:
case 4:
orderStatus = SystemOrderStatus.订单结算;
break;
default:
break;
}
item.db_status = orderStatus;
item.db_endtime = string.IsNullOrWhiteSpace(result[i].accountdt) ? DateTime.MinValue : DateTime.Parse(result[i].accountdt);
var member = session.FindMemberInfoById(user.id);
if (member != null)
{
item.db_robotname = member.robot_name;
item.db_robottype = member.robot_type;
}
}
else
{
if (string.IsNullOrWhiteSpace(item.db_robotname))
{
var member = session.FindMemberInfoById(user.id);
if (member != null)
{
item.db_robotname = member.robot_name;
item.db_robottype = member.robot_type;
}
}
}
session.SaveOrUpdate(item);
}
}
}
catch (Exception)
{
}
}
}
}
#endregion
}
}
catch (Exception ex)
{
OnEvent(this, $"绑定淘宝订单异常:{ex.Message} ~ {ex.StackTrace}");
throw new Exception($"{ex.Message} ~ {ex.StackTrace}");
}
}
///
/// 绑定拼多多订单
///
public void BindPdd()
{
var session = ApiClient.GetSession();
try
{
var robots = GetRobots();
if (robots != null)
{
var page = 1;//获取的页数
var size = 5000;//获取的数量
var isGo = false;//是否获取下一页的member数据
var objJson = string.Empty;
TbOrder tbOrder = null;
List orderList = new List();//将所有的订单保存下来
for (int i = 0; i < robots.Count; i++)
{
var robot = robots[i];
page = 1;
isGo = false;
do
{
objJson = GetNCHtml($"{domainUrl}/5caf22f33b600?pageNo={page}&pageSize={size}&page={page}&size={size}&sub_id={robot.id}");
tbOrder = HttpHelper.JsonToObject(objJson) as TbOrder;
if (tbOrder != null && tbOrder.code == 1)
{
if (tbOrder.data.count == 0) continue;
orderList.AddRange(tbOrder.data.list.Where(f => !string.IsNullOrWhiteSpace(f.userid)));
isGo = (tbOrder.data.count > page * size);
Thread.Sleep(2000 + random.Next(1000));
page++;
}
} while (isGo);
}
#region 绑定订单
var unBinds = session.Find("select * from fl_order_alimama where db_userid = 0");//本地所有没有绑定的订单
if (unBinds != null && unBinds.Count != 0)
{
var userId = session.Find("select id,username from fl_member_info", new { });//所有 fl_member_info 用户id 和 username
foreach (var item in unBinds)
{
var result = orderList.Where(f => f.orderno == item.trade_parent_id).ToList();
//EventClient.OnEvent(this,$"找到订单-{item.trade_parent_id}");
if (result != null)
{
try
{
for (int i = 0; i < result.Count; i++)
{
var user = userId.FirstOrDefault(f => f.username == result[i].wxid);//fl_member_info 查询用户信息
//EventClient.OnEvent(this, $"找到用户-{item.trade_parent_id}");
if (user != null)
{
item.db_userid = user.id;
if (!item.IsFinish())
{
SystemOrderStatus orderStatus = SystemOrderStatus.订单付款;
switch (result[i].orderstatus)
{
case 0:
orderStatus = SystemOrderStatus.订单付款;
break;
case 2:
orderStatus = SystemOrderStatus.订单失效;
break;
case 3:
orderStatus = SystemOrderStatus.全额退款;
break;
case 1:
case 4:
orderStatus = SystemOrderStatus.订单结算;
break;
default:
break;
}
item.db_status = orderStatus;
item.db_endtime = string.IsNullOrWhiteSpace(result[i].accountdt) ? DateTime.MinValue : DateTime.Parse(result[i].accountdt);
var member = session.FindMemberInfoById(user.id);
if (member != null)
{
item.db_robotname = member.robot_name;
item.db_robottype = member.robot_type;
}
}
else
{
if (string.IsNullOrWhiteSpace(item.db_robotname))
{
var member = session.FindMemberInfoById(user.id);
if (member != null)
{
item.db_robotname = member.robot_name;
item.db_robottype = member.robot_type;
}
}
}
session.SaveOrUpdate(item);
}
}
}
catch (Exception)
{
}
}
}
}
#endregion
}
}
catch (Exception ex)
{
OnEvent(this, $"绑定淘宝订单异常:{ex.Message} ~ {ex.StackTrace}");
throw new Exception($"{ex.Message} ~ {ex.StackTrace}");
}
}
///
/// 请求念初服务器数据
///
///
///
private string GetNCHtml(string url)
{
try
{
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = url,
Method = "GET",
Encoding = UTF8Encoding.UTF8,
Timeout = 100000,
ReadWriteTimeout = 30000,
IsToLower = false,
Cookie = "",
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
Accept = "text/html, application/xhtml+xml, */*",
ContentType = "application/json",
Referer = "https://yun.nianchu.net/",
Allowautoredirect = false,
AutoRedirectCookie = false,
};
item.Header.Add("version", "v3.0");
item.Header.Add("user-token", token);
HttpResult result = http.GetHtml(item);
string html = result.Html;
return html;
}
catch (Exception ex)
{ }
return string.Empty;
}
///
/// 念初订单状态
///
enum NcOrderStatic
{
已付款 = 0,
已结算 = 1,
已失效 = 2,
订单退款 = 3,
订单完成 = 4
}
}
}