足力健后端,使用.netcore版本,合并1个项目使用

CallFunctionController.cs 59KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Common;
  4. using System.IO;
  5. using System.IRepositories;
  6. using System.IRepositories.Bus;
  7. using System.IRepositories.Call;
  8. using System.IRepositories.Sys;
  9. using System.Linq;
  10. using System.Model;
  11. using System.Model.Bus;
  12. using System.Model.Call;
  13. using System.Model.Sys;
  14. using System.Net;
  15. using System.Security.Claims;
  16. using System.Threading.Tasks;
  17. using System.Utility;
  18. using Microsoft.AspNetCore.Authorization;
  19. using Microsoft.AspNetCore.Mvc;
  20. using Microsoft.Extensions.Configuration;
  21. using SqlSugar;
  22. using TVShoppingCallCenter_ZLJ.Controllers.Order;
  23. using Utility;
  24. namespace TVShoppingCallCenter_ZLJ.Controllers.CallCenter
  25. {
  26. /// <summary>
  27. /// 呼叫中心关联方法
  28. /// </summary>
  29. // [Authorize]
  30. [Produces("application/json")]
  31. [Route("api/[controller]")]
  32. public class CallFunctionController : BaseController
  33. {
  34. private readonly IConfiguration config;
  35. private readonly ISys_MobileDataRepository busMobileDataRepository;
  36. private readonly ICall_CallRecordsRepository busCallRecordsRepository;
  37. private readonly ICall_CallOutboundRepository CallOutboundRecordsRepository;
  38. private readonly ICDRRepository busCdrRepository;
  39. private readonly Iauto_cdrRepository auto_cdrRepository;
  40. private readonly ItaskRepository taskRepository;
  41. private readonly ISys_AutoDialRepository sys_autodialrepository;
  42. private readonly ISys_SystemConfigRepository busSystemConfigRepository;
  43. private readonly ICus_VipInfoRepository _cus_vip_infoRepository;//客户
  44. private readonly IBus_AfterSaleRepository busAfterSaleRepository;
  45. private readonly ISys_UserAccountRepository sys_UserAccountRepository;
  46. private readonly IBus_AutomaticOrderRepository bus_AutomaticOrderRepository;
  47. private readonly IBus_ProductRepository _productRepository;
  48. private readonly OrderFunctionController busOrderFunctionController;
  49. private readonly IBus_OrderRepository bus_OrderRepository;
  50. private readonly IBus_OrderDetailRepository bus_OrderDetailRepository;
  51. private readonly IBus_OrderlogsRepository busOrderlogsRepository;
  52. private readonly ISys_UserAccountRepository _sys_useraccountRepository;
  53. private readonly ICall_DistributionRepository call_DistributionRepository;
  54. private readonly ISys_MediaManagementRepository _sys_mediaManagement_Repository;
  55. public CallFunctionController(ISys_SystemConfigRepository _busSystemConfigRepository,ICDRRepository _busCdrRepository,ICall_CallRecordsRepository _busCallRecordsRepository,IConfiguration _configuration, ISys_MobileDataRepository _busMobileDataRepository, ICus_VipInfoRepository cus_vip_infoRepository,
  56. ICall_CallOutboundRepository _CallOutboundRecordsRepository, Iauto_cdrRepository _auto_cdrRepository
  57. , ItaskRepository _taskRepository, ISys_AutoDialRepository _sys_autodialrepository, IBus_AfterSaleRepository _busAfterSaleRepository, ISys_UserAccountRepository _sys_UserAccountRepository, IBus_AutomaticOrderRepository _bus_AutomaticOrderRepository,
  58. IBus_ProductRepository productRepository, OrderFunctionController _OrderFunctionController
  59. , IBus_OrderRepository _bus_OrderRepository, IBus_OrderDetailRepository _bus_OrderDetailRepository
  60. , IBus_OrderlogsRepository _busOrderlogsRepository,
  61. ISys_UserAccountRepository sys_useraccountRepository
  62. , ICall_DistributionRepository _call_DistributionRepository
  63. , ISys_MediaManagementRepository sys_mediaManagement_Repository)
  64. {
  65. _sys_mediaManagement_Repository = sys_mediaManagement_Repository;
  66. call_DistributionRepository = _call_DistributionRepository;
  67. busOrderlogsRepository = _busOrderlogsRepository;
  68. bus_OrderDetailRepository = _bus_OrderDetailRepository;
  69. bus_OrderRepository = _bus_OrderRepository;
  70. busSystemConfigRepository = _busSystemConfigRepository;
  71. busCdrRepository = _busCdrRepository;
  72. busCallRecordsRepository = _busCallRecordsRepository;
  73. config = _configuration;
  74. busMobileDataRepository = _busMobileDataRepository;
  75. _cus_vip_infoRepository = cus_vip_infoRepository;
  76. CallOutboundRecordsRepository = _CallOutboundRecordsRepository;
  77. auto_cdrRepository = _auto_cdrRepository;
  78. taskRepository = _taskRepository;
  79. sys_autodialrepository = _sys_autodialrepository;
  80. busAfterSaleRepository = _busAfterSaleRepository;
  81. sys_UserAccountRepository = _sys_UserAccountRepository;
  82. bus_AutomaticOrderRepository = _bus_AutomaticOrderRepository;
  83. _productRepository = productRepository;
  84. busOrderFunctionController = _OrderFunctionController;
  85. _sys_useraccountRepository = sys_useraccountRepository;
  86. }
  87. /// <summary>
  88. /// 电话归属地查询
  89. /// </summary>
  90. /// <param name="tel"></param>
  91. /// <returns></returns>
  92. [HttpPost("GetTelLocation")]
  93. public async Task<IActionResult> GetTelLocation(string tel, int type = 0)
  94. {
  95. string location = await GetLocationFunc(tel, type);
  96. return Success("归属地加载成功", location);
  97. }
  98. /// <summary>
  99. /// 同步通话记录
  100. /// </summary>
  101. /// <returns></returns>
  102. [HttpGet("GetTel")]
  103. public async Task<IActionResult> GetTel()
  104. {
  105. DateTime? dtime = DateTime.Now.AddYears(-10);
  106. T_Call_CallRecords modelCallRecord = await busCallRecordsRepository.GetFirst(q => q.CdrId > 0 && q.IvrEndTime != null, o => new { o.IvrEndTime }, OrderByType.Desc);
  107. if (modelCallRecord != null)
  108. {
  109. if (modelCallRecord.IvrEndTime != null)
  110. dtime = modelCallRecord.IvrEndTime;
  111. }
  112. //modelCallRecord = await busCallRecordsRepository.GetFirst(q => q.CdrId > 0, o => new { o.IvrEndTime }, OrderByType.Desc);
  113. //if (modelCallRecord != null)
  114. //{
  115. // if (modelCallRecord.EndTime != null)
  116. // dtime = modelCallRecord.EndTime.GetValueOrDefault();
  117. //}
  118. List<cdr> modellist = await busCdrRepository.GetListALL(q => q.hangup_time > dtime && q.hangup_time != null);
  119. if (modellist != null && modellist.Count > 0)
  120. {
  121. int totle = 0;
  122. int n = 0;
  123. int n1 = 0;
  124. totle = modellist.Count;
  125. int minid = modellist[0].id;
  126. int maxid = modellist[totle - 1].id;
  127. var CallRecords = await busCallRecordsRepository.AddCall(minid, maxid);
  128. string url = "请配置videoURL/";
  129. T_Sys_SystemConfig model = await busSystemConfigRepository.GetSingle(q => q.F_ParamCode == "videoURL");
  130. if (model != null)
  131. {
  132. url = model.F_ParamValue;
  133. }
  134. string FileUrlPath = "请配置FileUrlPath/";
  135. T_Sys_SystemConfig models = await busSystemConfigRepository.GetSingle(q => q.F_ParamCode == "FileUrlPath");
  136. var medias = await _sys_mediaManagement_Repository.GetListALL(x => x.F_IsDelete == 0);
  137. if (models != null)
  138. {
  139. FileUrlPath = models.F_ParamValue;
  140. }
  141. List<T_Call_CallRecords> modelRecordList = new List<T_Call_CallRecords>();
  142. List<T_Call_CallRecords> modelRecordLists = new List<T_Call_CallRecords>();
  143. // List<T_Call_Distribution> Distributions = new List<T_Call_Distribution>();
  144. List<T_Cus_VipInfo> vips = new List<T_Cus_VipInfo>();
  145. modelRecordList = await busCallRecordsRepository.GetListALL(q => q.CdrId >= minid && q.CdrId <= maxid && q.IvrEndTime != null, o => new { o.IvrEndTime }, OrderByType.Desc);
  146. if (modelRecordList != null || modelRecordList.Count > 0)
  147. {
  148. foreach (T_Call_CallRecords modelcdr in modelRecordList)
  149. {
  150. T_Call_CallRecords modelRecord = new T_Call_CallRecords();
  151. modelRecord = modelcdr;
  152. int Mediaid = 0;
  153. // modelRecord.ActionID = modelcdr.action_id;
  154. // modelRecord.TalkStartTime = modelcdr.answer_time;
  155. // modelRecord.Callee = modelcdr.callee;
  156. // modelRecord.RelayNumber = modelcdr.trunk_num;
  157. if (!string.IsNullOrEmpty(modelRecord.RelayNumber))
  158. {
  159. var Media = medias.Where(x => x.F_Telephone == modelRecord.RelayNumber);
  160. if (Media != null&& Media.Count() >0)
  161. {
  162. modelRecord.Media = Media.FirstOrDefault().F_Name;
  163. Mediaid = Media.FirstOrDefault().F_ID;
  164. }
  165. }
  166. if (modelRecord.CallType == 0)
  167. {
  168. string tel = "";
  169. string userid = "";
  170. if (modelRecord.Caller.Length > 11)
  171. tel = modelRecord.Caller.TrimStart('0');
  172. else
  173. tel = modelRecord.Caller;
  174. // modelcdr.UserCode = modelcdr.callee_agent;
  175. if (!string.IsNullOrEmpty(modelRecord.UserCode))
  176. {
  177. var user = await sys_UserAccountRepository.GetFirst(x => x.F_UserCode == modelRecord.UserCode
  178. && x.F_DeleteFlag == 0);
  179. if (user != null)
  180. {
  181. userid = user.F_UserId.ToString();
  182. modelRecord.UserName = user.F_UserName;
  183. modelRecord.Deptid = (int)user.F_DeptTeamId; ;
  184. modelRecord.DeptName = user.F_Dept;
  185. }
  186. }
  187. var cus = await _cus_vip_infoRepository.GetListVipInfo(" F_State = 1 AND (F_Phone = '" + tel + "' OR F_Mobile LIKE '" + tel + "')LIMIT 1");
  188. if (cus != null)
  189. {
  190. modelRecord.CusCode = cus.F_Name;
  191. modelRecord.CusId = cus.F_ID;
  192. if (modelRecord.CallState == 1)
  193. {
  194. if (cus.F_Firstcalltime == null)
  195. cus.F_Firstcalltime = modelRecord.EndTime;
  196. cus.F_Lastholetime = modelRecord.EndTime;
  197. if (!string.IsNullOrEmpty(modelRecord.Media))
  198. {
  199. cus.F_Media = modelRecord.Media;
  200. cus.F_MediaId = Mediaid;
  201. }
  202. // var res = await _cus_vip_infoRepository.Update (cus);
  203. }
  204. vips.Add(cus);
  205. // var res = await _cus_vip_infoRepository.Update(cus);
  206. }
  207. else
  208. {
  209. var Distributionlist = await call_DistributionRepository.GetFirst
  210. (x => x.F_IsDelete == 0 && x.F_Tel == tel && x.F_Type == 1);
  211. if (!string.IsNullOrEmpty(userid))
  212. {
  213. T_Cus_VipInfo vipInfo = new T_Cus_VipInfo();
  214. vipInfo.F_Name = "新客户";
  215. vipInfo.F_Phone = tel;
  216. vipInfo.F_State = (int)EnumDelState.Enabled;
  217. vipInfo.F_CreateBy = userid;
  218. vipInfo.F_CreateOn = DateTime.Now;
  219. vipInfo.F_Saleperson = userid;
  220. vipInfo.F_Firstcalltime = modelRecord.EndTime;
  221. vipInfo.F_Lastholetime = modelRecord.EndTime;
  222. if (!string.IsNullOrEmpty(modelRecord.Media))
  223. {
  224. vipInfo.F_Media = modelRecord.Media;
  225. vipInfo.F_MediaId = Mediaid;
  226. }
  227. var res = await _cus_vip_infoRepository.Add(vipInfo);
  228. }
  229. else
  230. {
  231. if (Distributionlist == null)
  232. {
  233. T_Call_Distribution t_Call_Distribution = new T_Call_Distribution();
  234. t_Call_Distribution.F_Tel = tel;
  235. t_Call_Distribution.F_Name = "";
  236. t_Call_Distribution.F_Media = 0;
  237. t_Call_Distribution.F_MediaName = "";
  238. t_Call_Distribution.F_CrateTime = DateTime.Now;
  239. t_Call_Distribution.F_CrateUser = "";
  240. t_Call_Distribution.F_Type = 1;
  241. if (Mediaid > 0)
  242. {
  243. t_Call_Distribution.F_Media = Mediaid;
  244. t_Call_Distribution.F_MediaName = modelRecord.Media;
  245. }
  246. var res = await call_DistributionRepository.Add(t_Call_Distribution);
  247. // Distributions.Add(t_Call_Distribution);
  248. }
  249. }
  250. }
  251. }
  252. else
  253. {
  254. // modelRecord.UserCode = modelcdr.caller_agent;
  255. var user = await sys_UserAccountRepository.GetFirst(x => x.F_UserCode == modelRecord.UserCode
  256. && x.F_DeleteFlag == 0);
  257. if (user != null)
  258. {
  259. modelRecord.UserName = user.F_UserName;
  260. modelRecord.Deptid = (int)user.F_DeptTeamId; ;
  261. modelRecord.DeptName = user.F_Dept;
  262. }
  263. string tel = "";
  264. if (tel.Length > 11 && tel.Length < 13)
  265. tel = modelRecord.Caller.Substring(1, 12);
  266. else if (tel.Length > 12)
  267. tel = modelRecord.Callee.Substring(2, 13);
  268. else
  269. tel = modelRecord.Callee;
  270. // modelRecord.UserCode = modelcdr.callee_agent;
  271. // var cus = await _cus_vip_infoRepository.GetFirst(x => x.F_State == 1 && (x.F_Phone == tel || x.F_Mobile
  272. //.Contains(tel)));
  273. var cus = await _cus_vip_infoRepository.GetListVipInfo(" F_State = 1 AND (F_Phone = '" + tel + "' OR F_Mobile LIKE '" + tel + "')LIMIT 1");
  274. if (cus != null)
  275. {
  276. modelRecord.CusCode = cus.F_Name;
  277. modelRecord.CusId = cus.F_ID;
  278. if (modelRecord.CallState == 1)
  279. {
  280. if (cus.F_Firstcalltime == null)
  281. cus.F_Firstcalltime = modelRecord.EndTime;
  282. cus.F_Lastholetime = modelRecord.EndTime;
  283. if (!string.IsNullOrEmpty(modelRecord.Media))
  284. {
  285. cus.F_Media = modelRecord.Media;
  286. cus.F_MediaId = Mediaid;
  287. }
  288. }
  289. vips.Add(cus);
  290. }
  291. }
  292. // modelRecord.Caller = modelcdr.caller;
  293. // modelRecord.CallType = modelcdr.call_type;
  294. // modelRecord.BeginTime = modelcdr.create_time;
  295. // modelRecord.EndTime = modelcdr.end_time;
  296. // modelRecord.CallState = modelcdr.is_answer;
  297. // modelcdr.hangup_cause;挂机原因不赋值 HangUpReason
  298. // modelcdr.leave_path 留言 赋值给了FilePath
  299. // modelRecord.IvrEndTime = modelcdr.hangup_time;
  300. // modelRecord.Id = modelcdr.id;
  301. // modelRecord.MYD = modelcdr.myd;
  302. // modelRecord.Remark = modelcdr.note;
  303. // modelRecord.OperateType = modelcdr.op_type;
  304. // modelRecord.FilePath = url+ modelcdr.record_path;
  305. if (!string.IsNullOrEmpty(modelRecord.FilePath))
  306. {
  307. modelRecord.FilePath = url + modelRecord.FilePath;
  308. }
  309. // else if (!string.IsNullOrEmpty(modelcdr.record_path))
  310. // {
  311. // modelRecord.FilePath = url + modelcdr.leave_path;
  312. // }
  313. // modelRecord.RingStartTime = modelcdr.ring_time;
  314. // modelRecord.IsReturnvisit = 0;
  315. // modelRecord.CallId = modelcdr.uuid;
  316. // modelRecord.CdrId = modelcdr.id;
  317. modelRecord.Location = await GetLocationFunc(modelRecord.Caller, 1);
  318. #region 计算时长
  319. modelRecord.LongTime = (int)DateTimeConvert.DateDiff(DateInterval.Second, modelRecord.TalkStartTime.GetValueOrDefault(), modelRecord.EndTime.GetValueOrDefault());
  320. if (modelRecord.TalkStartTime != null)
  321. modelRecord.TalkLongTime = (int)DateTimeConvert.DateDiff(DateInterval.Second, modelRecord.TalkStartTime.GetValueOrDefault(), modelRecord.EndTime.GetValueOrDefault());
  322. else
  323. modelRecord.TalkLongTime = 0;
  324. #endregion
  325. n++;
  326. n1++;
  327. // await busCallRecordsRepository.Add (modelRecord);
  328. modelRecordLists.Add(modelRecord);
  329. if (n >= 20)
  330. {
  331. await busCallRecordsRepository.UpdateList(modelRecordLists);
  332. modelRecordLists.Clear();
  333. // await call_DistributionRepository.AddAndUpdateList(Distributions);
  334. // Distributions.Clear();
  335. n = 0;
  336. }
  337. }
  338. }
  339. //T_Call_CallRecords modelreturn= await busCallRecordsRepository.AddAndUpdateList(modelRecordList,s=>new {s.EndTime,s.TalkEndTime,s.IvrEndTime });
  340. //T_Call_CallRecords modelreturn =
  341. if (vips.Count > 0)
  342. {
  343. await _cus_vip_infoRepository.AddAndUpdateList(vips);
  344. }
  345. if (modelRecordLists.Count > 0)
  346. {
  347. await busCallRecordsRepository.AddAndUpdateList(modelRecordLists);
  348. }
  349. if (n1 == totle)
  350. return Success ($"同步情况 成功/总数 = {n1}/{totle}");
  351. }
  352. return Success("");
  353. }
  354. /// <summary>
  355. /// 获取电话归属地
  356. /// </summary>
  357. /// <param name="tel"></param>
  358. /// <param name="type"></param>
  359. /// <returns></returns>
  360. [NonAction]
  361. internal async Task<string> GetLocationFunc(string tel, int type = 0)
  362. {
  363. string location = "未知";
  364. if (tel.Trim().Length == 12 && tel.Substring(0, 1) == "0")
  365. {
  366. T_Sys_MobileData mobile_Bll = new T_Sys_MobileData();
  367. T_Sys_MobileData mobileModel = await busMobileDataRepository.GetFirst(q => q.F_MobileNum == tel.Substring(1, 8));
  368. if (mobileModel != null)
  369. {
  370. location = mobileModel.F_CityDes;
  371. if (type == 0)
  372. {
  373. location += mobileModel.F_CardDes;
  374. }
  375. }
  376. }
  377. if (tel.Trim().Length == 11 && tel.Substring(0, 1) != "0")
  378. {
  379. T_Sys_MobileData mobile_Bll = new T_Sys_MobileData();
  380. T_Sys_MobileData mobileModel = await busMobileDataRepository.GetFirst(q => q.F_MobileNum == tel.Substring(0, 7));
  381. if (mobileModel != null)
  382. {
  383. location = mobileModel.F_CityDes;
  384. if (type == 0)
  385. {
  386. location += mobileModel.F_CardDes;
  387. }
  388. }
  389. }
  390. else
  391. {
  392. T_Sys_MobileData mobile_Bll = new T_Sys_MobileData();
  393. T_Sys_MobileData mobileModel = await busMobileDataRepository.GetFirst(q => q.F_ZipCode == tel.Substring(0, 4));
  394. if (mobileModel == null)
  395. {
  396. mobileModel = await busMobileDataRepository.GetFirst(q => q.F_ZipCode == tel.Substring(0, 3));
  397. }
  398. if (mobileModel != null)
  399. {
  400. location = mobileModel.F_CityDes;
  401. if (type == 0)
  402. {
  403. location += mobileModel.F_CardDes;
  404. }
  405. }
  406. }
  407. return location;
  408. }
  409. #region 同步通话记录
  410. /// <summary>
  411. /// 同步通话记录
  412. /// </summary>
  413. /// <returns></returns>
  414. [NonAction]
  415. internal async Task<string> SyncCallRecord()
  416. {
  417. DateTime? dtime = DateTime.Now.AddYears(-10);
  418. T_Call_CallRecords modelCallRecord = await busCallRecordsRepository.GetFirst(q => q.CdrId > 0 && q.IvrEndTime != null, o => new { o.IvrEndTime }, OrderByType.Desc);
  419. if (modelCallRecord != null)
  420. {
  421. if (modelCallRecord.IvrEndTime != null)
  422. dtime = modelCallRecord.IvrEndTime;
  423. }
  424. //modelCallRecord = await busCallRecordsRepository.GetFirst(q => q.CdrId > 0, o => new { o.IvrEndTime }, OrderByType.Desc);
  425. //if (modelCallRecord != null)
  426. //{
  427. // if (modelCallRecord.EndTime != null)
  428. // dtime = modelCallRecord.EndTime.GetValueOrDefault();
  429. //}
  430. List<cdr> modellist = await busCdrRepository.GetListALL(q => q.hangup_time > dtime && q.hangup_time != null);
  431. if (modellist != null && modellist.Count > 0)
  432. {
  433. int totle = 0;
  434. int n = 0;
  435. int n1 = 0;
  436. totle = modellist.Count;
  437. int minid = modellist[0].id;
  438. int maxid = modellist[totle - 1].id;
  439. string url = "请配置videoURL/";
  440. T_Sys_SystemConfig model = await busSystemConfigRepository.GetSingle(q => q.F_ParamCode == "videoURL");
  441. if (model != null)
  442. {
  443. url = model.F_ParamValue;
  444. }
  445. string FileUrlPath = "请配置FileUrlPath/";
  446. T_Sys_SystemConfig models = await busSystemConfigRepository.GetSingle(q => q.F_ParamCode == "FileUrlPath");
  447. var medias = await _sys_mediaManagement_Repository.GetListALL(x => x.F_IsDelete == 0);
  448. if (models != null)
  449. {
  450. FileUrlPath = models.F_ParamValue;
  451. }
  452. List<T_Call_CallRecords> modelRecordList = new List<T_Call_CallRecords>();
  453. List<T_Call_CallRecords> modelRecordLists = new List<T_Call_CallRecords>();
  454. // List<T_Call_Distribution> Distributions = new List<T_Call_Distribution>();
  455. List<T_Cus_VipInfo> vips = new List<T_Cus_VipInfo>();
  456. modelRecordList = await busCallRecordsRepository.GetListALL(q => q.CdrId >= minid && q.CdrId <= maxid && q.IvrEndTime != null, o => new { o.IvrEndTime }, OrderByType.Desc);
  457. if (modelRecordList !=null || modelRecordList.Count>0)
  458. {
  459. foreach (T_Call_CallRecords modelcdr in modelRecordList)
  460. {
  461. T_Call_CallRecords modelRecord = new T_Call_CallRecords();
  462. modelRecord = modelcdr;
  463. int Mediaid = 0;
  464. // modelRecord.ActionID = modelcdr.action_id;
  465. // modelRecord.TalkStartTime = modelcdr.answer_time;
  466. // modelRecord.Callee = modelcdr.callee;
  467. // modelRecord.RelayNumber = modelcdr.trunk_num;
  468. if (!string.IsNullOrEmpty(modelRecord.RelayNumber))
  469. {
  470. var Media = medias.Where(x => x.F_Telephone == modelRecord.RelayNumber);
  471. if (Media != null && Media.Count() > 0)
  472. {
  473. modelRecord.Media = Media.FirstOrDefault ().F_Name;
  474. Mediaid = Media.FirstOrDefault().F_ID;
  475. }
  476. }
  477. if (modelRecord.CallType == 0)
  478. {
  479. string tel = "";
  480. string userid = "";
  481. if (modelRecord.Caller.Length > 11)
  482. tel = modelRecord.Caller.TrimStart('0');
  483. else
  484. tel = modelRecord.Caller;
  485. // modelcdr.UserCode = modelcdr.callee_agent;
  486. if (!string.IsNullOrEmpty(modelRecord.UserCode))
  487. {
  488. var user = await sys_UserAccountRepository.GetFirst(x => x.F_UserCode == modelRecord.UserCode
  489. && x.F_DeleteFlag == 0);
  490. if (user != null)
  491. {
  492. userid = user.F_UserId.ToString();
  493. modelRecord.UserName = user.F_UserName;
  494. modelRecord.Deptid = (int)user.F_DeptTeamId; ;
  495. modelRecord.DeptName = user.F_Dept;
  496. }
  497. }
  498. var cus = await _cus_vip_infoRepository.GetListVipInfo(" F_State = 1 AND (F_Phone = '" + tel + "' OR F_Mobile LIKE '" + tel + "') LIMIT 1");
  499. if (cus.F_ID > 0)
  500. {
  501. modelRecord.CusCode = cus.F_Name;
  502. modelRecord.CusId = cus.F_ID;
  503. if (cus.F_Firstcalltime == null)
  504. cus.F_Firstcalltime = modelRecord.EndTime;
  505. cus.F_Lastholetime = modelRecord.EndTime;
  506. if (modelRecord.CallState ==0)
  507. cus.F_IsReturnvisit=0;
  508. if (!string.IsNullOrEmpty(modelRecord.Media))
  509. {
  510. cus.F_Media = modelRecord.Media;
  511. cus.F_MediaId = Mediaid;
  512. }
  513. vips.Add(cus);
  514. if (string.IsNullOrEmpty(modelRecord.UserCode))
  515. {
  516. var user = await sys_UserAccountRepository.GetFirst(x => x.F_UserId == cus.F_Saleperson.ObjToInt()
  517. && x.F_DeleteFlag == 0);
  518. if (user != null)
  519. {
  520. userid = user.F_UserId.ToString();
  521. modelRecord.UserName = user.F_UserName;
  522. modelRecord.Deptid = (int)user.F_DeptTeamId; ;
  523. modelRecord.DeptName = user.F_Dept;
  524. modelRecord.TeamId = (int)user.F_DeptTeamId ; ;
  525. modelRecord.Team = user.F_Team ;
  526. }
  527. }
  528. }
  529. else
  530. {
  531. var Distributionlist = await call_DistributionRepository.GetFirst
  532. (x => x.F_IsDelete == 0 && x.F_Tel == tel && x.F_Type == 1);
  533. if (!string.IsNullOrEmpty(userid))
  534. {
  535. T_Cus_VipInfo vipInfo = new T_Cus_VipInfo();
  536. vipInfo.F_Name = "新客户";
  537. vipInfo.F_Phone = tel;
  538. vipInfo.F_State = (int)EnumDelState.Enabled;
  539. vipInfo.F_CreateBy = userid;
  540. vipInfo.F_CreateOn = DateTime.Now;
  541. vipInfo.F_Saleperson = userid;
  542. vipInfo.F_Firstcalltime = modelRecord.EndTime;
  543. vipInfo.F_Lastholetime = modelRecord.EndTime;
  544. if (modelRecord.CallState == 0)
  545. vipInfo.F_IsReturnvisit = 0;
  546. if (!string.IsNullOrEmpty(modelRecord.Media))
  547. {
  548. vipInfo.F_Media = modelRecord.Media;
  549. vipInfo.F_MediaId = Mediaid;
  550. }
  551. var res = await _cus_vip_infoRepository.Add(vipInfo);
  552. if (res > 0)
  553. {
  554. modelRecord.CusCode = "新客户";
  555. modelRecord.CusId = res;
  556. // var res = await _cus_vip_infoRepository.Update(cus);
  557. }
  558. }
  559. else
  560. {
  561. if (Distributionlist == null)
  562. {
  563. T_Call_Distribution t_Call_Distribution = new T_Call_Distribution();
  564. t_Call_Distribution.F_Tel = tel;
  565. t_Call_Distribution.F_Name = "";
  566. t_Call_Distribution.F_Media = 0;
  567. t_Call_Distribution.F_MediaName = "";
  568. t_Call_Distribution.F_CrateTime = DateTime.Now;
  569. t_Call_Distribution.F_CrateUser = "";
  570. t_Call_Distribution.F_Type = 1;
  571. if (Mediaid > 0)
  572. {
  573. t_Call_Distribution.F_Media = Mediaid;
  574. t_Call_Distribution.F_MediaName = modelRecord.Media;
  575. }
  576. var res = await call_DistributionRepository.Add(t_Call_Distribution);
  577. // Distributions.Add(t_Call_Distribution);
  578. }
  579. }
  580. }
  581. }
  582. else
  583. {
  584. // modelRecord.UserCode = modelcdr.caller_agent;
  585. var user = await sys_UserAccountRepository.GetFirst(x => x.F_UserCode == modelRecord.UserCode
  586. && x.F_DeleteFlag == 0);
  587. if (user != null)
  588. {
  589. modelRecord.UserName = user.F_UserName;
  590. modelRecord.Deptid = (int)user.F_DeptTeamId; ;
  591. modelRecord.DeptName = user.F_Dept;
  592. }
  593. string tel = "";
  594. if (tel.Length > 11 && tel.Length < 13)
  595. tel = modelRecord.Caller.Substring(1, 12);
  596. else if (tel.Length > 12)
  597. tel = modelRecord.Callee.Substring(2, 13);
  598. else
  599. tel = modelRecord.Callee;
  600. // modelRecord.UserCode = modelcdr.callee_agent;
  601. // var cus = await _cus_vip_infoRepository.GetFirst(x => x.F_State == 1 && (x.F_Phone == tel || x.F_Mobile
  602. //.Contains(tel)));
  603. var cus = await _cus_vip_infoRepository.GetListVipInfo(" F_State = 1 AND (F_Phone = '" + tel + "' OR F_Mobile LIKE '" + tel + "')LIMIT 1");
  604. if (cus.F_ID > 0)
  605. {
  606. modelRecord.CusCode = cus.F_Name;
  607. modelRecord.CusId = cus.F_ID;
  608. if (cus.F_Firstcalltime == null)
  609. cus.F_Firstcalltime = modelRecord.EndTime;
  610. cus.F_Lastholetime = modelRecord.EndTime;
  611. if (!string.IsNullOrEmpty(modelRecord.Media))
  612. {
  613. cus.F_Media = modelRecord.Media;
  614. cus.F_MediaId = Mediaid;
  615. }
  616. vips.Add(cus);
  617. }
  618. }
  619. // modelRecord.Caller = modelcdr.caller;
  620. // modelRecord.CallType = modelcdr.call_type;
  621. // modelRecord.BeginTime = modelcdr.create_time;
  622. // modelRecord.EndTime = modelcdr.end_time;
  623. // modelRecord.CallState = modelcdr.is_answer;
  624. // modelcdr.hangup_cause;挂机原因不赋值 HangUpReason
  625. // modelcdr.leave_path 留言 赋值给了FilePath
  626. // modelRecord.IvrEndTime = modelcdr.hangup_time;
  627. // modelRecord.Id = modelcdr.id;
  628. // modelRecord.MYD = modelcdr.myd;
  629. // modelRecord.Remark = modelcdr.note;
  630. // modelRecord.OperateType = modelcdr.op_type;
  631. // modelRecord.FilePath = url+ modelcdr.record_path;
  632. if (!string.IsNullOrEmpty(modelRecord.FilePath))
  633. {
  634. modelRecord.FilePath = url + modelRecord.FilePath;
  635. }
  636. // else if (!string.IsNullOrEmpty(modelcdr.record_path))
  637. // {
  638. // modelRecord.FilePath = url + modelcdr.leave_path;
  639. // }
  640. // modelRecord.RingStartTime = modelcdr.ring_time;
  641. // modelRecord.IsReturnvisit = 0;
  642. // modelRecord.CallId = modelcdr.uuid;
  643. // modelRecord.CdrId = modelcdr.id;
  644. modelRecord.Location = await GetLocationFunc(modelRecord.Caller, 1);
  645. #region 计算时长
  646. modelRecord.LongTime = (int)DateTimeConvert.DateDiff(DateInterval.Second, modelRecord.TalkStartTime.GetValueOrDefault(), modelRecord.EndTime.GetValueOrDefault());
  647. if (modelRecord.TalkStartTime != null)
  648. modelRecord.TalkLongTime = (int)DateTimeConvert.DateDiff(DateInterval.Second, modelRecord.TalkStartTime.GetValueOrDefault(), modelRecord.EndTime.GetValueOrDefault());
  649. else
  650. modelRecord.TalkLongTime = 0;
  651. #endregion
  652. n++;
  653. n1++;
  654. // await busCallRecordsRepository.Add (modelRecord);
  655. modelRecordLists.Add(modelRecord);
  656. if (n >= 20)
  657. {
  658. await busCallRecordsRepository.UpdateList(modelRecordLists);
  659. modelRecordLists.Clear();
  660. // await call_DistributionRepository.AddAndUpdateList(Distributions);
  661. // Distributions.Clear();
  662. n = 0;
  663. }
  664. }
  665. }
  666. if (vips.Count > 0)
  667. {
  668. await _cus_vip_infoRepository.AddAndUpdateList(vips);
  669. vips.Clear();
  670. }
  671. //T_Call_CallRecords modelreturn= await busCallRecordsRepository.AddAndUpdateList(modelRecordList,s=>new {s.EndTime,s.TalkEndTime,s.IvrEndTime });
  672. //T_Call_CallRecords modelreturn =
  673. if (modelRecordLists.Count > 0)
  674. {
  675. await busCallRecordsRepository.AddAndUpdateList(modelRecordLists);
  676. }
  677. if (n1 == totle)
  678. return $"同步情况 成功/总数 = {n1}/{totle}";
  679. }
  680. return "";
  681. }
  682. public string Upload(string pathUrl,string url )
  683. {
  684. //文件下载地址
  685. try
  686. {
  687. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(pathUrl);
  688. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  689. Stream responseStream = response.GetResponseStream();
  690. string path = "\\Upload\\video\\" + DateTime.Now.ToString("yyyy") + "\\" + DateTime.Now.ToString("MM") + "\\" + DateTime.Now.ToString("dd")+ "\\";
  691. string Currentpath = Directory.GetCurrentDirectory() + path;
  692. // 如果不存在就创建file文件夹
  693. if (!Directory.Exists(Currentpath))
  694. {
  695. if (Currentpath != null) Directory.CreateDirectory(Currentpath);
  696. }
  697. string newFileName = Guid.NewGuid().ToString().Replace("-", "") + ".mp4"; //随机生成新的文件名
  698. Stream stream = new FileStream(Currentpath + newFileName, FileMode.Create);
  699. byte[] bArr = new byte[1024];
  700. int size = responseStream.Read(bArr, 0, bArr.Length);
  701. while (size > 0)
  702. {
  703. stream.Write(bArr, 0, size);
  704. size = responseStream.Read(bArr, 0, bArr.Length);
  705. }
  706. stream.Close();
  707. responseStream.Close();
  708. return url + "/Upload/video/" +DateTime.Now.ToString("yyyy") + "/" + DateTime.Now.ToString("MM") + "/" + DateTime.Now.ToString("dd") + "/" + newFileName;
  709. }
  710. catch (Exception e)
  711. {
  712. return e.Message ;
  713. }
  714. }
  715. /// <summary>
  716. /// 同步自动外呼通话记录
  717. /// </summary>
  718. /// <returns></returns>
  719. [NonAction]
  720. internal async Task<string> SyncOutbound()
  721. {
  722. DateTime dtime = DateTime.Now.AddYears(-10);
  723. int maxid = 0;
  724. T_Call_CallOutbound modelCallRecord = await CallOutboundRecordsRepository.GetFirst(q => q.CdrId > 0, o => new { o.CdrId }, OrderByType.Desc);
  725. if (modelCallRecord != null)
  726. {
  727. maxid = modelCallRecord.CdrId;
  728. }
  729. modelCallRecord = await CallOutboundRecordsRepository.GetFirst(q => q.CdrId > 0, o => new { o.EndTime }, OrderByType.Desc);
  730. if (modelCallRecord != null)
  731. {
  732. if (modelCallRecord.EndTime != null)
  733. dtime = modelCallRecord.EndTime.GetValueOrDefault();
  734. }
  735. List<auto_cdr > modellist = await auto_cdrRepository.GetListALL(q => q.id > maxid );
  736. int totle = 0;
  737. int n = 0;
  738. int n1 = 0;
  739. if (modellist != null && modellist.Count > 0)
  740. {
  741. string url = "请配置videoURL/";
  742. T_Sys_SystemConfig model = await busSystemConfigRepository.GetSingle(q => q.F_ParamCode == "videoURL");
  743. if (model != null)
  744. {
  745. url = model.F_ParamValue;
  746. }
  747. totle = modellist.Count;
  748. List<T_Call_CallOutbound> modelRecordList = new List<T_Call_CallOutbound>();
  749. foreach (auto_cdr modelcdr in modellist)
  750. {
  751. T_Call_CallOutbound modelRecord = new T_Call_CallOutbound();
  752. modelRecord.ActionID =1;
  753. modelRecord.TalkStartTime = modelcdr.answer_time;
  754. modelRecord.Callee = modelcdr.callee;
  755. modelRecord.UserCode = modelcdr.agent;
  756. modelRecord.Caller = modelcdr.caller;
  757. modelRecord.CallType =1;
  758. modelRecord.BeginTime = modelcdr.create_time;
  759. modelRecord.EndTime = modelcdr.end_time;
  760. // modelRecord.CallState = modelcdr.is_answer;
  761. // modelRecord.Id =(int ) modelcdr.id;
  762. modelRecord.FilePath = url + modelcdr.record_path;
  763. if (string.IsNullOrEmpty(modelcdr.record_path) && !string.IsNullOrEmpty(modelcdr.record_path ))
  764. {
  765. modelRecord.FilePath = url + modelcdr.record_path;
  766. }
  767. modelRecord.RingStartTime = modelcdr.ring_time;
  768. modelRecord.CallId = modelcdr.uuid;
  769. modelRecord.CdrId = (int)modelcdr.id;
  770. modelRecord.Location = await GetLocationFunc(modelcdr.caller, 1);
  771. #region 计算时长
  772. modelRecord.LongTime = (int)DateTimeConvert.DateDiff(DateInterval.Second, modelcdr.create_time.GetValueOrDefault(), modelcdr.end_time.GetValueOrDefault());
  773. if (modelcdr.answer_time != null)
  774. modelRecord.TalkLongTime = (int)DateTimeConvert.DateDiff(DateInterval.Second, modelcdr.answer_time.GetValueOrDefault(), modelcdr.end_time.GetValueOrDefault());
  775. else
  776. modelRecord.TalkLongTime = 0;
  777. #endregion
  778. n++;
  779. n1++;
  780. modelRecordList.Add(modelRecord);
  781. if (n >= 2000)
  782. {
  783. await CallOutboundRecordsRepository.AddAndUpdateList(modelRecordList);
  784. modelRecordList.Clear();
  785. n = 0;
  786. }
  787. }
  788. await CallOutboundRecordsRepository.AddAndUpdateList(modelRecordList);
  789. }
  790. return $"同步情况 成功/总数 = {n1}/{totle}";
  791. }
  792. /// <summary>
  793. /// 同步外呼状态
  794. /// </summary>
  795. /// <returns></returns>
  796. [NonAction]
  797. internal async Task<string> SyncAutodial()
  798. {
  799. List<task > modellist = await taskRepository.GetListALL(q => q.status ==0 &&q .state ==1);
  800. int totle = 0;
  801. int n = 0;
  802. int n1 = 0;
  803. if (modellist != null && modellist.Count > 0)
  804. {
  805. List<T_Sys_AutoDial> modelAutoDial = new List<T_Sys_AutoDial>();
  806. List<task> taskList = new List<task>();
  807. foreach (task it in modellist)
  808. {
  809. var AutoDial = await sys_autodialrepository.GetSingle (q => q.F_ID == it.outbound_id );
  810. if (AutoDial!=null )
  811. {
  812. AutoDial.F_ISOutbound = 1;
  813. modelAutoDial.Add(AutoDial);
  814. n++;
  815. }
  816. it.status = 1;
  817. taskList.Add(it);
  818. #endregion
  819. n1++;
  820. if (n >= 2000)
  821. {
  822. await sys_autodialrepository.AddAndUpdateList(modelAutoDial);
  823. modelAutoDial.Clear();
  824. n = 0;
  825. }
  826. if (n1 >=2000)
  827. {
  828. await taskRepository.UpdateList(taskList);
  829. taskList.Clear();
  830. n1 = 0;
  831. }
  832. }
  833. await sys_autodialrepository.AddAndUpdateList(modelAutoDial);
  834. await taskRepository.UpdateList (taskList);
  835. }
  836. return $"同步情况 成功/总数 = {n1}/{totle}";
  837. }
  838. /// <summary>
  839. /// 同步仓库
  840. /// </summary>
  841. /// <returns></returns>
  842. [NonAction]
  843. internal async Task<string> AfterSale()
  844. {
  845. List<T_Bus_AfterSale > modellist = await busAfterSaleRepository.GetListALL(q => q.F_CheckStateSH == 0&& q.F_State ==0);
  846. int totle = 0;
  847. int n1 = 0;
  848. if (modellist != null && modellist.Count > 0)
  849. {
  850. DateTime t1 = DateTime.Now;
  851. List<T_Bus_AfterSale> afterSales = new List<T_Bus_AfterSale>();
  852. foreach (var it in modellist)
  853. {
  854. try
  855. {
  856. if ((int)DateTimeConvert.DateDiff(DateInterval.Day, (DateTime)it.F_CheckTimeSH, DateTime.Now) > 60)
  857. {
  858. it.F_CheckStateKG = 3;
  859. it.F_KGRemarks = "超过60天退回";
  860. it.F_CheckTimeKG = DateTime.Now;
  861. afterSales.Add(it);
  862. n1++;
  863. }
  864. }
  865. catch
  866. {
  867. }
  868. totle++;
  869. }
  870. await busAfterSaleRepository.AddAndUpdateList(afterSales);
  871. }
  872. return $"同步情况 成功/总数 = {n1}/{totle}";
  873. }
  874. /// <summary>
  875. /// 自动下单
  876. /// </summary>
  877. /// <returns></returns>
  878. [NonAction]
  879. internal async Task<string> Automatic()
  880. {
  881. int count=0;
  882. var autom =await bus_AutomaticOrderRepository.GetListALL(x => x.F_State == 1);
  883. List<T_Cus_VipInfo> vipInfos = new List<T_Cus_VipInfo>();
  884. List<T_Bus_Order > orders = new List<T_Bus_Order>();
  885. List<T_Bus_Orderlogs> logs = new List<T_Bus_Orderlogs>();
  886. List<T_Bus_OrderDetail> modelDetailList = new List<T_Bus_OrderDetail>();
  887. if (autom!=null && autom.Count >0)
  888. {
  889. foreach (var it in autom)
  890. {
  891. var viplist = await _cus_vip_infoRepository.GetListALL
  892. (x => x.F_Count >= it.F_Count && x.F_MembershipId == it.F_Grade
  893. && x .F_GiveTime <DateTime .Now .AddDays (-it .F_GiveTime ) );
  894. if (viplist!=null && viplist.Count >0)
  895. {
  896. foreach (var iv in viplist)
  897. {
  898. T_Bus_Order modelOrder = new T_Bus_Order();
  899. #region 订单属性
  900. //必填
  901. modelOrder.F_ADFrom = "官网";
  902. modelOrder.F_Type = "自动下单";
  903. modelOrder.F_Id = "BJ" + iv.F_Saleperson + "T" + DateTimeConvert.ToTimetag(DateTime.Now); ;
  904. modelOrder.F_Customer = iv.F_Name;
  905. modelOrder.F_CustomerPhone = iv.F_Phone;
  906. modelOrder.F_CustomerTel = iv.F_Phone;
  907. modelOrder.F_Addressee = iv.F_Name;
  908. //选填 快递属性
  909. modelOrder.F_TrackingNo = "";
  910. modelOrder.F_AddPhone = iv.F_Phone;
  911. modelOrder.F_AddProvince = iv.F_Province;
  912. modelOrder.F_AddCity = iv.F_City;
  913. modelOrder.F_AddArea = iv.F_Area;
  914. modelOrder.F_AddTown = iv.F_Town;
  915. modelOrder.F_AddDes = "赠送订单";
  916. modelOrder.F_Address = iv.F_Address;
  917. modelOrder.F_Remark = "自动下单";
  918. modelOrder.F_PayType = "货到付款";
  919. modelOrder.F_VipId = iv.F_ID;
  920. modelOrder.F_Belong = iv.F_Saleperson.ObjToInt();
  921. var useraccount = await _sys_useraccountRepository.GetSingle(x => x.F_UserId == modelOrder.F_Belong);
  922. if (useraccount != null)
  923. {
  924. modelOrder.F_Department = useraccount.F_DeptId;
  925. modelOrder.F_Core = useraccount.F_DeptTeamId;
  926. modelOrder.F_Group = useraccount.F_GroupId;
  927. }
  928. modelOrder.F_BelongName = "ID:" + iv.F_Saleperson;
  929. modelOrder.F_ExpressFee = 0;
  930. // modelOrder.F_Stock = input.F_Stock;
  931. modelOrder.F_IsExpress = 0;
  932. modelOrder.F_RealPrice = 0;
  933. modelOrder.F_MemberNotes = "自动下单";//会员备注
  934. modelOrder.F_UseScore = 0;
  935. modelOrder.F_State = 1;
  936. //选填 关联属性
  937. modelOrder.F_Status = 0;
  938. modelOrder.F_IsPayment = 0;
  939. //必须属性 系统生成
  940. modelOrder.F_AddTime = DateTime.Now;
  941. modelOrder.F_AddUser = 0;
  942. modelOrder.F_AddUserName = "系统";
  943. #endregion
  944. decimal totle = 0.00M;
  945. // List<T_Bus_Product> Productlist = new List<T_Bus_Product>();
  946. int n = 1;
  947. string[] ids = it.F_ProductId.Split(',');
  948. if (ids == null || ids.Length <= 0)
  949. return "没有设置商品";
  950. foreach (var m in ids)
  951. {
  952. T_Bus_Product modelProduct = await _productRepository.GetSingle(b => b.F_ProductId == m );
  953. if (modelProduct == null) return "在售商品不存在";
  954. T_Bus_OrderDetail modelDetail = new T_Bus_OrderDetail();
  955. modelDetail.F_ProductName = modelProduct.F_ProductName;
  956. modelDetail.F_ProductId = modelProduct.F_ProductId;
  957. modelDetail.F_Specifications = modelProduct.F_Specifications;
  958. modelDetail.F_ProductShortName = modelProduct.F_ProductShortName;
  959. modelDetail.F_Id = Guid.NewGuid().ToString().Replace("-", "");
  960. modelDetail.F_OrderId = modelOrder.F_Id;
  961. modelDetail.F_Count = it .F_Count;
  962. modelDetail.F_Price = modelProduct.F_MemberPrice;
  963. modelDetail.F_DealPrice = 0;
  964. modelOrder.F_IsZeroCommodity =0;
  965. modelDetail.F_Sort = n;
  966. modelDetail.F_AddTime = DateTime.Now;
  967. if (modelProduct.F_ClassName == "袜子" && modelDetail.F_DealPrice == 0)
  968. {
  969. modelOrder.F_IsZeroCommodity = 1;
  970. }
  971. modelDetail.F_AddUser = modelOrder.F_AddUser;
  972. modelDetail.F_AddUserName = modelOrder.F_AddUserName;
  973. modelDetail.F_TotlePrice = modelDetail.F_DealPrice * modelDetail.F_Count;
  974. modelDetail.F_Activity = 0;
  975. totle += modelDetail.F_TotlePrice;
  976. modelDetailList.Add(modelDetail);
  977. // List<EBossStock> listStock = await busOrderFunctionController.GetStock(it.F_ProductId, "山西仓");
  978. // List<EBossStock> listStock1 = await busOrderFunctionController.GetStock(it.F_ProductId, "新乡仓");
  979. //modelProduct.F_UseNumber += it.F_Count;
  980. //if (modelProduct.F_UseNumber > listStock[0].qty && modelProduct.F_UseNumber > listStock1[0].qty)
  981. //{
  982. // return "提交失败,可配量不足.";
  983. //}
  984. //else
  985. //{
  986. // Productlist.Add(modelProduct);
  987. //}
  988. n++;
  989. }
  990. // await _productRepository.UpdateList(Productlist);
  991. modelOrder.F_SubmitTime = DateTime.Now;
  992. if (modelOrder.F_IsPayment > 0)
  993. modelOrder.F_State = 7;
  994. else
  995. modelOrder.F_State = 1;
  996. modelOrder.F_FlowNum = DateTime.Now.ToString("yyMMddHHmmss") + "U" + UserLogin.UserId + "R" + new Random().Next(9);
  997. modelOrder.F_TotlePrice = totle;
  998. //订单完成后也不计算积分
  999. T_Bus_Orderlogs t_Bus_Orderlogs = new T_Bus_Orderlogs();
  1000. modelOrder.F_TotlePrice = 0;//订单总额(包括快递费)
  1001. //modelOrder.F_RecommenderTel = iv .F_RecommenderTel;
  1002. modelOrder.F_PayState = 1;
  1003. modelOrder.F_IsZeroCommodity = 0;
  1004. t_Bus_Orderlogs.F_WoID = modelOrder.F_Id;
  1005. t_Bus_Orderlogs.F_OptContent = UserLogin.UserName + "提交订单";
  1006. t_Bus_Orderlogs.F_CreateUser = UserLogin.UserCode;
  1007. t_Bus_Orderlogs.F_CreateTime = DateTime.Now;
  1008. t_Bus_Orderlogs.F_WoState = modelOrder.F_State;
  1009. logs.Add(t_Bus_Orderlogs);
  1010. orders.Add(modelOrder);
  1011. count++;
  1012. }
  1013. }
  1014. }
  1015. }
  1016. if (await bus_OrderDetailRepository.AddMany(modelDetailList))
  1017. {
  1018. if (await bus_OrderRepository.AddMany(orders))
  1019. {
  1020. await busOrderlogsRepository.AddMany(logs);
  1021. }
  1022. else
  1023. count = 0;
  1024. }
  1025. return "添加" + count + "条";
  1026. }
  1027. /// <summary>
  1028. /// 同步外呼状态
  1029. /// </summary>
  1030. /// <returns></returns>
  1031. [NonAction]
  1032. internal async Task<string> SyncArchivePool()
  1033. {
  1034. List<task> modellist = await taskRepository.GetListALL(q => q.status == 0 && q.state == 1);
  1035. int totle = 0;
  1036. int n = 0;
  1037. int n1 = 0;
  1038. if (modellist != null && modellist.Count > 0)
  1039. {
  1040. List<T_Sys_AutoDial> modelAutoDial = new List<T_Sys_AutoDial>();
  1041. List<task> taskList = new List<task>();
  1042. foreach (task it in modellist)
  1043. {
  1044. var AutoDial = await sys_autodialrepository.GetSingle(q => q.F_ID == it.outbound_id);
  1045. if (AutoDial != null)
  1046. {
  1047. AutoDial.F_ISOutbound = 1;
  1048. modelAutoDial.Add(AutoDial);
  1049. n++;
  1050. }
  1051. it.status = 1;
  1052. taskList.Add(it);
  1053. n1++;
  1054. if (n >= 2000)
  1055. {
  1056. await sys_autodialrepository.AddAndUpdateList(modelAutoDial);
  1057. modelAutoDial.Clear();
  1058. n = 0;
  1059. }
  1060. if (n1 >= 2000)
  1061. {
  1062. await taskRepository.UpdateList(taskList);
  1063. taskList.Clear();
  1064. n1 = 0;
  1065. }
  1066. }
  1067. await sys_autodialrepository.AddAndUpdateList(modelAutoDial);
  1068. await taskRepository.UpdateList(taskList);
  1069. }
  1070. return $"同步情况 成功/总数 = {n1}/{totle}";
  1071. }
  1072. }
  1073. }