MyWindowsService 录音批量下载服务源代码 vs2017 - 思念食品

MyServlet.cs 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618
  1. using LitJson;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Net;
  7. using System.Text;
  8. namespace WindowsServiceClient
  9. {
  10. class MyServlet : Servlet
  11. {
  12. public override void onCreate()
  13. {
  14. base.onCreate();
  15. }
  16. public class Info
  17. {
  18. public string state { get; set; }
  19. public string message { get; set; }
  20. public List<T_Call_CallRecords> CallList { get; set; }
  21. public config config { get; set; }
  22. }
  23. /// <summary>
  24. /// onGet请求
  25. /// </summary>
  26. /// <param name="request"></param>
  27. /// <param name="response"></param>
  28. public override void onGet(HttpListenerRequest request, HttpListenerResponse response)
  29. {
  30. Console.WriteLine("GET:" + request.Url);
  31. bool isContains = request.Url.ToString().Contains("?");
  32. if (isContains)
  33. {
  34. string msg = request.Url.ToString().Split('?')[1];
  35. string ral = Get("http://117.160.143.199:4624/Callrecords/Sound?" + msg);
  36. Info rt = JsonMapper.ToObject<Info>(ral);
  37. byte[] buffer = null;
  38. if (rt.CallList.Count > 0)
  39. {
  40. ExitSound(rt.CallList, rt.config);
  41. buffer = Encoding.UTF8.GetBytes("{state:\"success\",message:\"success\",\"data\":\""+ rt.CallList.Count + "\"}");
  42. }
  43. else {
  44. buffer = Encoding.UTF8.GetBytes("{state:\"success\",message:\"success\",\"data\":\"0\"}");
  45. }
  46. System.IO.Stream output = response.OutputStream;
  47. output.Write(buffer, 0, buffer.Length);
  48. output.Close();
  49. }
  50. //You must close the output stream.
  51. // listener.Stop();
  52. }
  53. Dictionary<string, string> header = new Dictionary<string, string>();
  54. /// <summary>
  55. /// Get请求
  56. /// </summary>
  57. /// <param name="url"></param>
  58. /// <returns></returns>
  59. private string Get(string url)
  60. {
  61. string result = "";
  62. StringBuilder builder = new StringBuilder();
  63. builder.Append(url);
  64. HttpWebRequest req = (HttpWebRequest)WebRequest.Create(builder.ToString());
  65. if (header != null)
  66. {
  67. foreach (var keyValuePair in header)
  68. {
  69. req.Headers.Add(keyValuePair.Key, keyValuePair.Value);
  70. }
  71. }
  72. //添加参数
  73. HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
  74. Stream stream = resp.GetResponseStream();
  75. try
  76. {
  77. //获取内容
  78. using (StreamReader reader = new StreamReader(stream))
  79. {
  80. result = reader.ReadToEnd();
  81. }
  82. }
  83. finally
  84. {
  85. stream.Close();
  86. }
  87. return result;
  88. }
  89. /// <summary>
  90. /// onPost请求
  91. /// </summary>
  92. /// <param name="request"></param>
  93. /// <param name="response"></param>
  94. public override void onPost(HttpListenerRequest request, HttpListenerResponse response)
  95. {
  96. Console.WriteLine("POST:" + request.Url);
  97. byte[] res = Encoding.UTF8.GetBytes("OK2");
  98. response.OutputStream.Write(res, 0, res.Length);
  99. }
  100. /// <summary>
  101. /// StartLoop请求
  102. /// </summary>
  103. /// <param name="msg"></param>
  104. private void StartLoop(string msg)
  105. {
  106. string ral = Get("http://117.160.143.199:4624/Callrecords/Sound?" + msg);
  107. Console.Write(ral);
  108. }
  109. #region 批量下载录音文件
  110. /// <summary>
  111. /// 批量下载录音文件
  112. /// </summary>
  113. /// <returns></returns>
  114. public void ExitSound(List<T_Call_CallRecords> CallList, config config)
  115. {
  116. // string filePath = Configs.GetValue("Sound_recording");
  117. System.IO.DriveInfo[] allDrives = System.IO.DriveInfo.GetDrives();
  118. string filePath = string.Empty;
  119. // 判断磁盘是否存在,不存在直接保存在C盘
  120. string disk = "D:";
  121. if (!Directory.Exists(disk))
  122. filePath = "C:" + "\\CallCenter_Sound\\";
  123. else
  124. filePath = "D:" + "\\CallCenter_Sound\\";
  125. // 如果文件不存在,创建文件; 如果存在,跳过 
  126. try
  127. {
  128. if (!Directory.Exists(filePath))
  129. {
  130. Directory.CreateDirectory(filePath);
  131. }
  132. if (CallList != null)
  133. {
  134. int iii = 0;
  135. foreach (var it in CallList)
  136. {
  137. string FilePath = "";
  138. if (it.FilePath != "" && config != null && !string.IsNullOrEmpty(config.F_ParamValue))
  139. {
  140. var ym = config.F_ParamValue;
  141. if (ym.Substring(ym.Length - 1) == "/")
  142. {
  143. ym = ym.Substring(0, ym.Length - 1);
  144. }
  145. FilePath = ym + it.FilePath.Substring(it.FilePath.IndexOf(':') + 1).Replace('\\', '/');
  146. }
  147. string filename = "l" + it.FilePath.Split('l')[1];
  148. filename = filename.Split('.')[0] + "_" + it.CallNumber + ".mp3";
  149. try
  150. {
  151. string[] sArray = filename.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries);
  152. string flie = filePath + "\\" + sArray[0] + "\\" + sArray[1] + "\\" + sArray[2];
  153. if (!Directory.Exists(flie))
  154. {
  155. Directory.CreateDirectory(flie);
  156. }
  157. if (System.IO.File.Exists(flie + "\\" + sArray[3]))
  158. {
  159. continue;
  160. }
  161. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(FilePath);
  162. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  163. Stream responseStream = response.GetResponseStream();
  164. Stream stream = new FileStream(flie + "\\" + sArray[3], FileMode.Create);
  165. byte[] bArr = new byte[1024];
  166. int size = responseStream.Read(bArr, 0, bArr.Length);
  167. while (size > 0)
  168. {
  169. stream.Write(bArr, 0, size);
  170. size = responseStream.Read(bArr, 0, bArr.Length);
  171. }
  172. iii += 1;
  173. stream.Close();
  174. responseStream.Close();
  175. }
  176. catch (Exception e)
  177. {
  178. continue;
  179. }
  180. }
  181. }
  182. }
  183. catch (Exception e)
  184. {
  185. throw;
  186. }
  187. }
  188. #endregion
  189. }
  190. }
  191. #region Model
  192. public class config
  193. {
  194. public int F_ParamId
  195. {
  196. get; set;
  197. }
  198. /// <summary>
  199. ///
  200. /// </summary>
  201. public string F_ParamCode
  202. {
  203. get; set;
  204. }
  205. /// <summary>
  206. ///
  207. /// </summary>
  208. public string F_ParamValue
  209. {
  210. get; set;
  211. }
  212. /// <summary>
  213. ///
  214. /// </summary>
  215. public string F_ParamDes
  216. {
  217. get; set;
  218. }
  219. /// <summary>
  220. ///
  221. /// </summary>
  222. public int? F_State
  223. {
  224. get; set;
  225. }
  226. }
  227. public class T_Call_CallRecords
  228. {
  229. /// <summary>
  230. /// 呼叫编号
  231. /// </summary>
  232. public string CallId
  233. {
  234. get; set;
  235. }
  236. /// <summary>
  237. /// 来电号码
  238. /// </summary>
  239. public string CallNumber
  240. {
  241. get; set;
  242. }
  243. /// <summary>
  244. /// 客户id
  245. /// </summary>
  246. public string CusId
  247. {
  248. get; set;
  249. }
  250. /// <summary>
  251. /// 客户编号
  252. /// </summary>
  253. public string CusCode
  254. {
  255. get; set;
  256. }
  257. /// <summary>
  258. /// 呼叫类型,0呼入1呼出
  259. /// </summary>
  260. public int? CallType
  261. {
  262. get; set;
  263. }
  264. /// <summary>
  265. /// 呼叫状态,0:未接通电话1已接通电话
  266. /// </summary>
  267. public int? CallState
  268. {
  269. get; set;
  270. }
  271. /// <summary>
  272. /// 处理方式0:IVR处理1骚扰电话2自助服务3转值班电话4留言5呼损6人工处理
  273. /// </summary>
  274. public int? DealType
  275. {
  276. get; set;
  277. }
  278. /// <summary>
  279. /// 开始时间
  280. /// </summary>
  281. public DateTime? BeginTime
  282. {
  283. get; set;
  284. }
  285. /// <summary>
  286. /// ivr开始时间
  287. /// </summary>
  288. public DateTime? IvrStartTime
  289. {
  290. get; set;
  291. }
  292. /// <summary>
  293. /// ivr结束时间
  294. /// </summary>
  295. public DateTime? IvrEndTime
  296. {
  297. get; set;
  298. }
  299. /// <summary>
  300. /// 振铃开始时间
  301. /// </summary>
  302. public DateTime? RingStartTime
  303. {
  304. get; set;
  305. }
  306. /// <summary>
  307. /// 振铃结束时间
  308. /// </summary>
  309. public DateTime? RingEndTime
  310. {
  311. get; set;
  312. }
  313. /// <summary>
  314. /// 通话开始时间
  315. /// </summary>
  316. public DateTime? TalkStartTime
  317. {
  318. get; set;
  319. }
  320. /// <summary>
  321. /// 通话结束时间
  322. /// </summary>
  323. public DateTime? TalkEndTime
  324. {
  325. get; set;
  326. }
  327. /// <summary>
  328. /// 结束时间
  329. /// </summary>
  330. public DateTime? EndTime
  331. {
  332. get; set;
  333. }
  334. /// <summary>
  335. /// 总时长(s)
  336. /// </summary>
  337. public int? LongTime
  338. {
  339. get; set;
  340. }
  341. /// <summary>
  342. /// IVR时长(s)
  343. /// </summary>
  344. public int? IvrLongTime
  345. {
  346. get; set;
  347. }
  348. /// <summary>
  349. /// 振铃时长(s)
  350. /// </summary>
  351. public int? RingLongTime
  352. {
  353. get; set;
  354. }
  355. /// <summary>
  356. /// 通话时长(s)
  357. /// </summary>
  358. public int? TalkLongTime
  359. {
  360. get; set;
  361. }
  362. /// <summary>
  363. /// 坐席id
  364. /// </summary>
  365. public int? UserId
  366. {
  367. get; set;
  368. }
  369. /// <summary>
  370. /// 坐席工号
  371. /// </summary>
  372. public string UserCode
  373. {
  374. get; set;
  375. }
  376. /// <summary>
  377. /// 坐席姓名
  378. /// </summary>
  379. public string UserName
  380. {
  381. get; set;
  382. }
  383. /// <summary>
  384. /// 坐席分机号
  385. /// </summary>
  386. public string ExtNumber
  387. {
  388. get; set;
  389. }
  390. /// <summary>
  391. /// 用于获取录音的编号
  392. /// </summary>
  393. public string FilePath
  394. {
  395. get; set;
  396. }
  397. /// <summary>
  398. /// 是否录入工单
  399. /// </summary>
  400. public bool IsExitWorkOrder
  401. {
  402. get; set;
  403. }
  404. /// <summary>
  405. /// 是否处理0未处理1已处理2注销
  406. /// </summary>
  407. public int? IsDeal
  408. {
  409. get; set;
  410. }
  411. /// <summary>
  412. /// 操作类型,0正常1转移2三方通话
  413. /// </summary>
  414. public int? OperateType
  415. {
  416. get; set;
  417. }
  418. /// <summary>
  419. /// 操作目标
  420. /// </summary>
  421. public string OperateObject
  422. {
  423. get; set;
  424. }
  425. /// <summary>
  426. /// 操作时间
  427. /// </summary>
  428. public DateTime? OperateTime
  429. {
  430. get; set;
  431. }
  432. /// <summary>
  433. /// 备注
  434. /// </summary>
  435. public string Remark
  436. {
  437. get; set;
  438. }
  439. /// <summary>
  440. /// 满意度,1非常满意、2基本满意、3不满意
  441. /// </summary>
  442. public int? MYD
  443. {
  444. get; set;
  445. }
  446. /// <summary>
  447. /// IVR中选择的业务类型
  448. /// </summary>
  449. public int? BusinessType
  450. {
  451. get; set;
  452. }
  453. /// <summary>
  454. ///
  455. /// </summary>
  456. public string Location
  457. {
  458. get; set;
  459. }
  460. /// <summary>
  461. /// 来电自增Id
  462. /// </summary>
  463. public int CallRecordsId
  464. {
  465. get; set;
  466. }
  467. /// <summary>
  468. /// 排队开始时间
  469. /// </summary>
  470. public DateTime? WaitStartTime
  471. {
  472. get; set;
  473. }
  474. /// <summary>
  475. /// 排队结束时间
  476. /// </summary>
  477. public DateTime? WaitEndTime
  478. {
  479. get; set;
  480. }
  481. /// <summary>
  482. /// 排队时长
  483. /// </summary>
  484. public int? WaitLongTime
  485. {
  486. get; set;
  487. }
  488. /// <summary>
  489. /// 未接通状态(0其他、1坐席未登录、2坐席忙、3振铃)
  490. /// </summary>
  491. public int? NoCallState
  492. {
  493. get; set;
  494. }
  495. /// <summary>
  496. /// 与工作时间间隔秒数
  497. /// </summary>
  498. public int? WorkTimesDiff
  499. {
  500. get; set;
  501. }
  502. /// <summary>
  503. /// 质检状态(0未质检、1已质检)
  504. /// </summary>
  505. public int? F_QCState
  506. {
  507. get; set;
  508. }
  509. /// <summary>
  510. /// 质检分值
  511. /// </summary>
  512. public decimal? F_QCScore
  513. {
  514. get; set;
  515. }
  516. /// <summary>
  517. /// 质检备注
  518. /// </summary>
  519. public string F_QCRemark
  520. {
  521. get; set;
  522. }
  523. /// <summary>
  524. /// 质检人Id
  525. /// </summary>
  526. public int? F_QCUserId
  527. {
  528. get; set;
  529. }
  530. /// <summary>
  531. /// 质检人名称
  532. /// </summary>
  533. public string F_QCUserName
  534. {
  535. get; set;
  536. }
  537. /// <summary>
  538. /// 质检时间
  539. /// </summary>
  540. public DateTime? F_QCTime
  541. {
  542. get; set;
  543. }
  544. /// <summary>
  545. /// 是否推荐
  546. /// </summary>
  547. public int? F_QCIsSelect
  548. {
  549. get; set;
  550. }
  551. /// <summary>
  552. ///
  553. /// </summary>
  554. public int? F_HJJGId
  555. {
  556. get; set;
  557. }
  558. /// <summary>
  559. ///
  560. /// </summary>
  561. public string F_HJJGName
  562. {
  563. get; set;
  564. }
  565. /// <summary>
  566. /// 质检客服-存在的问题
  567. /// </summary>
  568. public string F_QCQuestion
  569. {
  570. get; set;
  571. }
  572. /// <summary>
  573. /// 质检客服-修改意见
  574. /// </summary>
  575. public string F_QCAdvise
  576. {
  577. get; set;
  578. }
  579. /// <summary>
  580. /// 拨号类型:0:拨号外呼;1:95005回访外呼;2:电销回访外呼
  581. /// </summary>
  582. public string TaskType
  583. {
  584. get; set;
  585. }
  586. /// <summary>
  587. /// 回访的电话ID
  588. /// </summary>
  589. public string TaskPhoneID
  590. {
  591. get; set;
  592. }
  593. /// <summary>
  594. /// 回访记录编号:GUID编号唯一
  595. /// </summary>
  596. public string TaskID
  597. {
  598. get; set;
  599. }
  600. }
  601. #endregion