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 } } }