using Api.Framework; using Api.Framework.Enums; using Api.Framework.Model; using Api.Framework.SDK; using Api.Framework.Tools; using BackupAndImport.ECO.Entitys; using CsharpHttpHelper; using CsharpHttpHelper.Enum; using Eson.Utils.ExcelHelper; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using static BackupAndImport.ECO.EventLog; namespace BackupAndImport.ECO { public class Eco { Random random = new Random(); public enum LoginType { 账户密码登录 = 0, 手机号码登录 = 1 } /// /// 登录验证 /// /// 账号/手机号 /// 密码/验证码 /// 验证方式 /// html响应json public string ECOLogin(string param1, string param2, LoginType type) { try { switch (type) { case LoginType.账户密码登录: { HttpHelper http = new HttpHelper(); HttpItem item = new HttpItem() { URL = $"http://console.ecostudio.cn/back/user/loginuser?t=true&withCredentials=true&username={param1}&password={param2}&w=null&f=null",//URL 必需项 Method = "post", Encoding = System.Text.Encoding.GetEncoding("utf-8"), Timeout = 100000, ReadWriteTimeout = 30000, UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0", ContentType = "application/x-www-form-urlencoded", }; HttpResult result = http.GetHtml(item); return result.Html; } case LoginType.手机号码登录: { HttpHelper http = new HttpHelper(); HttpItem item = new HttpItem() { URL = $"http://console.ecostudio.cn/back/user/phoneLogin?phone={param1}&smsCode={param2}&f=null&w=null", Encoding = Encoding.GetEncoding("utf-8"), Method = "post", Referer = "http://www.ecostudio.cn/work/wechatlist", UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", ContentType = "text/html" }; HttpResult result = http.GetHtml(item); string html = result.Html; string cookie = result.Cookie; return html; } } } catch (Exception ex) { throw ex; } return "登录失败"; } /// /// 获取验证码 /// /// 手机号码 /// public bool ECOFindCerificationCode(string param1) { try { HttpHelper http = new HttpHelper(); HttpItem item = new HttpItem() { URL = $"http://console.ecostudio.cn/back/user/sendsns?_allow_anonymous=true&phone={param1}", Encoding = Encoding.GetEncoding("utf-8"), Method = "post", Referer = "http://www.ecostudio.cn/work/wechatlist", UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", ContentType = "text/html" }; HttpResult result = http.GetHtml(item); string html = result.Html; if (html.Contains("验证码发送成功")) return true; } catch (Exception ex) { throw ex; } return false; } /// /// 获取机器人列表 /// /// 第几页的数据 /// loginValicateName /// loginValicateSingle public void ECOFindRobotList(string loginValicateName, string loginValicateSingle, string token, List robotids, int page = 1) { try { HttpHelper http = new HttpHelper(); HttpItem item = new HttpItem() { URL = $"http://console.ecostudio.cn/back/device/list?keyword=&page={page}&status=&w={loginValicateName}&f={loginValicateSingle}", Encoding = Encoding.GetEncoding("utf-8"), Method = "get", Referer = "http://www.ecostudio.cn/work/device", UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", ContentType = "text/html" }; item.Header["Authorization"] = token; var html = string.Empty; for (int i = 0; i < 5; i++) { HttpResult result = http.GetHtml(item); html = result.Html; if (!CheckHttpCallsFrequently(html)) break; } var dic = HttpExtend.JsonToDictionary(html); if (dic == null) throw new Exception("数据异常,转换失败"); if (dic.ContainsKey("status")) { if (dic["status"].ToString() == "200") { if (dic.ContainsKey("data")) { var data = dic["data"] as Dictionary; if (data.ContainsKey("list")) { var list = data["list"] as ArrayList; foreach (Dictionary obj in list) { if (!obj.ContainsKey("device")) throw new Exception("数据异常,不包含device"); var device = obj["device"] as Dictionary; if (!device.ContainsKey("wxId")) throw new Exception("数据异常,不包含wxId"); robotids.Add(device["wxId"].ToString()); } } if (data.ContainsKey("currentPage") || data.ContainsKey("totalPage")) { var currentPage = int.Parse(data["currentPage"].ToString()); var totalPage = int.Parse(data["totalPage"].ToString()); if (totalPage > currentPage) { Thread.Sleep(500); currentPage++; ECOFindRobotList(loginValicateName, loginValicateSingle, token, robotids, currentPage); } } } } else { OnEvent(this, $"获取机器人列表失败:" + html); } } } catch (Exception ex) { OnEvent(this, $"获取机器人列表异常:{ex.Message} - {ex.StackTrace} - {page}"); throw new Exception($"{ex.Message} - {ex.StackTrace} - {page}"); } } #region 通过机器人id下载用户excel /// /// 通过机器人id下载用户excel /// /// public void ECODownloadMemberExcel(List robotids, string token, string savepath = "") { try { OnEvent(this, $"删除文件开始..."); Tools.DeleteDir(Util.MapPath(savepath)); OnEvent(this, $"删除文件完毕!"); //Parallel.ForEach(robotids, f => //{ // DownloadMemberExcel(f, token, savepath); // Thread.Sleep(200 + random.Next(300)); //}); var t1 = Task.Run(() => { foreach (var f in robotids) { OnEvent(this, $"正在下载:{f}账号的用户数据"); DownloadMemberExcel(f, token, savepath); OnEvent(this, $"{f}账号的用户数据下载完成"); //Thread.Sleep(4000 + random.Next(300, 2000)); } }); Task.WaitAll(t1); } catch (Exception ex) { OnEvent(this, $"获取用户数据失败-1:{ex.Message} - {ex.StackTrace}"); throw ex; } } /// /// 下载excel /// /// /// private void DownloadMemberExcel(string robotid, string token, string savepath = "") { try { for (int i = 0; i < 5; i++) { HttpHelper http = new HttpHelper(); HttpItem item = new HttpItem() { URL = $"http://console.ecostudio.cn/back/agent/downAgentInfo?wxId={robotid}", Encoding = Encoding.GetEncoding("utf-8"), Method = "get", Referer = "http://www.ecostudio.cn/work/wechatlist", UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", ContentType = "application/vnd.ms-excel", PostDataType = PostDataType.Byte }; item.ResultType = ResultType.Byte; item.Header["Authorization"] = token; HttpResult result = http.GetHtml(item); var file = result.ResultByte; if (file.Length != 80) { WriteByteToFile(file, Util.MapFile(robotid + ".xlsx", savepath)); break; } Thread.Sleep(3000); } } catch (Exception ex) { OnEvent(this, $"获取用户数据失败-2:{ex.Message} - {ex.StackTrace}"); throw ex; } } /// /// 写byte[]到fileName /// /// byte[] /// 保存至硬盘路径 /// public static bool WriteByteToFile(byte[] pReadByte, string fileName) { FileStream pFileStream = null; try { pFileStream = new FileStream(fileName, FileMode.OpenOrCreate); pFileStream.Write(pReadByte, 0, pReadByte.Length); } catch { return false; } finally { if (pFileStream != null) pFileStream.Close(); } return true; } #endregion #region 通过机器人id爬取用户数据 public List ECOFindMembers(string token, List _robotids) { List members = new List(); try { List robotids = _robotids; var t1 = Task.Run(() => { foreach (var f in robotids) { OnEvent(this, $"正在下载:{f}账号的用户数据"); ECOFindMemberList(token, f, members); OnEvent(this, $"{f}账号的用户数据下载完成"); //Thread.Sleep(4000 + random.Next(300, 2000)); } }); Task.WaitAll(t1); } catch (Exception ex) { OnEvent(this, $"获取用户数据失败-1:{ex.Message} - {ex.StackTrace}"); throw ex; } return members; } /// /// 获取用户列表 /// /// 第几页的数据 /// loginValicateName /// loginValicateSingle public void ECOFindMemberList(string token, string robotid, List memberInfos, int page = 1) { try { if (!string.IsNullOrWhiteSpace(robotid)) OnEvent(this, $"正在获取{robotid}机器人第{page}页数据..."); else OnEvent(this, $"正在采集用户列表第{page}页数据..."); HttpHelper http = new HttpHelper(); var PostData = "{'currentPage':" + page + ",'wechatSearchTimeBegin':null,'wechatSearchTimeEnd':null,'orderTimeBegin':null,'orderTimeEnd':null,'createTimeBegin':null,'createTimeEnd':null,'cashTimeBegin':null,'cashTimeEnd':null,'sort':'2'}"; if (!string.IsNullOrWhiteSpace(robotid)) PostData = "{'currentPage':" + page + ",'wechatSearchTimeBegin':null,'wechatSearchTimeEnd':null,'orderTimeBegin':null,'orderTimeEnd':null,'createTimeBegin':null,'createTimeEnd':null,'cashTimeBegin':null,'cashTimeEnd':null,'type':'2','keyValue':'" + robotid + "','sort':'2'}"; HttpItem item = new HttpItem() { URL = $"http://console.ecostudio.cn/back/agent/eslist?w=undefined&f=undefined&page={page}", Encoding = Encoding.GetEncoding("utf-8"), Method = "POST", Referer = "http://www.ecostudio.cn/work/wechatlist", UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", ContentType = "text/html", Postdata = PostData }; item.Header["Authorization"] = token; var html = string.Empty; for (int i = 0; i < 5; i++) { HttpResult result = http.GetHtml(item); html = result.Html; if (!CheckHttpCallsFrequently(html)) break; } var dic = HttpExtend.JsonToDictionary(html); if (dic == null) throw new Exception("数据异常,转换失败"); if (dic.ContainsKey("status")) { if (dic["status"].ToString() == "200") { if (!string.IsNullOrWhiteSpace(robotid)) OnEvent(this, $"获取{robotid}机器人第{page}页数据成功,正在收集用户数据"); else OnEvent(this, $"获取用户列表第{page}页数据成功,正在收集用户数据"); if (dic.ContainsKey("data")) { var data = dic["data"] as Dictionary; if (data.ContainsKey("list")) { var list = data["list"] as ArrayList; foreach (Dictionary obj in list) { //余额 decimal balance = 0m; if (obj.ContainsKey("balance")) balance = decimal.Parse(obj["balance"].ToString()); //设备id(机器人id) var deviceWxid = robotid; if (obj.ContainsKey("deviceWxid")) deviceWxid = obj["deviceWxid"].ToString(); //微信id if (!obj.ContainsKey("wxId")) throw new Exception("数据异常,不包含wxId"); var wxId = obj["wxId"].ToString(); //昵称 var wxName = string.Empty; if (obj.ContainsKey("wxName")) wxName = obj["wxName"].ToString(); //上级微信id var parentWxid = string.Empty; if (obj.ContainsKey("parentWxid")) parentWxid = obj["parentWxid"].ToString(); var memberInfo = memberInfos.FirstOrDefault(f => f.username == wxId); if (memberInfo == null) memberInfos.Add(new ECOMemberInfo() { usernick = wxName, username = wxId, device_id = deviceWxid, cur_point = (double)balance, invite_username = parentWxid }); else if (!string.IsNullOrWhiteSpace(robotid)) memberInfo.cur_point = (double)((decimal)memberInfo.cur_point + balance); } } if (data.ContainsKey("currentPage") || data.ContainsKey("totalPage")) { var currentPage = int.Parse(data["currentPage"].ToString()); var totalPage = int.Parse(data["totalPage"].ToString()); if (totalPage > currentPage) { Thread.Sleep(700); currentPage++; ECOFindMemberList(token, robotid, memberInfos, currentPage); } } } } else { OnEvent(this, $"获取机器人列表失败:" + html); } } } catch (Exception ex) { OnEvent(this, $"获取用户列表异常:{ex.Message} - {ex.StackTrace} - {page} - {robotid}"); throw new Exception($"{ex.Message} - {ex.StackTrace} - {page} - {robotid}"); } } #endregion /// /// 读取excel中的用户信息 /// /// /// public List ECOReadExcel(string savePath) { var memberInfos = new List(); try { var directory = Util.MapPath(savePath); if (Directory.Exists(directory)) { var files = Directory.GetFiles(directory); var excelTool = new ExcelStreamExport(); foreach (var file in files) { var dataTable = excelTool.ConvertExcelToTable(file, 0); foreach (DataRow item in dataTable.Rows) { var memberInfo = memberInfos.FirstOrDefault(f => f.username == item[1].ToString()); if (memberInfo == null) memberInfos.Add(new ECOMemberInfo() { usernick = item[0].ToString(), username = item[1].ToString(), device_id = item[2].ToString(), cur_point = double.Parse(item[3].ToString()), invite_username = item[4].ToString() }); else memberInfo.cur_point = (double)((decimal)memberInfo.cur_point + decimal.Parse(item[3].ToString())); } } } } catch (Exception ex) { OnEvent(this, $"第二个阶段异常:{ex.Message} ~ {ex.StackTrace}"); throw new Exception($"{ex.Message} ~ {ex.StackTrace}"); } return memberInfos; } /// /// 插入用户数据到秒单客数据库(包括绑定上下级) /// /// public void ECOInsertMember(List ecoMemberInfos) { var session = ApiClient.GetSession(); session.BeginTransaction(); try { var srcMemberInfo = session.Find("select * from fl_member_info"); List unMemberInfos = new List();//保存不存在的用户对象 List memberInfos = new List();//保存存在的用户对象 foreach (var member in ecoMemberInfos) { //TODO 这里就不判断企业微信了 var user = srcMemberInfo.FirstOrDefault(f => f.username == member.username && f.robot_type == ChatType.微信); if (user == null) { user = new fl_member_info() { username = member.username, robot_type = ChatType.微信, usernick = member.usernick.Replace("'", "''"), cur_point = member.cur_point, sum_point = 0, ext_point = 0, finish_order = 0, robot_name = member.device_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)member.cur_point)); //user.finish_order = user.finish_order + (long)item.总成功订单; if (string.IsNullOrWhiteSpace(user.robot_name)) { user.robot_name = member.device_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, $"导入数据完成,正在绑定上下级..."); //将有上级的用户筛选出来 ecoMemberInfos = ecoMemberInfos.Where(f => !string.IsNullOrEmpty(f.invite_username)).ToList(); //绑定上下级 if (ecoMemberInfos != null && ecoMemberInfos.Count != 0) { var newDbs = session.Queryable().ToList(); foreach (var item in ecoMemberInfos) { var new_user = newDbs.FirstOrDefault(f => f.username == item.username); if (new_user != null && new_user.inviter_id == 0) { var inviter = newDbs.FirstOrDefault(f => f.username == item.invite_username);//找出上级账号 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(); session.Updateable(new_user); } else { } } } } OnEvent(this, $"用户上下级关系绑定成功!"); session.Commit(); srcMemberInfo.Clear(); } catch (Exception ex) { OnEvent(this, $"导入用户数据异常,开始回滚数据..."); session.Rollback(); OnEvent(this, $"导入用户数据异常,回滚执行成功! 异常:{ex.Message} ~ {ex.StackTrace}"); throw new Exception($"{ex.Message} ~ {ex.StackTrace}"); } } #region 订单操作 public enum OrderType { 淘宝 = 1, 京东 = 2, 拼多多 = 3 } /// /// ECO的订单状态 /// public enum OrderStateType { 所有 = 0, 已结算 = 3, 未结算 = 12, 已失效 = 13 } /// /// 获取订单信息 /// public void ECOBindOrder(int page, OrderType order, OrderStateType orderState, List bindOrderList, string token, string keyWord = "") { try { OnEvent(this, string.IsNullOrWhiteSpace(keyWord) ? $"收集ECO订单 【{order.ToString()} - {orderState.ToString()}】 第{page}页开始..." : $"收集ECO订单 【{order.ToString()} - {orderState.ToString()}】 条件{keyWord} 开始..."); Thread.Sleep(1200 + random.Next(400)); var payStatus = string.Empty; if (orderState != OrderStateType.所有) payStatus = ((int)orderState).ToString(); else { if (order == OrderType.拼多多 && !string.IsNullOrWhiteSpace(keyWord)) { if (keyWord.Contains("-")) { var strs = keyWord.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries); if (strs != null && strs.Length == 2) keyWord = strs[1]; } } } HttpHelper http = new HttpHelper(); HttpItem item = new HttpItem() { URL = $"http://console.ecostudio.cn/back/orderDetail/list?page={page}&keyWord={keyWord}&startTime=&endTime=&payStatus={payStatus}&platformId={(int)order}", Encoding = Encoding.GetEncoding("utf-8"), Method = "get", Referer = "http://www.ecostudio.cn/work/order", UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", ContentType = "text/html" }; item.Header["Authorization"] = token; var html = string.Empty; int num = 0; Next: for (int i = 0; i < 5; i++) { HttpResult result = http.GetHtml(item); html = result.Html; if (!CheckHttpCallsFrequently(html)) break; } var dic = HttpExtend.JsonToDictionary(html); if (dic == null) throw new Exception("数据异常,转换失败"); if (dic.ContainsKey("status")) { if (dic["status"].ToString() == "200") { if (dic.ContainsKey("data")) { var data = dic["data"] as Dictionary; if (data.ContainsKey("list")) { var list = data["list"] as ArrayList; foreach (Dictionary obj in list) { //if (!obj.ContainsKey("isBing")) continue;//订单没有绑定直接跳过 var eco_id = obj["id"].ToString(); //var ecoOrderInfo = new ECOOrderInfo() { eco_id = eco_id, isBing = obj["isBing"].ToString().ToLower() == "true" ? true : false, isComplete = obj["isComplete"].ToString().ToLower() == "true" ? true : false, orderId = obj["orderId"].ToString(), payStatus = (OrderStateType)int.Parse(obj["payStatus"].ToString()), platformId = (OrderType)int.Parse(obj["platformId"].ToString()) }; var ecoOrderInfo = new ECOOrderInfo() { eco_id = eco_id, isBing = false, orderId = obj["orderId"].ToString(), payStatus = (OrderStateType)int.Parse(obj["payStatus"].ToString()), platformId = (OrderType)int.Parse(obj["platformId"].ToString()) }; ECOQueryOrderBindInfo(eco_id, ecoOrderInfo, token); if (ecoOrderInfo.isBing) bindOrderList.Add(ecoOrderInfo); } } if (data.ContainsKey("currentPage") || data.ContainsKey("totalPage")) { var currentPage = int.Parse(data["currentPage"].ToString()); var totalPage = int.Parse(data["totalPage"].ToString()); if (totalPage > currentPage) { //currentPage++; ECOBindOrder(currentPage, order, orderState, bindOrderList, token, keyWord); } } } } else { if (num < 5) { OnEvent(this, $"ECO订单请求异常:html => {html}"); OnEvent(this, $"正在重新请求..."); num++; Thread.Sleep(2000); goto Next; } else { throw new Exception("多次请求无果,已经终止..."); } } } OnEvent(this, string.IsNullOrWhiteSpace(keyWord) ? $"收集ECO订单第{page}页完毕!" : $"收集ECO订单条件 {keyWord} 完毕!"); } catch (Exception ex) { OnEvent(this, $"{order} - ECO订单请求异常:{ex.Message} ^ {ex.StackTrace} ^ {page}"); //throw new Exception($"{ex.Message} ^ {ex.StackTrace} ^ {page}"); } } /// /// 查询订单绑定的用户信息 /// /// eco的查询id /// 订单对象 /// private void ECOQueryOrderBindInfo(string eco_id, ECOOrderInfo orderInfo, string token) { try { Thread.Sleep(1200 + random.Next(300)); HttpHelper http = new HttpHelper(); HttpItem item = new HttpItem() { URL = $"http://console.ecostudio.cn/back/orderDetail/detail?esId={eco_id}", Encoding = Encoding.GetEncoding("utf-8"), Method = "get", Referer = "http://www.ecostudio.cn/work/order", UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", ContentType = "text/html" }; item.Header["Authorization"] = token; var html = string.Empty; int num = 0; Next: for (int i = 0; i < 5; i++) { HttpResult result = http.GetHtml(item); html = result.Html; if (!CheckHttpCallsFrequently(html)) break; } var dic = HttpExtend.JsonToDictionary(html); if (dic == null) throw new Exception("数据异常,转换失败"); if (dic.ContainsKey("status")) { if (dic["status"].ToString() == "200") { if (dic.ContainsKey("data")) { var data = dic["data"] as Dictionary; if (data != null && data.ContainsKey("esPaymentDetail")) { var esPaymentDetail = data["esPaymentDetail"] as Dictionary; if (esPaymentDetail != null) { //orderInfo.isBing = obj["isBing"].ToString().ToLower() == "true" ? true : false orderInfo.isBing = true; //orderInfo.isComplete =, if (esPaymentDetail.ContainsKey("deviceWxId")) orderInfo.deviceWxId = esPaymentDetail["deviceWxId"].ToString(); else if (esPaymentDetail.ContainsKey("fromdevice")) orderInfo.deviceWxId = esPaymentDetail["fromdevice"].ToString(); if (esPaymentDetail.ContainsKey("wxId")) orderInfo.fromWxId = esPaymentDetail["wxId"].ToString(); else if (esPaymentDetail.ContainsKey("fromWxId")) orderInfo.fromWxId = esPaymentDetail["fromWxId"].ToString(); if (esPaymentDetail.ContainsKey("itemId")) orderInfo.itemId = esPaymentDetail["itemId"].ToString(); } } } } else { if (num < 5) { OnEvent(this, $"ECO订单请求异常:html => {html}"); OnEvent(this, $"正在重新请求..."); num++; Thread.Sleep(2000); goto Next; } else { throw new Exception("多次请求无果,已经终止..."); } } } } catch (Exception ex) { throw new Exception($"{ex.Message} * {ex.StackTrace}"); } } #endregion /// /// 检测是否调用频繁 /// 调用频繁直接休眠2秒钟 /// /// /// 调用频繁返回true public bool CheckHttpCallsFrequently(string html) { try { //{ // "msg":"调用频繁", // "status":400, // "success":false //} if (string.IsNullOrWhiteSpace(html)) throw new Exception("请重新登录!"); var dic = HttpExtend.JsonToDictionary(html); if (dic == null) OnEvent(this, $"转换为空:html = {html}"); if (dic != null && dic.ContainsKey("status") && dic.ContainsKey("msg")) { if (dic["status"].ToString() == "400" && dic["msg"].ToString() == "调用频繁") { OnEvent(this, $"调用频繁休眠2-3秒..."); Thread.Sleep(2000 + random.Next(1000)); return true; } } else { if (html.Contains("请求被中止: 操作超时")) { OnEvent(this, $"调用频繁休眠2-3秒..."); Thread.Sleep(2000 + random.Next(1000)); return true; } } //else if (dic.ContainsKey("status") && dic["status"].ToString() == "200") //{ // var data = dic["data"] as Dictionary; // if (data.ContainsKey("list")) // { // var list = data["list"] as ArrayList; // foreach (Dictionary obj in list) // { // if (!obj.ContainsKey("isBing")) // { // Thread.Sleep(2000 + random.Next(1000)); // return true;//没有获取到绑定信息多获取一次 // } // else // { } // } // } //} } catch (Exception ex) { throw ex; } return false; } internal void ECOOrderBind(CpsType cps, List bindOrderList) { var session = ApiClient.GetSession(); session.BeginTransaction(); try { switch (cps) { case CpsType.阿里妈妈: { OnEvent(this, $"阿里妈妈订单数量({bindOrderList.Count})绑定开始执行..."); var aliOrders = session.Find("select * from fl_order_alimama where db_userid = 0").ToList(); var memberinfos = session.Find("select * from fl_member_info").ToList(); if (aliOrders != null && bindOrderList != null) { OnEvent(this, $"ECO阿里妈妈订单量:{bindOrderList.Count},需要绑定的订单量:{aliOrders.Count}"); foreach (var item in bindOrderList) { if (string.IsNullOrWhiteSpace(item.fromWxId)) continue; var orders = aliOrders.Where(f => f.trade_parent_id == item.orderId && f.num_iid == item.itemId).ToList(); if (orders.Count != 0) { foreach (var order in orders) { var member = memberinfos.FirstOrDefault(f => f.username == item.fromWxId); if (member != null) order.db_userid = member.id; if (item.payStatus == OrderStateType.已结算) { order.db_status = SystemOrderStatus.订单结算; order.db_endtime = DateTime.Now.AddHours(-2); order.tk_status = 3; } if (string.IsNullOrWhiteSpace(order.db_robotname)) { order.db_robottype = ChatType.微信; order.db_robotname = item.deviceWxId; } session.SaveOrUpdate(order); } } } aliOrders.Clear(); memberinfos.Clear(); } OnEvent(this, $"阿里妈妈订单绑定执行完成!"); } break; case CpsType.多多进宝: { OnEvent(this, $"多多进宝订单绑定开始执行..."); var pddOrders = session.Find("select * from fl_order_pinduoduo where db_userid = 0").ToList(); var memberinfos = session.Find("select * from fl_member_info").ToList(); if (pddOrders != null && bindOrderList != null) { OnEvent(this, $"ECO多多进宝订单量:{bindOrderList.Count},需要绑定的订单量:{pddOrders.Count}"); foreach (var item in bindOrderList) { var order = pddOrders.FirstOrDefault(f => f.order_sn == item.orderId && f.goods_id == item.itemId); if (order != null) { var member = memberinfos.FirstOrDefault(f => f.username == item.fromWxId); if (member != null) order.db_userid = member.id; if (item.payStatus == OrderStateType.已结算) { order.db_status = SystemOrderStatus.订单结算; order.db_endtime = DateTime.Now.AddHours(-2); order.order_status = 2; } if (string.IsNullOrWhiteSpace(order.db_robotname)) { order.db_robottype = ChatType.微信; order.db_robotname = item.deviceWxId; } session.SaveOrUpdate(order); } } pddOrders.Clear(); memberinfos.Clear(); } OnEvent(this, $"多多进宝订单绑定执行完成!"); } break; case CpsType.京东联盟: { OnEvent(this, $"京东联盟订单绑定开始执行..."); var jdOrders = session.Find("select * from fl_order_jingdong where db_userid = 0").ToList(); var memberinfos = session.Find("select * from fl_member_info").ToList(); if (jdOrders != null && bindOrderList != null) { OnEvent(this, $"ECO京东联盟订单量:{bindOrderList.Count},需要绑定的订单量:{jdOrders.Count}"); foreach (var item in bindOrderList) { var order = jdOrders.FirstOrDefault(f => f.orderId.ToString() == item.orderId && f.skuId.ToString() == item.itemId); if (order != null) { var member = memberinfos.FirstOrDefault(f => f.username == item.fromWxId); if (member != null) order.db_userid = member.id; if (item.payStatus == OrderStateType.已结算) { order.db_status = SystemOrderStatus.订单结算; order.db_endtime = DateTime.Now.AddHours(-2); order.validCode = 17; } if (string.IsNullOrWhiteSpace(order.db_robotname)) { order.db_robottype = ChatType.微信; order.db_robotname = item.deviceWxId; } session.SaveOrUpdate(order); } } jdOrders.Clear(); memberinfos.Clear(); } OnEvent(this, $"京东联盟订单绑定执行完成!"); } break; } session.Commit(); } catch (Exception ex) { OnEvent(this, $"订单绑定异常,开始回滚数据..."); session.Rollback(); OnEvent(this, $"订单绑定异常,回滚执行成功! 异常:{ex.Message} / {ex.StackTrace}"); throw new Exception($"{ex.Message} / {ex.StackTrace}"); } } } }