IM12345_Api demo - 代码源于 商丘市12345项目

ChatSql.cs 42KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using CallCenterApi.DB;
  7. using System.Data.SqlClient;
  8. using System.Data;
  9. namespace CallCenter.WebChatServer
  10. {
  11. public class ChatSql
  12. {
  13. /// <summary>
  14. /// 增加一条数据
  15. /// </summary>
  16. public int AddUser(T_Chat_User model)
  17. {
  18. StringBuilder strSql = new StringBuilder();
  19. strSql.Append("insert into T_Chat_User(");
  20. strSql.Append("F_Type,F_Name,F_Account,F_OpenId,F_HeadImgUrl,F_MainUserCode,F_OtherUserCode,F_IP,F_State,F_CreateUser,F_CreateTime,F_IsDelete,F_DeleteUser,F_DeleteTime)");
  21. strSql.Append(" values (");
  22. strSql.Append("@F_Type,@F_Name,@F_Account,@F_OpenId,@F_HeadImgUrl,@F_MainUserCode,@F_OtherUserCode,@F_IP,@F_State,@F_CreateUser,@F_CreateTime,@F_IsDelete,@F_DeleteUser,@F_DeleteTime)");
  23. strSql.Append(";select @@IDENTITY");
  24. SqlParameter[] parameters = {
  25. new SqlParameter("@F_Type", SqlDbType.Int,4),
  26. new SqlParameter("@F_Name", SqlDbType.NVarChar,500),
  27. new SqlParameter("@F_Account", SqlDbType.VarChar,500),
  28. new SqlParameter("@F_OpenId", SqlDbType.VarChar,500),
  29. new SqlParameter("@F_HeadImgUrl", SqlDbType.VarChar,500),
  30. new SqlParameter("@F_MainUserCode", SqlDbType.VarChar,50),
  31. new SqlParameter("@F_OtherUserCode", SqlDbType.VarChar,500),
  32. new SqlParameter("@F_IP", SqlDbType.VarChar,50),
  33. new SqlParameter("@F_State", SqlDbType.Int,4),
  34. new SqlParameter("@F_CreateUser", SqlDbType.VarChar,50),
  35. new SqlParameter("@F_CreateTime", SqlDbType.DateTime),
  36. new SqlParameter("@F_IsDelete", SqlDbType.Int,4),
  37. new SqlParameter("@F_DeleteUser", SqlDbType.VarChar,50),
  38. new SqlParameter("@F_DeleteTime", SqlDbType.DateTime)};
  39. parameters[0].Value = model.F_Type;
  40. parameters[1].Value = model.F_Name;
  41. parameters[2].Value = model.F_Account;
  42. parameters[3].Value = model.F_OpenId;
  43. parameters[4].Value = model.F_HeadImgUrl;
  44. parameters[5].Value = model.F_MainUserCode;
  45. parameters[6].Value = model.F_OtherUserCode;
  46. parameters[7].Value = model.F_IP;
  47. parameters[8].Value = model.F_State;
  48. parameters[9].Value = model.F_CreateUser;
  49. parameters[10].Value = model.F_CreateTime;
  50. parameters[11].Value = model.F_IsDelete;
  51. parameters[12].Value = model.F_DeleteUser;
  52. parameters[13].Value = model.F_DeleteTime;
  53. object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);
  54. if (obj == null)
  55. {
  56. return 0;
  57. }
  58. else
  59. {
  60. return Convert.ToInt32(obj);
  61. }
  62. }
  63. /// <summary>
  64. /// 更新一条数据
  65. /// </summary>
  66. public bool UpdateUser(T_Chat_User model)
  67. {
  68. StringBuilder strSql = new StringBuilder();
  69. strSql.Append("update T_Chat_User set ");
  70. strSql.Append("F_Type=@F_Type,");
  71. strSql.Append("F_Name=@F_Name,");
  72. strSql.Append("F_Account=@F_Account,");
  73. strSql.Append("F_OpenId=@F_OpenId,");
  74. strSql.Append("F_HeadImgUrl=@F_HeadImgUrl,");
  75. strSql.Append("F_MainUserCode=@F_MainUserCode,");
  76. strSql.Append("F_OtherUserCode=@F_OtherUserCode,");
  77. strSql.Append("F_IP=@F_IP,");
  78. strSql.Append("F_State=@F_State,");
  79. strSql.Append("F_CreateUser=@F_CreateUser,");
  80. strSql.Append("F_CreateTime=@F_CreateTime,");
  81. strSql.Append("F_IsDelete=@F_IsDelete,");
  82. strSql.Append("F_DeleteUser=@F_DeleteUser,");
  83. strSql.Append("F_DeleteTime=@F_DeleteTime");
  84. strSql.Append(" where F_Id=@F_Id");
  85. SqlParameter[] parameters = {
  86. new SqlParameter("@F_Type", SqlDbType.Int,4),
  87. new SqlParameter("@F_Name", SqlDbType.NVarChar,500),
  88. new SqlParameter("@F_Account", SqlDbType.VarChar,500),
  89. new SqlParameter("@F_OpenId", SqlDbType.VarChar,500),
  90. new SqlParameter("@F_HeadImgUrl", SqlDbType.VarChar,500),
  91. new SqlParameter("@F_MainUserCode", SqlDbType.VarChar,50),
  92. new SqlParameter("@F_OtherUserCode", SqlDbType.VarChar,500),
  93. new SqlParameter("@F_IP", SqlDbType.VarChar,50),
  94. new SqlParameter("@F_State", SqlDbType.Int,4),
  95. new SqlParameter("@F_CreateUser", SqlDbType.VarChar,50),
  96. new SqlParameter("@F_CreateTime", SqlDbType.DateTime),
  97. new SqlParameter("@F_IsDelete", SqlDbType.Int,4),
  98. new SqlParameter("@F_DeleteUser", SqlDbType.VarChar,50),
  99. new SqlParameter("@F_DeleteTime", SqlDbType.DateTime),
  100. new SqlParameter("@F_Id", SqlDbType.Int,4)};
  101. parameters[0].Value = model.F_Type;
  102. parameters[1].Value = model.F_Name;
  103. parameters[2].Value = model.F_Account;
  104. parameters[3].Value = model.F_OpenId;
  105. parameters[4].Value = model.F_HeadImgUrl;
  106. parameters[5].Value = model.F_MainUserCode;
  107. parameters[6].Value = model.F_OtherUserCode;
  108. parameters[7].Value = model.F_IP;
  109. parameters[8].Value = model.F_State;
  110. parameters[9].Value = model.F_CreateUser;
  111. parameters[10].Value = model.F_CreateTime;
  112. parameters[11].Value = model.F_IsDelete;
  113. parameters[12].Value = model.F_DeleteUser;
  114. parameters[13].Value = model.F_DeleteTime;
  115. parameters[14].Value = model.F_Id;
  116. int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
  117. if (rows > 0)
  118. {
  119. return true;
  120. }
  121. else
  122. {
  123. return false;
  124. }
  125. }
  126. /// <summary>
  127. /// 增加一条数据
  128. /// </summary>
  129. public long AddMsg(T_Chat_Message model)
  130. {
  131. StringBuilder strSql = new StringBuilder();
  132. strSql.Append("insert into T_Chat_Message(");
  133. strSql.Append("F_FromUser,F_ToUser,F_Message,F_File,F_HumanClass,F_IP,F_SourceType,F_MessageType,F_State,F_CreateUser,F_CreateTime,F_IsDelete,F_DeleteUser,F_DeleteTime)");
  134. strSql.Append(" values (");
  135. strSql.Append("@F_FromUser,@F_ToUser,@F_Message,@F_File,@F_HumanClass,@F_IP,@F_SourceType,@F_MessageType,@F_State,@F_CreateUser,@F_CreateTime,@F_IsDelete,@F_DeleteUser,@F_DeleteTime)");
  136. strSql.Append(";select @@IDENTITY");
  137. SqlParameter[] parameters = {
  138. new SqlParameter("@F_FromUser", SqlDbType.VarChar,500),
  139. new SqlParameter("@F_ToUser", SqlDbType.VarChar,500),
  140. new SqlParameter("@F_Message", SqlDbType.NVarChar,-1),
  141. new SqlParameter("@F_File", SqlDbType.VarChar,-1),
  142. new SqlParameter("@F_HumanClass", SqlDbType.Int,4),
  143. new SqlParameter("@F_IP", SqlDbType.VarChar,50),
  144. new SqlParameter("@F_SourceType", SqlDbType.Int,4),
  145. new SqlParameter("@F_MessageType", SqlDbType.Int,4),
  146. new SqlParameter("@F_State", SqlDbType.Int,4),
  147. new SqlParameter("@F_CreateUser", SqlDbType.VarChar,500),
  148. new SqlParameter("@F_CreateTime", SqlDbType.DateTime),
  149. new SqlParameter("@F_IsDelete", SqlDbType.Int,4),
  150. new SqlParameter("@F_DeleteUser", SqlDbType.VarChar,50),
  151. new SqlParameter("@F_DeleteTime", SqlDbType.DateTime)};
  152. parameters[0].Value = model.F_FromUser;
  153. parameters[1].Value = model.F_ToUser;
  154. parameters[2].Value = model.F_Message;
  155. parameters[3].Value = model.F_File;
  156. parameters[4].Value = model.F_HumanClass;
  157. parameters[5].Value = model.F_IP;
  158. parameters[6].Value = model.F_SourceType;
  159. parameters[7].Value = model.F_MessageType;
  160. parameters[8].Value = model.F_State;
  161. parameters[9].Value = model.F_CreateUser;
  162. parameters[10].Value = model.F_CreateTime;
  163. parameters[11].Value = model.F_IsDelete;
  164. parameters[12].Value = model.F_DeleteUser;
  165. parameters[13].Value = model.F_DeleteTime;
  166. object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);
  167. if (obj == null)
  168. {
  169. return 0;
  170. }
  171. else
  172. {
  173. return Convert.ToInt64(obj);
  174. }
  175. }
  176. /// <summary>
  177. /// 增加一条数据
  178. /// </summary>
  179. public int AddIP(T_Chat_IPList model)
  180. {
  181. StringBuilder strSql = new StringBuilder();
  182. strSql.Append("insert into T_Chat_IPList(");
  183. strSql.Append("F_OpenId,F_IP,F_Country,F_CountryCode,F_Area,F_AreaCode,F_Region,F_RegionCode,F_City,F_CityCode,F_County,F_CountyCode,F_ISP,F_ISPCode,F_CreateTime,F_Type)");
  184. strSql.Append(" values (");
  185. strSql.Append("@F_OpenId,@F_IP,@F_Country,@F_CountryCode,@F_Area,@F_AreaCode,@F_Region,@F_RegionCode,@F_City,@F_CityCode,@F_County,@F_CountyCode,@F_ISP,@F_ISPCode,@F_CreateTime,@F_Type)");
  186. strSql.Append(";select @@IDENTITY");
  187. SqlParameter[] parameters = {
  188. new SqlParameter("@F_OpenId", SqlDbType.VarChar,500),
  189. new SqlParameter("@F_IP", SqlDbType.VarChar,50),
  190. new SqlParameter("@F_Country", SqlDbType.NVarChar,50),
  191. new SqlParameter("@F_CountryCode", SqlDbType.VarChar,50),
  192. new SqlParameter("@F_Area", SqlDbType.NVarChar,50),
  193. new SqlParameter("@F_AreaCode", SqlDbType.VarChar,50),
  194. new SqlParameter("@F_Region", SqlDbType.NVarChar,50),
  195. new SqlParameter("@F_RegionCode", SqlDbType.VarChar,50),
  196. new SqlParameter("@F_City", SqlDbType.NVarChar,50),
  197. new SqlParameter("@F_CityCode", SqlDbType.VarChar,50),
  198. new SqlParameter("@F_County", SqlDbType.NVarChar,50),
  199. new SqlParameter("@F_CountyCode", SqlDbType.VarChar,50),
  200. new SqlParameter("@F_ISP", SqlDbType.NVarChar,50),
  201. new SqlParameter("@F_ISPCode", SqlDbType.VarChar,50),
  202. new SqlParameter("@F_CreateTime", SqlDbType.DateTime),
  203. new SqlParameter("@F_Type", SqlDbType.Int,4)};
  204. parameters[0].Value = model.F_OpenId;
  205. parameters[1].Value = model.F_IP;
  206. parameters[2].Value = model.F_Country;
  207. parameters[3].Value = model.F_CountryCode;
  208. parameters[4].Value = model.F_Area;
  209. parameters[5].Value = model.F_AreaCode;
  210. parameters[6].Value = model.F_Region;
  211. parameters[7].Value = model.F_RegionCode;
  212. parameters[8].Value = model.F_City;
  213. parameters[9].Value = model.F_CityCode;
  214. parameters[10].Value = model.F_County;
  215. parameters[11].Value = model.F_CountyCode;
  216. parameters[12].Value = model.F_ISP;
  217. parameters[13].Value = model.F_ISPCode;
  218. parameters[14].Value = model.F_CreateTime;
  219. parameters[15].Value = model.F_Type;
  220. object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);
  221. if (obj == null)
  222. {
  223. return 0;
  224. }
  225. else
  226. {
  227. return Convert.ToInt32(obj);
  228. }
  229. }
  230. /// <summary>
  231. /// 增加一条数据
  232. /// </summary>
  233. public int AddInOut(T_Chat_InOut model)
  234. {
  235. StringBuilder strSql = new StringBuilder();
  236. strSql.Append("insert into T_Chat_InOut(");
  237. strSql.Append("F_OpenId,F_IP,F_InTime,F_OutTime,F_Type)");
  238. strSql.Append(" values (");
  239. strSql.Append("@F_OpenId,@F_IP,@F_InTime,@F_OutTime,@F_Type)");
  240. strSql.Append(";select @@IDENTITY");
  241. SqlParameter[] parameters = {
  242. new SqlParameter("@F_OpenId", SqlDbType.VarChar,50),
  243. new SqlParameter("@F_IP", SqlDbType.VarChar,50),
  244. new SqlParameter("@F_InTime", SqlDbType.DateTime),
  245. new SqlParameter("@F_OutTime", SqlDbType.DateTime),
  246. new SqlParameter("@F_Type", SqlDbType.Int,4)};
  247. parameters[0].Value = model.F_OpenId;
  248. parameters[1].Value = model.F_IP;
  249. parameters[2].Value = model.F_InTime;
  250. parameters[3].Value = model.F_OutTime;
  251. parameters[4].Value = model.F_Type;
  252. object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);
  253. if (obj == null)
  254. {
  255. return 0;
  256. }
  257. else
  258. {
  259. return Convert.ToInt32(obj);
  260. }
  261. }
  262. /// <summary>
  263. /// 更新一条数据
  264. /// </summary>
  265. public bool UpdateInOut(T_Chat_InOut model)
  266. {
  267. StringBuilder strSql = new StringBuilder();
  268. strSql.Append("update T_Chat_InOut set ");
  269. strSql.Append("F_OpenId=@F_OpenId,");
  270. strSql.Append("F_IP=@F_IP,");
  271. strSql.Append("F_InTime=@F_InTime,");
  272. strSql.Append("F_OutTime=@F_OutTime,");
  273. strSql.Append("F_Type=@F_Type");
  274. strSql.Append(" where F_Id=@F_Id");
  275. SqlParameter[] parameters = {
  276. new SqlParameter("@F_OpenId", SqlDbType.VarChar,50),
  277. new SqlParameter("@F_IP", SqlDbType.VarChar,50),
  278. new SqlParameter("@F_InTime", SqlDbType.DateTime),
  279. new SqlParameter("@F_OutTime", SqlDbType.DateTime),
  280. new SqlParameter("@F_Type", SqlDbType.Int,4),
  281. new SqlParameter("@F_Id", SqlDbType.Int,4)};
  282. parameters[0].Value = model.F_OpenId;
  283. parameters[1].Value = model.F_IP;
  284. parameters[2].Value = model.F_InTime;
  285. parameters[3].Value = model.F_OutTime;
  286. parameters[4].Value = model.F_Type;
  287. parameters[5].Value = model.F_Id;
  288. int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
  289. if (rows > 0)
  290. {
  291. return true;
  292. }
  293. else
  294. {
  295. return false;
  296. }
  297. }
  298. /// <summary>
  299. /// 更新签出时间
  300. /// </summary>
  301. public bool UpdateOutTime(string code)
  302. {
  303. string sql = "update T_Chat_InOut set F_OutTime=getdate() where F_OpenId='"+ code + "' and isnull(F_OutTime,'')=''";
  304. int rows = DbHelperSQL.ExecuteSql(sql);
  305. if (rows > 0)
  306. {
  307. return true;
  308. }
  309. else
  310. {
  311. return false;
  312. }
  313. }
  314. /// <summary>
  315. /// 获取客户记录
  316. /// </summary>
  317. /// <returns></returns>
  318. public DataTable GetChatLog(string code, out long nextnum, out int isfirst, int count = 10, long num = 0)
  319. {
  320. string sql = "select top " + count + " * from T_Chat_Message where (F_FromUser='" + code + "' or F_ToUser='" + code + "')";
  321. if (num > 0)
  322. {
  323. sql += " and F_Id <" + num;
  324. }
  325. sql += " order by F_CreateTime desc";
  326. var dt = DbHelperSQL.Query(sql).Tables[0];
  327. int n = dt.Rows.Count;
  328. nextnum = 0;
  329. if (n > 0)
  330. {
  331. nextnum = long.Parse(dt.Rows[n - 1]["F_Id"].ToString());
  332. }
  333. isfirst = 0;
  334. if (n < count)
  335. {
  336. isfirst = 1;
  337. }
  338. return dt;
  339. }
  340. /// <summary>
  341. /// 获取最近记录的时间
  342. /// </summary>
  343. /// <returns></returns>
  344. public string GetMessageDateByCode(string code)
  345. {
  346. string sql = "select MAX(F_CreateTime) from T_Chat_Message where (F_FromUser='" + code + "' or F_ToUser='" + code + "')";
  347. object obj = DbHelperSQL.GetSingle(sql);
  348. if (obj == null)
  349. return "";
  350. else
  351. return obj.ToString();
  352. }
  353. /// <summary>
  354. /// 获取客户信息
  355. /// </summary>
  356. /// <returns></returns>
  357. public T_Chat_User GetCusUser(string code)
  358. {
  359. string sql = "select top 1 * from T_Chat_User where F_OpenId='" + code + "' order by F_CreateTime desc";
  360. var dt = DbHelperSQL.Query(sql).Tables[0];
  361. if (dt.Rows.Count > 0)
  362. {
  363. var row = dt.Rows[0];
  364. T_Chat_User model = new T_Chat_User();
  365. if (row["F_Id"] != null && row["F_Id"].ToString() != "")
  366. {
  367. model.F_Id = int.Parse(row["F_Id"].ToString());
  368. }
  369. if (row["F_Type"] != null && row["F_Type"].ToString() != "")
  370. {
  371. model.F_Type = int.Parse(row["F_Type"].ToString());
  372. }
  373. if (row["F_Name"] != null)
  374. {
  375. model.F_Name = row["F_Name"].ToString();
  376. }
  377. if (row["F_Account"] != null)
  378. {
  379. model.F_Account = row["F_Account"].ToString();
  380. }
  381. if (row["F_OpenId"] != null)
  382. {
  383. model.F_OpenId = row["F_OpenId"].ToString();
  384. }
  385. if (row["F_HeadImgUrl"] != null)
  386. {
  387. model.F_HeadImgUrl = row["F_HeadImgUrl"].ToString();
  388. }
  389. if (row["F_MainUserCode"] != null)
  390. {
  391. model.F_MainUserCode = row["F_MainUserCode"].ToString();
  392. }
  393. if (row["F_OtherUserCode"] != null)
  394. {
  395. model.F_OtherUserCode = row["F_OtherUserCode"].ToString();
  396. }
  397. if (row["F_IP"] != null)
  398. {
  399. model.F_IP = row["F_IP"].ToString();
  400. }
  401. if (row["F_State"] != null && row["F_State"].ToString() != "")
  402. {
  403. model.F_State = int.Parse(row["F_State"].ToString());
  404. }
  405. if (row["F_CreateUser"] != null)
  406. {
  407. model.F_CreateUser = row["F_CreateUser"].ToString();
  408. }
  409. if (row["F_CreateTime"] != null && row["F_CreateTime"].ToString() != "")
  410. {
  411. model.F_CreateTime = DateTime.Parse(row["F_CreateTime"].ToString());
  412. }
  413. if (row["F_IsDelete"] != null && row["F_IsDelete"].ToString() != "")
  414. {
  415. model.F_IsDelete = int.Parse(row["F_IsDelete"].ToString());
  416. }
  417. if (row["F_DeleteUser"] != null)
  418. {
  419. model.F_DeleteUser = row["F_DeleteUser"].ToString();
  420. }
  421. if (row["F_DeleteTime"] != null && row["F_DeleteTime"].ToString() != "")
  422. {
  423. model.F_DeleteTime = DateTime.Parse(row["F_DeleteTime"].ToString());
  424. }
  425. return model;
  426. }
  427. else
  428. {
  429. return null;
  430. }
  431. }
  432. /// <summary>
  433. /// 获取客户信息
  434. /// </summary>
  435. /// <returns></returns>
  436. public T_Chat_IPList GetIPInfo(string ip, string openid)
  437. {
  438. string sql = "select top 1 * from T_Chat_IPList where F_IP='" + ip + "' and F_OpenId='" + openid + "' order by F_CreateTime desc";
  439. var dt = DbHelperSQL.Query(sql).Tables[0];
  440. if (dt.Rows.Count > 0)
  441. {
  442. var row = dt.Rows[0];
  443. T_Chat_IPList model = new T_Chat_IPList();
  444. if (row["F_Id"] != null && row["F_Id"].ToString() != "")
  445. {
  446. model.F_Id = int.Parse(row["F_Id"].ToString());
  447. }
  448. if (row["F_OpenId"] != null)
  449. {
  450. model.F_OpenId = row["F_OpenId"].ToString();
  451. }
  452. if (row["F_IP"] != null)
  453. {
  454. model.F_IP = row["F_IP"].ToString();
  455. }
  456. if (row["F_Country"] != null)
  457. {
  458. model.F_Country = row["F_Country"].ToString();
  459. }
  460. if (row["F_CountryCode"] != null)
  461. {
  462. model.F_CountryCode = row["F_CountryCode"].ToString();
  463. }
  464. if (row["F_Area"] != null)
  465. {
  466. model.F_Area = row["F_Area"].ToString();
  467. }
  468. if (row["F_AreaCode"] != null)
  469. {
  470. model.F_AreaCode = row["F_AreaCode"].ToString();
  471. }
  472. if (row["F_Region"] != null)
  473. {
  474. model.F_Region = row["F_Region"].ToString();
  475. }
  476. if (row["F_RegionCode"] != null)
  477. {
  478. model.F_RegionCode = row["F_RegionCode"].ToString();
  479. }
  480. if (row["F_City"] != null)
  481. {
  482. model.F_City = row["F_City"].ToString();
  483. }
  484. if (row["F_CityCode"] != null)
  485. {
  486. model.F_CityCode = row["F_CityCode"].ToString();
  487. }
  488. if (row["F_County"] != null)
  489. {
  490. model.F_County = row["F_County"].ToString();
  491. }
  492. if (row["F_CountyCode"] != null)
  493. {
  494. model.F_CountyCode = row["F_CountyCode"].ToString();
  495. }
  496. if (row["F_ISP"] != null)
  497. {
  498. model.F_ISP = row["F_ISP"].ToString();
  499. }
  500. if (row["F_ISPCode"] != null)
  501. {
  502. model.F_ISPCode = row["F_ISPCode"].ToString();
  503. }
  504. if (row["F_CreateTime"] != null && row["F_CreateTime"].ToString() != "")
  505. {
  506. model.F_CreateTime = DateTime.Parse(row["F_CreateTime"].ToString());
  507. }
  508. if (row["F_Type"] != null && row["F_Type"].ToString() != "")
  509. {
  510. model.F_Type = int.Parse(row["F_Type"].ToString());
  511. }
  512. return model;
  513. }
  514. else
  515. {
  516. return null;
  517. }
  518. }
  519. /// <summary>
  520. /// 获取客服名称
  521. /// </summary>
  522. /// <returns></returns>
  523. public string GetUserName(string usercode)
  524. {
  525. string sql = "select F_UserName from T_Sys_UserAccount where F_UserCode='" + usercode + "'";
  526. string name = DbHelperSQL.GetSingle(sql).ToString();
  527. return name;
  528. }
  529. /// <summary>
  530. /// 是否黑名单
  531. /// </summary>
  532. /// <returns></returns>
  533. public bool IsBlack(string ip)
  534. {
  535. string sql = "select F_Id from T_Chat_IPBlackList where F_IP='" + ip + "' and F_IsDelete=0 and F_State=1";
  536. return DbHelperSQL.GetSingle(sql)!=null;
  537. }
  538. /// <summary>
  539. /// 是否存入ip
  540. /// </summary>
  541. /// <returns></returns>
  542. public bool IsExitIP(string ip,string openid)
  543. {
  544. string sql = "select F_Id from T_Chat_IPList where F_IP='" + ip + "' and F_OpenId='" + openid + "' ";
  545. return DbHelperSQL.GetSingle(sql) != null;
  546. }
  547. private object lockcode = new object();
  548. /// <summary>
  549. /// 获取游客ID
  550. /// </summary>
  551. /// <returns></returns>
  552. public string GetCode()
  553. {
  554. lock (lockcode)
  555. {
  556. string code = "";
  557. string pre = "Web" + DateTime.Now.ToString("yyyyMMdd");
  558. string sql = "select Top 1 F_OpenId from T_Chat_User where substring(F_OpenId,1,11)='" + pre + "' order by F_CreateTime desc";
  559. var obj = DbHelperSQL.GetSingle(sql);
  560. if (obj == null)
  561. {
  562. code = pre + "00001";
  563. }
  564. else
  565. {
  566. string lastcode = obj.ToString();
  567. int con = Int32.Parse(lastcode.Substring(lastcode.Length - 5, 5));
  568. code = pre + (con + 1).ToString("00000");
  569. }
  570. T_Chat_User user = new T_Chat_User();
  571. user.F_OpenId = code;
  572. user.F_Account = code;
  573. user.F_Type = 1;
  574. user.F_State = 0;
  575. user.F_IsDelete = 0;
  576. user.F_CreateTime = DateTime.Now;
  577. AddUser(user);
  578. return code;
  579. }
  580. }
  581. #region 支持多入口菜单 - 例如:欢迎词
  582. /// <summary>
  583. /// 获取接入欢迎语
  584. /// </summary>
  585. /// <returns></returns>
  586. public string GetWebcomeByGroupId(int groupid)
  587. {
  588. // 后期如果坐席有分组可以用
  589. string sql = "SELECT TOP 1 F_Welcome FROM T_Chat_IM_Entrance WHERE F_State = 0 AND F_IsDelete = 0";
  590. object obj = DbHelperSQL.GetSingle(sql);
  591. if (obj == null)
  592. return "";
  593. else
  594. return obj.ToString();
  595. }
  596. #endregion
  597. #region 快速回复 - 例如:欢迎词,结束语,常用语,公共用语等
  598. /// <summary>
  599. /// 获取快速回复内容 - 还没有用到
  600. /// </summary>
  601. /// <returns></returns>
  602. public string GetReplyContenByCId(int classid)
  603. {
  604. string sql = "SELECT TOP 1 F_ReplyContent FROM dbo.T_Chat_IM_ReplyList WHERE F_IsDelete = 0 AND F_ClassId=" + classid + " ";
  605. object obj = DbHelperSQL.GetSingle(sql);
  606. if (obj == null)
  607. return "";
  608. else
  609. return obj.ToString();
  610. }
  611. #endregion
  612. #region 智能机器人 - 关键词
  613. /// <summary>
  614. /// 获取最近记录的时间
  615. /// </summary>
  616. /// <returns></returns>
  617. public string GetSmartRobotByKey(string keyword)
  618. {
  619. string keyWords = KeywordSpliter.DoGetKeyword(keyword);
  620. string[] sArrayKey = keyWords.Trim().Split(',');
  621. string sqlStr = "";
  622. object obj = null;
  623. foreach (string key in sArrayKey)
  624. {
  625. if (key.Trim() != "")
  626. sqlStr += " or F_KeyWord like '%" + key + "%'";
  627. }
  628. if (!string.IsNullOrEmpty(sqlStr))
  629. {
  630. // 去掉前面的or,且拼接()
  631. StringBuilder sb = new StringBuilder(sqlStr);
  632. sb.Replace(" or ", " AND (", 0, 4);
  633. sqlStr = sb.ToString();
  634. sqlStr += ")";
  635. string sql = "SELECT TOP 1 F_Content FROM dbo.T_Chat_IM_SmartRobot WHERE 1=1 AND F_IsDelete = 0 AND F_State = 1 " + sqlStr + " ";
  636. obj = DbHelperSQL.GetSingle(sql);
  637. }
  638. if (obj == null)
  639. return "";
  640. else
  641. return obj.ToString();
  642. }
  643. #endregion
  644. #region 对象 类
  645. /// <summary>
  646. /// 客户类
  647. /// </summary>
  648. public class T_Chat_User
  649. {
  650. public T_Chat_User()
  651. { }
  652. #region Model
  653. private int _f_id;
  654. private int? _f_type;
  655. private string _f_name;
  656. private string _f_account;
  657. private string _f_openid;
  658. private string _f_headimgurl;
  659. private string _f_mainusercode;
  660. private string _f_otherusercode;
  661. private string _f_ip;
  662. private int? _f_state;
  663. private string _f_createuser;
  664. private DateTime? _f_createtime;
  665. private int? _f_isdelete;
  666. private string _f_deleteuser;
  667. private DateTime? _f_deletetime;
  668. /// <summary>
  669. ///
  670. /// </summary>
  671. public int F_Id
  672. {
  673. set { _f_id = value; }
  674. get { return _f_id; }
  675. }
  676. /// <summary>
  677. /// 类型(1网站2微信)
  678. /// </summary>
  679. public int? F_Type
  680. {
  681. set { _f_type = value; }
  682. get { return _f_type; }
  683. }
  684. /// <summary>
  685. /// 昵称
  686. /// </summary>
  687. public string F_Name
  688. {
  689. set { _f_name = value; }
  690. get { return _f_name; }
  691. }
  692. /// <summary>
  693. /// 微信账号或者网站账号
  694. /// </summary>
  695. public string F_Account
  696. {
  697. set { _f_account = value; }
  698. get { return _f_account; }
  699. }
  700. /// <summary>
  701. /// 微信标识或者网站标识
  702. /// </summary>
  703. public string F_OpenId
  704. {
  705. set { _f_openid = value; }
  706. get { return _f_openid; }
  707. }
  708. /// <summary>
  709. /// 头像url
  710. /// </summary>
  711. public string F_HeadImgUrl
  712. {
  713. set { _f_headimgurl = value; }
  714. get { return _f_headimgurl; }
  715. }
  716. /// <summary>
  717. /// 主客服
  718. /// </summary>
  719. public string F_MainUserCode
  720. {
  721. set { _f_mainusercode = value; }
  722. get { return _f_mainusercode; }
  723. }
  724. /// <summary>
  725. /// 副客服
  726. /// </summary>
  727. public string F_OtherUserCode
  728. {
  729. set { _f_otherusercode = value; }
  730. get { return _f_otherusercode; }
  731. }
  732. /// <summary>
  733. /// IP
  734. /// </summary>
  735. public string F_IP
  736. {
  737. set { _f_ip = value; }
  738. get { return _f_ip; }
  739. }
  740. /// <summary>
  741. /// 状态
  742. /// </summary>
  743. public int? F_State
  744. {
  745. set { _f_state = value; }
  746. get { return _f_state; }
  747. }
  748. /// <summary>
  749. ///
  750. /// </summary>
  751. public string F_CreateUser
  752. {
  753. set { _f_createuser = value; }
  754. get { return _f_createuser; }
  755. }
  756. /// <summary>
  757. ///
  758. /// </summary>
  759. public DateTime? F_CreateTime
  760. {
  761. set { _f_createtime = value; }
  762. get { return _f_createtime; }
  763. }
  764. /// <summary>
  765. ///
  766. /// </summary>
  767. public int? F_IsDelete
  768. {
  769. set { _f_isdelete = value; }
  770. get { return _f_isdelete; }
  771. }
  772. /// <summary>
  773. ///
  774. /// </summary>
  775. public string F_DeleteUser
  776. {
  777. set { _f_deleteuser = value; }
  778. get { return _f_deleteuser; }
  779. }
  780. /// <summary>
  781. ///
  782. /// </summary>
  783. public DateTime? F_DeleteTime
  784. {
  785. set { _f_deletetime = value; }
  786. get { return _f_deletetime; }
  787. }
  788. #endregion Model
  789. }
  790. /// <summary>
  791. /// 消息类
  792. /// </summary>
  793. public class T_Chat_Message
  794. {
  795. public T_Chat_Message()
  796. { }
  797. #region Model
  798. private long _f_id;
  799. private string _f_fromuser;
  800. private string _f_touser;
  801. private string _f_message;
  802. private string _f_file;
  803. private string _f_ip;
  804. private int? _f_humanclass = 0;
  805. private int? _f_sourcetype;
  806. private int? _f_messagetype;
  807. private int? _f_state;
  808. private string _f_createuser;
  809. private DateTime? _f_createtime;
  810. private int? _f_isdelete;
  811. private string _f_deleteuser;
  812. private DateTime? _f_deletetime;
  813. /// <summary>
  814. ///
  815. /// </summary>
  816. public long F_Id
  817. {
  818. set { _f_id = value; }
  819. get { return _f_id; }
  820. }
  821. /// <summary>
  822. /// 发送人
  823. /// </summary>
  824. public string F_FromUser
  825. {
  826. set { _f_fromuser = value; }
  827. get { return _f_fromuser; }
  828. }
  829. /// <summary>
  830. /// 接收人
  831. /// </summary>
  832. public string F_ToUser
  833. {
  834. set { _f_touser = value; }
  835. get { return _f_touser; }
  836. }
  837. /// <summary>
  838. /// 内容
  839. /// </summary>
  840. public string F_Message
  841. {
  842. set { _f_message = value; }
  843. get { return _f_message; }
  844. }
  845. /// <summary>
  846. /// 附件
  847. /// </summary>
  848. public string F_File
  849. {
  850. set { _f_file = value; }
  851. get { return _f_file; }
  852. }
  853. /// <summary>
  854. /// 发送人(判断图像 0不知 1客服 2客户 3机器人)
  855. /// </summary>
  856. public int? F_HumanClass
  857. {
  858. set { _f_humanclass = value; }
  859. get { return _f_humanclass; }
  860. }
  861. /// <summary>
  862. /// IP
  863. /// </summary>
  864. public string F_IP
  865. {
  866. set { _f_ip = value; }
  867. get { return _f_ip; }
  868. }
  869. /// <summary>
  870. /// 类型(1网站2微信)
  871. /// </summary>
  872. public int? F_SourceType
  873. {
  874. set { _f_sourcetype = value; }
  875. get { return _f_sourcetype; }
  876. }
  877. /// <summary>
  878. /// 消息类型(1文字消息,2列表消息,3图片/视频/语音)
  879. /// </summary>
  880. public int? F_MessageType
  881. {
  882. set { _f_messagetype = value; }
  883. get { return _f_messagetype; }
  884. }
  885. /// <summary>
  886. /// 状态
  887. /// </summary>
  888. public int? F_State
  889. {
  890. set { _f_state = value; }
  891. get { return _f_state; }
  892. }
  893. /// <summary>
  894. ///
  895. /// </summary>
  896. public string F_CreateUser
  897. {
  898. set { _f_createuser = value; }
  899. get { return _f_createuser; }
  900. }
  901. /// <summary>
  902. ///
  903. /// </summary>
  904. public DateTime? F_CreateTime
  905. {
  906. set { _f_createtime = value; }
  907. get { return _f_createtime; }
  908. }
  909. /// <summary>
  910. ///
  911. /// </summary>
  912. public int? F_IsDelete
  913. {
  914. set { _f_isdelete = value; }
  915. get { return _f_isdelete; }
  916. }
  917. /// <summary>
  918. ///
  919. /// </summary>
  920. public string F_DeleteUser
  921. {
  922. set { _f_deleteuser = value; }
  923. get { return _f_deleteuser; }
  924. }
  925. /// <summary>
  926. ///
  927. /// </summary>
  928. public DateTime? F_DeleteTime
  929. {
  930. set { _f_deletetime = value; }
  931. get { return _f_deletetime; }
  932. }
  933. #endregion Model
  934. }
  935. /// <summary>
  936. /// 用户IP类
  937. /// </summary>
  938. public class T_Chat_IPList
  939. {
  940. public T_Chat_IPList()
  941. { }
  942. #region Model
  943. private int _f_id;
  944. private string _f_openid;
  945. private string _f_ip;
  946. private string _f_country;
  947. private string _f_countrycode;
  948. private string _f_area;
  949. private string _f_areacode;
  950. private string _f_region;
  951. private string _f_regioncode;
  952. private string _f_city;
  953. private string _f_citycode;
  954. private string _f_county;
  955. private string _f_countycode;
  956. private string _f_isp;
  957. private string _f_ispcode;
  958. private DateTime? _f_createtime;
  959. private int? _f_type;
  960. /// <summary>
  961. ///
  962. /// </summary>
  963. public int F_Id
  964. {
  965. set { _f_id = value; }
  966. get { return _f_id; }
  967. }
  968. /// <summary>
  969. ///
  970. /// </summary>
  971. public string F_OpenId
  972. {
  973. set { _f_openid = value; }
  974. get { return _f_openid; }
  975. }
  976. /// <summary>
  977. ///
  978. /// </summary>
  979. public string F_IP
  980. {
  981. set { _f_ip = value; }
  982. get { return _f_ip; }
  983. }
  984. /// <summary>
  985. ///
  986. /// </summary>
  987. public string F_Country
  988. {
  989. set { _f_country = value; }
  990. get { return _f_country; }
  991. }
  992. /// <summary>
  993. ///
  994. /// </summary>
  995. public string F_CountryCode
  996. {
  997. set { _f_countrycode = value; }
  998. get { return _f_countrycode; }
  999. }
  1000. /// <summary>
  1001. ///
  1002. /// </summary>
  1003. public string F_Area
  1004. {
  1005. set { _f_area = value; }
  1006. get { return _f_area; }
  1007. }
  1008. /// <summary>
  1009. ///
  1010. /// </summary>
  1011. public string F_AreaCode
  1012. {
  1013. set { _f_areacode = value; }
  1014. get { return _f_areacode; }
  1015. }
  1016. /// <summary>
  1017. ///
  1018. /// </summary>
  1019. public string F_Region
  1020. {
  1021. set { _f_region = value; }
  1022. get { return _f_region; }
  1023. }
  1024. /// <summary>
  1025. ///
  1026. /// </summary>
  1027. public string F_RegionCode
  1028. {
  1029. set { _f_regioncode = value; }
  1030. get { return _f_regioncode; }
  1031. }
  1032. /// <summary>
  1033. ///
  1034. /// </summary>
  1035. public string F_City
  1036. {
  1037. set { _f_city = value; }
  1038. get { return _f_city; }
  1039. }
  1040. /// <summary>
  1041. ///
  1042. /// </summary>
  1043. public string F_CityCode
  1044. {
  1045. set { _f_citycode = value; }
  1046. get { return _f_citycode; }
  1047. }
  1048. /// <summary>
  1049. ///
  1050. /// </summary>
  1051. public string F_County
  1052. {
  1053. set { _f_county = value; }
  1054. get { return _f_county; }
  1055. }
  1056. /// <summary>
  1057. ///
  1058. /// </summary>
  1059. public string F_CountyCode
  1060. {
  1061. set { _f_countycode = value; }
  1062. get { return _f_countycode; }
  1063. }
  1064. /// <summary>
  1065. ///
  1066. /// </summary>
  1067. public string F_ISP
  1068. {
  1069. set { _f_isp = value; }
  1070. get { return _f_isp; }
  1071. }
  1072. /// <summary>
  1073. ///
  1074. /// </summary>
  1075. public string F_ISPCode
  1076. {
  1077. set { _f_ispcode = value; }
  1078. get { return _f_ispcode; }
  1079. }
  1080. /// <summary>
  1081. ///
  1082. /// </summary>
  1083. public DateTime? F_CreateTime
  1084. {
  1085. set { _f_createtime = value; }
  1086. get { return _f_createtime; }
  1087. }
  1088. /// <summary>
  1089. ///
  1090. /// </summary>
  1091. public int? F_Type
  1092. {
  1093. set { _f_type = value; }
  1094. get { return _f_type; }
  1095. }
  1096. #endregion Model
  1097. }
  1098. /// <summary>
  1099. /// 用户签入签出时间
  1100. /// </summary>
  1101. public class T_Chat_InOut
  1102. {
  1103. public T_Chat_InOut()
  1104. { }
  1105. #region Model
  1106. private int _f_id;
  1107. private string _f_openid;
  1108. private string _f_ip;
  1109. private DateTime? _f_intime;
  1110. private DateTime? _f_outtime;
  1111. private int? _f_type;
  1112. /// <summary>
  1113. ///
  1114. /// </summary>
  1115. public int F_Id
  1116. {
  1117. set { _f_id = value; }
  1118. get { return _f_id; }
  1119. }
  1120. /// <summary>
  1121. ///
  1122. /// </summary>
  1123. public string F_OpenId
  1124. {
  1125. set { _f_openid = value; }
  1126. get { return _f_openid; }
  1127. }
  1128. /// <summary>
  1129. ///
  1130. /// </summary>
  1131. public string F_IP
  1132. {
  1133. set { _f_ip = value; }
  1134. get { return _f_ip; }
  1135. }
  1136. /// <summary>
  1137. ///
  1138. /// </summary>
  1139. public DateTime? F_InTime
  1140. {
  1141. set { _f_intime = value; }
  1142. get { return _f_intime; }
  1143. }
  1144. /// <summary>
  1145. ///
  1146. /// </summary>
  1147. public DateTime? F_OutTime
  1148. {
  1149. set { _f_outtime = value; }
  1150. get { return _f_outtime; }
  1151. }
  1152. /// <summary>
  1153. /// 用户类型(1客服,2游客)
  1154. /// </summary>
  1155. public int? F_Type
  1156. {
  1157. set { _f_type = value; }
  1158. get { return _f_type; }
  1159. }
  1160. #endregion Model
  1161. }
  1162. #endregion
  1163. }
  1164. }