using System; using System.Collections.Generic; using System.Data; using System.Data.OracleClient; using System.Linq; using System.Text; using CRM.Core.DTO; using Newtonsoft.Json; using WX.CRM.BLL.Base; using WX.CRM.BLL.Ww; using WX.CRM.BLL.Wx; using WX.CRM.Common; using WX.CRM.DAL; using WX.CRM.IBLL.Res; using WX.CRM.IBLL.WeWork; using WX.CRM.IBLL.Ww; using WX.CRM.IBLL.Wx; using WX.CRM.Model.Entity; using WX.CRM.Model.Ww; namespace WX.CRM.CRMServices.WeiXin { /// /// 自动绑定 /// public static class GetAutoBound { //更新参数 //工作内容 //get wework.ww_extuser json //手机号转 resid //insert Orcl_TG.ww_extuser_resid //update Orcl_TG.res_customerdetail isbound private static BAS_PARAMETER_BL paramter_bl = new BAS_PARAMETER_BL(); private static IWX_SZZYORDER _wxSzzyorder = new WX_SZZYORDER_BL(); private static IWw_huser _iww_hhuser_service = new Ww_huser_BL(); public static void Bound() { var syskey = paramter_bl.GetModel_Patameter("WW_Extuser_MAXID");//获取系统上次同步最后更新时间 var MaxId = Convert.ToInt64(syskey.PARAVALUE);//上次同步的最大id LogHelper.Info("拉取加好友信息:" + MaxId); var companycode = Utility.GetSettingOrNullByKey("DataClientCode"); Dictionary> dicDept = _iww_hhuser_service.GetAllCorpDept(companycode); List logs = new List(); //读取投顾 WW_EXTUSER_PARES 表 OracleParameter[] p = { new OracleParameter(":ID",MaxId) }; string sql = $@"select rownum,ID,RESID,EXTERNAL_USERID,USERID,UNIONID,REMARK,CORPID,CTIME,ISINNERDEPT from WW_EXTUSER_PARES where ID>:ID and rownum <= 1000 order by ID";//=必要:保证 一个客户多个用户电话信息在插入时其中一条插入失败,下次能被获取到 DataSet table = OracleHelper.DataQueray(OracleHelper.TGConn, CommandType.Text, sql, p); //处理外部联系人关系数据 foreach (DataRow row in table.Tables[0].Rows) { var id = Convert.ToInt64(row["ID"].ToString()); MaxId = id > MaxId ? id : MaxId;//更新最大id WW_EXTUSER_PARES wep = new WW_EXTUSER_PARES(); wep.RESID = row["RESID"].ToString(); wep.EXTERNAL_USERID = row["EXTERNAL_USERID"].ToString(); wep.USERID = row["USERID"].ToString(); wep.UNIONID = row["UNIONID"].ToString(); wep.REMAKE = row["REMARK"].ToString(); wep.CORPID = row["CORPID"].ToString(); logs.Add(wep); } //时间由远到近 避免中途出错漏掉数据 //按照顺序 处理获取到的数据 foreach (var item in logs.OrderBy(m => m.CTIME)) { try { var hhuser = _iww_hhuser_service.HHuser_Get(item.USERID, item.CORPID); if (hhuser != null && hhuser.deptid.HasValue && dicDept.ContainsKey(hhuser.corpid) && dicDept[hhuser.corpid].Contains(hhuser.deptid.Value)) { item.ISINNERDEPT = 1;//是内部资源 var res = _wxSzzyorder.UpdateResIdByWwUserName(item.RESID, item.EXTERNAL_USERID, item.USERID, item.CORPID); if (!res) { continue;//处理失败时跳出 } else { //_wxSzzyorder.UpdateIsBoundByResId(resId); var host = Utility.GetSettingOrNullByKey("DataSyncApiUrl"); var url = host + "/api/DataSync"; var data = new { resid = item.RESID, userid = item.EXTERNAL_USERID, deptcode = companycode }; var para = new SYNC_PUSH_DTO() { bidatatype = "Server_WwextUserResid", deptcode = companycode, jsontext = data.ToJson() }; var rep = Utility.PostAjaxData(url, para.ToJson(), Encoding.UTF8); var ret2 = Utility.JSONToObject(rep); if (!ret2.result) { LogHelper.Info("同步到中心点异常:" + para.ToJson()); //message = "关联成功!同步到总部失败!"; } } } else item.ISINNERDEPT = 0; var logRes = _wxSzzyorder.InsertWW_EXTUSER_PARES(item); } catch (Exception e) { LogHelper.Error(e.ToString()); LogHelper.Error("异常JSON:"+item.ToJson()); continue;//处理失败时跳出 } if (logs.Any()) { //处理到数据才修改配置 syskey.PARAVALUE = MaxId.ToString(); //更新系统变量 最后处理数据时间 Common.ValidationErrors errors = new Common.ValidationErrors(); paramter_bl.Update_Parameter(ref errors, syskey); } } } } //public class WwExtUserView //{ // public External_Contact external_contact { get; set; } // public List follow_user { get; set; } // public string corpid { get; set; } //} //public class External_Contact //{ // public string external_userid { get; set; } // public string name { get; set; } // public int type { get; set; } // public string avatar { get; set; } // public int gender { get; set; } // public string unionid { get; set; } //} //public class Follow_User //{ // public string saleeid { get; set; } // public string userid { get; set; } // public string remark { get; set; } // public string description { get; set; } // public long createtime { get; set; } // public string bindtime { get; set; } // public List remark_mobiles { get; set; } // public string uname { get; set; } //} }