Нет описания

CallOutPlanController.cs 47KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170
  1. using CallCenterApi.Interface.Controllers.Base;
  2. using CallCenter.Utility;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Web;
  8. using System.Web.Mvc;
  9. using System.Data;
  10. using CallCenterApi.DB;
  11. using System.IO;
  12. using System.Data.SqlClient;
  13. namespace CallCenterApi.Interface.Controllers.callout
  14. {
  15. public class CallOutPlanController : BaseController
  16. {
  17. private readonly BLL.T_Call_OutTask otBLL = new BLL.T_Call_OutTask();
  18. private readonly BLL.T_Call_OutTaskTelNum otnBLL = new BLL.T_Call_OutTaskTelNum();
  19. private readonly BLL.T_Call_OutTaskRecords otrBLL = new BLL.T_Call_OutTaskRecords();
  20. private readonly BLL.T_Cus_CustomerBase cusBLL = new BLL.T_Cus_CustomerBase();
  21. private readonly BLL.T_Call_OutAnswers ansBLL = new BLL.T_Call_OutAnswers();
  22. private readonly BLL.T_Ask_Question questionBLL = new BLL.T_Ask_Question();
  23. private readonly BLL.T_Ask_QuestionItems questionItemBLL = new BLL.T_Ask_QuestionItems();
  24. private readonly BLL.T_Ask_PagerInfo pagerInfoBLL = new BLL.T_Ask_PagerInfo();
  25. #region 计划信息
  26. public ActionResult GetTaskList(string key, int pagesize = 10, int pageindex = 1)
  27. {
  28. StringBuilder sb = new StringBuilder();
  29. if (!string.IsNullOrWhiteSpace(key))
  30. {
  31. sb.Append(" and (F_TaskName like '%" + key + "%' or F_TaskRemark like '%" + key + "%') ");
  32. }
  33. var recordCount = 0;
  34. var dt = BLL.PagerBLL.GetListPager(
  35. "T_Call_OutTask",
  36. "F_TaskID",
  37. "*",
  38. " and F_DeleteFlag=0 " + sb.ToString(),
  39. "ORDER BY F_TaskID desc",
  40. pagesize,
  41. pageindex,
  42. true,
  43. out recordCount);
  44. var obj = new
  45. {
  46. rows = dt,
  47. total = recordCount
  48. };
  49. return Content(obj.ToJson());
  50. }
  51. public ActionResult GetAllTaskList()
  52. {
  53. var alllist = otBLL.GetModelList(" F_DeleteFlag=0 order by F_TaskID desc");
  54. return Success("获取试题分类成功", alllist);
  55. }
  56. public ActionResult GetTaskModel(int id = 0)
  57. {
  58. if (id <= 0)
  59. return Error("参数不正确");
  60. var model = otBLL.GetModel(id);
  61. if (model == null)
  62. return Error("当前数据不存在");
  63. var papermodel = pagerInfoBLL.GetModel(model.F_PagerID.Value);
  64. var newmodel = new
  65. {
  66. taskmodel = model,
  67. pagermodel = papermodel
  68. };
  69. return Success("获取成功", newmodel);
  70. }
  71. public ActionResult CreateOrUpdateTask(int id = 0, int pagerid = 0, string name = "", string remark = "")
  72. {
  73. var model = new Model.T_Call_OutTask();
  74. if (string.IsNullOrWhiteSpace(name))
  75. return Error("请填写名称" + ",操作人:" + CurrentUser.UserData.F_UserCode);
  76. if (id <= 0)
  77. {
  78. model.F_TaskName = name;
  79. model.F_TaskRemark = remark;
  80. model.F_PagerID = pagerid;
  81. model.F_IsAllot = 0;
  82. model.F_IsStart = 0;
  83. model.F_CreateTime = DateTime.Now;
  84. model.F_CreateUserCode = CurrentUser.UserData.F_UserCode;
  85. model.F_DeleteFlag = 0;
  86. if (otBLL.Add(model) > 0)
  87. return Success("添加成功" + ",操作人:" + CurrentUser.UserData.F_UserCode);
  88. return Error("添加失败" + ",操作人:" + CurrentUser.UserData.F_UserCode);
  89. }
  90. model = otBLL.GetModel(id);
  91. model.F_TaskName = name;
  92. model.F_TaskRemark = remark;
  93. model.F_PagerID = pagerid;
  94. if (otBLL.Update(model))
  95. return Success("修改成功" + ",操作人:" + CurrentUser.UserData.F_UserCode);
  96. return Error("修改失败" + ",操作人:" + CurrentUser.UserData.F_UserCode);
  97. }
  98. public ActionResult DeleteTask(int id = 0)
  99. {
  100. if (otBLL.Delete(id))
  101. {
  102. return Success("删除成功" + ",操作人:" + CurrentUser.UserData.F_UserCode);
  103. }
  104. else
  105. {
  106. return Error("删除失败!" + ",操作人:" + CurrentUser.UserData.F_UserCode);
  107. }
  108. }
  109. //计划启动并关联客户档案、生成任务
  110. public ActionResult EditTaskNum(int taskid = 0, int state = 0)
  111. {
  112. if (state == 1)
  113. {
  114. if (taskid > 0)
  115. {
  116. //var cuslist = cusBLL.GetModelList(" F_AutoFlag=1 ");//标记为有效的客户
  117. //int cc = 0;
  118. //foreach (var cusitem in cuslist)
  119. //{
  120. // var otnModel = new Model.T_Call_OutTaskTelNum();
  121. // otnModel.F_TaskId = taskid;
  122. // otnModel.F_CusID = cusitem.F_CustomerId;
  123. // otnModel.F_CusName = cusitem.F_CustomerName;
  124. // otnModel.F_CreateTime = DateTime.Now;
  125. // otnModel.F_Phone = cusitem.F_Mobile;
  126. // otnModel.F_FPState = 0;
  127. // otnModel.F_HCState = 0;
  128. // otnModel.F_YJState = 0;
  129. // otnModel.F_DeleteFlag = 0;
  130. // if (otnBLL.Add(otnModel) > 0)
  131. // {
  132. // cc++;
  133. // }
  134. //}
  135. //if (cc == cuslist.Count)
  136. //{
  137. if (otBLL.UpdateStart(taskid, 1, DateTime.Now, DateTime.MaxValue))
  138. {
  139. return Success("计划启动成功!taskid=" + taskid + ",操作人:" + CurrentUser.UserData.F_UserCode);
  140. }
  141. else
  142. {
  143. //otnBLL.DeleteByTask(taskid);
  144. return Error("计划启动失败!taskid=" + taskid + ",操作人:" + CurrentUser.UserData.F_UserCode);
  145. }
  146. // }
  147. }
  148. }
  149. else
  150. {
  151. var taskmodel = otBLL.GetModel(taskid);
  152. if (taskmodel.F_IsStart == state)
  153. {
  154. return Error("计划未启动,无法停止!taskid=" + taskid + ",操作人:" + CurrentUser.UserData.F_UserCode);
  155. }
  156. else
  157. {
  158. if (otBLL.UpdateStart(taskid, 0, taskmodel.F_StartTime.Value, DateTime.Now))
  159. {
  160. //otnBLL.DeleteByTask(taskid);
  161. return Success("计划已停止!taskid=" + taskid + ",操作人:" + CurrentUser.UserData.F_UserCode);
  162. }
  163. }
  164. }
  165. return Error("计划操作失败!taskid=" + taskid + ",操作人:" + CurrentUser.UserData.F_UserCode);
  166. }
  167. #endregion
  168. #region 号码导入
  169. int vfileid = 0;
  170. // 导入号码读取填入数据库
  171. public ActionResult TelInput(int taskid)
  172. {
  173. ActionResult res = NoToken("未知错误,请重新登录");
  174. if (Request.IsAuthenticated)
  175. {
  176. DataTable dtres = new DataTable();
  177. string errres = "";
  178. int i = 0;
  179. int count = 0;//导入成功的条数
  180. string Excelsource = "";
  181. int rcount = 0;
  182. int ccount = 0;
  183. System.Text.StringBuilder strBuilder = null;
  184. //Excelsource = Server.MapPath(this.Request.ApplicationPath + "\\ExcelData\\") + filename.ToString();
  185. Excelsource = uploadexcel();
  186. #region 将文件中的数据导入数据库
  187. try
  188. {
  189. //************************将文件中的数据导入数据库*************************//
  190. DataSet dt = ReadEcxel(Excelsource, 0);
  191. try
  192. {
  193. if (dt != null && dt.Tables[0].Rows.Count != 0)
  194. {
  195. rcount = dt.Tables[0].Rows.Count;
  196. ccount = dt.Tables[0].Columns.Count;
  197. strBuilder = new System.Text.StringBuilder();//用于如果导入失败,删除已经导入过的
  198. DataTable dtInputData = dt.Tables[0];//要导入的电话号码
  199. List<string> sqlList = new List<string>();
  200. List<string> lstsql = new List<string>();
  201. int ilns = dt.Tables[0].Columns.Count;
  202. DataSet dsnew = new DataSet();
  203. #region MyRegion
  204. using (SqlConnection coon = new SqlConnection(DbHelperSQL.connectionString))
  205. {
  206. try
  207. {
  208. coon.Open();
  209. int colscount = dtInputData.Columns.Count;//列数
  210. int rowscount = dtInputData.Rows.Count;//行数
  211. Model.T_Call_OutTaskTelNum modelPhoneImport = new Model.T_Call_OutTaskTelNum();
  212. #region
  213. modelPhoneImport.F_FPState = 0;
  214. modelPhoneImport.F_YJState = 0;
  215. modelPhoneImport.F_DeleteFlag = 0;
  216. modelPhoneImport.F_HCState = 0;
  217. modelPhoneImport.ExpandVchField15 = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff");//导入时间
  218. modelPhoneImport.ExpandVchField14 = CurrentUser.UserData.F_UserId.ToString();//导入坐席ID
  219. modelPhoneImport.ExpandVchField13 = CurrentUser.UserData.F_UserName;
  220. modelPhoneImport.F_TaskId = taskid;
  221. modelPhoneImport.ExpandIntField6 = vfileid;//导入文件id
  222. #endregion
  223. if (rowscount > 0)
  224. {
  225. foreach (DataRow dr in dtInputData.Rows)
  226. {
  227. sqlList.Clear();
  228. lstsql.Clear();
  229. if (dr[1].ToString() != "")
  230. {
  231. string dddddd = dr[1].ToString();
  232. #region 导入表内容
  233. modelPhoneImport.F_CusName = dr[0].ToString();//客户名称
  234. modelPhoneImport.F_Phone = dr[1].ToString();//号码
  235. modelPhoneImport.ExpandVchField12 = dr[2].ToString();//地址
  236. #endregion
  237. int rmw = otnBLL.Add(modelPhoneImport);
  238. if (rmw > 0)
  239. {
  240. count += 1;//导入成功,+1
  241. }
  242. }
  243. }
  244. dtres = dtInputData;
  245. }
  246. else
  247. {
  248. errres += "该文档的内容为空";
  249. }
  250. }
  251. catch (Exception ex)
  252. {
  253. if (coon.State == ConnectionState.Open)
  254. {
  255. coon.Close();
  256. }
  257. i++;
  258. errres += i.ToString() + ".导入出现异常,共导入" + count + "条数据,请从第" + (count + 2).ToString() + "行开始导入;\n";
  259. if (strBuilder.Length > 0)
  260. {
  261. errres += "重复的号码为:" + strBuilder.ToString() + "\n";
  262. }
  263. }
  264. finally
  265. {
  266. if (coon.State == ConnectionState.Open)
  267. {
  268. coon.Close();
  269. }
  270. }
  271. }//****************using*********
  272. #endregion
  273. }
  274. else
  275. {
  276. i++;
  277. errres += i.ToString() + ".Excel中无数据;\n";
  278. }
  279. }
  280. catch
  281. {
  282. i++;
  283. errres += i.ToString() + ".导入出现异常,导入失败;\n";
  284. }
  285. finally
  286. {
  287. dt.Clear();
  288. dt.Dispose();
  289. }
  290. }
  291. catch
  292. {
  293. errres += i.ToString() + ".Excel格式不正确,系统错误,导入失败;\n";
  294. }
  295. #endregion
  296. if (errres != "")
  297. {
  298. res = Error("导入失败!错误信息:" + errres);
  299. }
  300. else
  301. {
  302. string info = "本文件有" + rcount.ToString() + "行" + ccount.ToString() + "列数据";
  303. res = Success("导入成功!" + info, vfileid);
  304. }
  305. }
  306. return res;
  307. }
  308. #region 上传文件
  309. private string uploadexcel()
  310. {
  311. string Excelsource = "";
  312. try
  313. {
  314. //HttpFileCollection hfc = System.Web.HttpContext.Current.Request.Files;
  315. HttpPostedFile _upfile = RequestString.GetFile("upFile");
  316. if (_upfile != null)
  317. {
  318. string imgPath = "";
  319. string newFileName = DateTime.Now.ToString("yyyyMMddHHmmss");
  320. newFileName = newFileName + "_" + _upfile.FileName;
  321. if (!Directory.Exists(Server.MapPath(this.Request.ApplicationPath + "\\ExcelData")))
  322. {
  323. Directory.CreateDirectory(Server.MapPath(this.Request.ApplicationPath + "\\ExcelData"));
  324. }
  325. imgPath = this.Request.ApplicationPath + "/ExcelData/" + newFileName.ToString();
  326. string PhysicalPath = Server.MapPath(imgPath);
  327. _upfile.SaveAs(PhysicalPath);
  328. Excelsource = Server.MapPath(this.Request.ApplicationPath + "\\ExcelData\\") + newFileName.ToString();
  329. Model.T_Vis_Files filesmodel = new Model.T_Vis_Files();
  330. filesmodel.F_FileNewName = newFileName;
  331. filesmodel.F_FileOldName = _upfile.FileName;
  332. filesmodel.F_FilePath = Excelsource;
  333. filesmodel.F_FileType = 0;
  334. filesmodel.F_TypeGroup = 0;
  335. filesmodel.F_FileFix = _upfile.FileName.Substring(_upfile.FileName.LastIndexOf('.') + 1);
  336. filesmodel.F_InputDate = DateTime.Now;
  337. filesmodel.F_InputUserCode = CurrentUser.UserData.F_UserCode;
  338. filesmodel.F_InputUserID = CurrentUser.UserData.F_UserId;
  339. vfileid = new BLL.T_Vis_Files().Add(filesmodel);
  340. }
  341. }
  342. catch (Exception ex) { }
  343. return Excelsource;
  344. }
  345. //导入后获取
  346. public ActionResult GetList(int? fileid, int? taskid)
  347. {
  348. ActionResult res = Error("未知错误,请重新登录");
  349. if (Request.IsAuthenticated)
  350. {
  351. string sql = "";
  352. DataTable dt = new DataTable();
  353. string userid = CurrentUser.UserData.F_UserId.ToString();
  354. if (userid.Trim() != "")
  355. {
  356. sql += " and cast(ExpandVchField14 as varchar(max))='" + userid.Trim() + "' ";
  357. }
  358. if (fileid != null)
  359. {
  360. sql += " and ExpandIntField6='" + fileid + "' ";
  361. }
  362. if (taskid != null)
  363. {
  364. sql += " and F_TaskId=" + taskid;
  365. }
  366. //sql += " and F_InputDate=(select MAX(F_InputDate)from T_Vis_Telphone)";
  367. string strpageindex = RequestString.GetQueryString("page");
  368. int pageindex = 1;
  369. string strpagesize = RequestString.GetQueryString("pagesize");
  370. int pagesize = 10;
  371. if (strpageindex.Trim() != "")
  372. {
  373. pageindex = Convert.ToInt32(strpageindex);
  374. }
  375. if (strpagesize.Trim() != "")
  376. {
  377. pagesize = Convert.ToInt32(strpagesize);
  378. }
  379. int recordCount = 0;
  380. dt = BLL.PagerBLL.GetListPager(
  381. "T_Call_OutTaskTelNum",
  382. "F_Id",
  383. "*",
  384. " " + sql,
  385. "ORDER BY F_Id desc",
  386. pagesize,
  387. pageindex,
  388. true,
  389. out recordCount);
  390. var obj = new
  391. {
  392. rows = dt,
  393. total = recordCount
  394. };
  395. res = Content(obj.ToJson());
  396. }
  397. return res;
  398. }
  399. //删除号码
  400. public ActionResult DeleteTels(string[] ids)
  401. {
  402. if (ids != null && ids.Length > 0)
  403. {
  404. string idd = " ";
  405. foreach (string str in ids)
  406. {
  407. idd += str + ",";
  408. }
  409. if (otnBLL.DeleteList(idd.TrimEnd(',')))
  410. {
  411. return Success("删除成功");
  412. }
  413. else
  414. return Error("删除失败");
  415. }
  416. else
  417. {
  418. return Error("请选择要删除的记录");
  419. }
  420. return Error("删除号码失败,操作人:" + CurrentUser.UserData.F_UserCode);
  421. }
  422. #endregion
  423. #region 读取Excel文件,返一个DataTable
  424. private DataSet ReadEcxel(string FileName, int Rows)
  425. {
  426. return ToDataTable(FileName);
  427. }
  428. /// <summary>
  429. /// 读取Excel文件到DataSet中
  430. /// </summary>
  431. /// <param name="filePath">文件路径</param>
  432. /// <returns></returns>
  433. private DataSet ToDataTable(string filePath)
  434. {
  435. DataSet ds = new DataSet();
  436. DataTable dt = null;
  437. try
  438. {
  439. FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
  440. NPOI.SS.UserModel.IWorkbook book = null;
  441. if (filePath.IndexOf(".xlsx") > 0) // 2007版本
  442. book = new NPOI.XSSF.UserModel.XSSFWorkbook(fs);
  443. else if (filePath.IndexOf(".xls") > 0) // 2003版本
  444. book = new NPOI.HSSF.UserModel.HSSFWorkbook(fs);
  445. //NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(fs);
  446. NPOI.SS.UserModel.ISheet sheet = book.GetSheetAt(0);
  447. NPOI.SS.UserModel.IRow row = sheet.GetRow(0);
  448. int firstCellNum = row.FirstCellNum;
  449. int lastCellNum = row.LastCellNum;
  450. //if (firstCellNum == lastCellNum) continue;
  451. dt = new DataTable(sheet.SheetName);
  452. //for (int i = firstCellNum; i < lastCellNum; i++)
  453. for (int i = firstCellNum; i < 5; i++)
  454. {
  455. if (row.GetCell(i) != null)
  456. {
  457. dt.Columns.Add(row.GetCell(i).ToString() + i.ToString(), typeof(string));
  458. }
  459. else
  460. {
  461. dt.Columns.Add(i.ToString(), typeof(string));
  462. }
  463. }
  464. for (int i = 1; i <= sheet.LastRowNum; i++)
  465. {
  466. if (sheet.GetRow(i).GetCell(1) != null && sheet.GetRow(i).GetCell(1).ToString() != "")
  467. {
  468. DataRow newRow = dt.Rows.Add();
  469. for (int j = firstCellNum; j < 5; j++)
  470. {
  471. if (sheet.GetRow(i).GetCell(j) != null)
  472. {
  473. newRow[j] = sheet.GetRow(i).GetCell(j).ToString();
  474. }
  475. else
  476. {
  477. newRow[j] = "";
  478. }
  479. }
  480. }
  481. }
  482. ds.Tables.Add(dt);
  483. }
  484. catch (Exception ex)
  485. {
  486. //SysLog.WriteLog(ex);
  487. }
  488. return ds;
  489. }
  490. #endregion
  491. #endregion
  492. #region 分配
  493. public ActionResult fpdata(string fpvalue, string[] arruser, string key)
  494. {
  495. string fptype = "0";
  496. StringBuilder sb = new StringBuilder();
  497. sb.Append(" and F_FPState=0 and F_DeleteFlag=0 ");
  498. if (!string.IsNullOrWhiteSpace(key))
  499. {
  500. sb.Append(" and F_Taskid in (select F_TaskID from T_Call_OutTask where F_TaskName like '%" + key + "%' or F_TaskRemark like '%" + key + "%' and F_IsStart=1 and F_DeleteFlag=0 ) ");
  501. }
  502. int userid = CurrentUser.UserData.F_UserId;
  503. string username = CurrentUser.UserData.F_UserName;
  504. #region 按数量平均分配
  505. DataTable dt = DbHelperSQL.Query("select *,NEWID() from T_Call_OutTaskTelNum where 1=1 " + sb.ToString() + " order by NEWID()").Tables[0];
  506. //otnBLL.GetList(" F_FPState=0 ").Tables[0];
  507. List<Model.T_Sys_UserAccount> userlist = new BLL.T_Sys_UserAccount().GetModelList(" F_SeatFlag=1 ");
  508. if (dt != null)
  509. {
  510. int count = dt.Rows.Count;
  511. int cqcount = 0;
  512. if (fptype.Trim() == "0")
  513. {
  514. //按数量平均分配
  515. cqcount = Convert.ToInt32(fpvalue.Trim());
  516. }
  517. int successcount = 0;
  518. if (cqcount > 0)
  519. {
  520. int m = 0;
  521. int n = 0;
  522. for (int i = 0; i < count; i++)
  523. {
  524. #region 更新分配数据
  525. //更新
  526. if (m < cqcount)
  527. {
  528. if (n < arruser.Length)
  529. {
  530. Model.T_Sys_UserAccount usermodel = userlist.Where(u => u.F_UserCode == arruser[n].ToString()).FirstOrDefault();
  531. bool b = otnBLL.UpdateFP(dt.Rows[i]["F_Id"].ToString(), 1, usermodel.F_UserId.ToString(), usermodel.F_UserName);
  532. if (b)
  533. {
  534. successcount++;
  535. }
  536. }
  537. m++;
  538. }
  539. else
  540. {
  541. n++;
  542. m = 0;
  543. i--;
  544. }
  545. #endregion
  546. }
  547. }
  548. return Success("成功分配外呼计划任务" + successcount.ToString() + "条数据" + ",操作人:" + CurrentUser.UserData.F_UserCode);
  549. }
  550. #endregion
  551. return Error("分配外呼计划任务失败" + ",操作人:" + CurrentUser.UserData.F_UserCode);
  552. }
  553. //未分配列表
  554. public ActionResult GetTaskWPF(string key, int pagesize = 10, int pageindex = 1)
  555. {
  556. StringBuilder sb = new StringBuilder();
  557. sb.Append(" and F_FPState=0 and F_DeleteFlag=0 ");
  558. var sql = "";
  559. if (!string.IsNullOrWhiteSpace(key))
  560. {
  561. sql += " and F_Phone='" + key + "' or F_TaskName like '%" + key + "%' or F_TaskRemark like '%" + key + "%'";
  562. }
  563. sb.Append(" and F_Taskid in (select F_TaskID from T_Call_OutTask where F_IsStart=1 and F_DeleteFlag=0 "+sql+" ) ");
  564. var recordCount = 0;
  565. var dt = BLL.PagerBLL.GetListPager(
  566. "T_Call_OutTaskTelNum",
  567. "F_Id",
  568. "*",
  569. sb.ToString(),
  570. "ORDER BY F_Id desc",
  571. pagesize,
  572. pageindex,
  573. true,
  574. out recordCount);
  575. var obj = new
  576. {
  577. rows = dt,
  578. total = recordCount
  579. };
  580. return Content(obj.ToJson());
  581. }
  582. //获取坐席列表
  583. public ActionResult GetSeatList(int pagesize = 10, int pageindex = 1)
  584. {
  585. DataTable dt = new DataTable();
  586. string sql = " ";
  587. sql = " and f_seatflag=1 ";
  588. int roleid = CurrentUser.UserData.F_RoleId;
  589. int deptid = CurrentUser.UserData.F_DeptId;
  590. int recordCount = 0;
  591. dt = BLL.PagerBLL.GetListPager(
  592. "T_Sys_UserAccount",
  593. "F_UserId",
  594. "*",
  595. sql,
  596. "ORDER BY F_UserId desc",
  597. pagesize,
  598. pageindex,
  599. true,
  600. out recordCount);
  601. DataTable dtCount = otnBLL.GetList(" F_DeleteFlag=0 and isnull(F_HJJGName,'')!='正常接通' and isnull(F_YHFKName,'')!='已同意' and F_TaskID in (select F_TaskID from T_Call_OutTask where F_IsStart=1 and F_DeleteFlag=0) ").Tables[0];//new BLL.T_Vis_TelAllot().GetList(" F_state=1 and F_HFTelID in (select F_TelID from T_Vis_Telphone where F_ISAllot=1 and F_ISCallRes=0 ) ").Tables[0];
  602. List<Model.UserAccount> modelList = new BLL.UserAccount().DataTableToList(dt);
  603. var obj = new
  604. {
  605. rows = modelList.Select(x => new
  606. {
  607. UserCode = x.F_UserCode,
  608. UserName = x.F_UserName,
  609. WWCCount = dtCount.Select(" F_UserId=" + x.F_UserId).Count()
  610. }),
  611. total = recordCount
  612. };
  613. return Content(obj.ToJson());
  614. }
  615. #endregion
  616. #region
  617. //获取任务
  618. public ActionResult GetTaskTelModel(int id = 0)
  619. {
  620. if (id <= 0)
  621. return Error("参数不正确");
  622. var model = otnBLL.GetModel(id);
  623. var paperid = 0;
  624. if (model != null)
  625. {
  626. var tmodel = otBLL.GetModel(model.F_TaskId.Value);
  627. if (tmodel != null)
  628. {
  629. paperid = tmodel.F_PagerID.Value;
  630. }
  631. }
  632. if (model == null)
  633. return Error("当前数据不存在");
  634. var obj = new
  635. {
  636. taskModel = model,
  637. paperid = paperid
  638. };
  639. return Success("获取成功", obj);
  640. }
  641. //获取我的任务列表
  642. public ActionResult GetMyTaskList(string key, int pagesize = 10, int pageindex = 1)
  643. {
  644. StringBuilder sb = new StringBuilder();
  645. int userid = CurrentUser.UserData.F_UserId;
  646. sb.Append(" and F_UserId=" + userid);
  647. sb.Append(" and F_DeleteFlag=0 ");
  648. //sb.Append(" and isnull(F_HJJGName,'')!='正常接通' and isnull(F_YHFKName,'')!='已同意'");
  649. sb.Append(" and isnull(F_HJJGName,'')=''");
  650. sb.Append(" and F_Taskid in (select F_TaskID from T_Call_OutTask where F_IsStart=1 and F_DeleteFlag=0)");
  651. if (!string.IsNullOrWhiteSpace(key))
  652. {
  653. sb.Append(" and F_Phone like '%" + key.Trim() + "%'");
  654. }
  655. //string sqlwhere = "";
  656. //if (!string.IsNullOrWhiteSpace(key))
  657. //{
  658. // sqlwhere = " and F_TaskName like '%" + key + "%' or F_TaskRemark like '%" + key + "%' ";
  659. //}
  660. //sb.Append(" and F_TaskID in (select F_TaskID from T_Call_OutTask where F_IsStart=1 and F_DeleteFlag=0 " + sqlwhere + ") ");
  661. var recordCount = 0;
  662. var dt = BLL.PagerBLL.GetListPager(
  663. "T_Call_OutTaskTelNum",
  664. "F_Id",
  665. "*",
  666. sb.ToString(),
  667. "ORDER BY F_Id desc",
  668. pagesize,
  669. pageindex,
  670. true,
  671. out recordCount);
  672. var obj = new
  673. {
  674. rows = dt,
  675. total = recordCount
  676. };
  677. return Content(obj.ToJson());
  678. }
  679. //获取我的任务结果
  680. public ActionResult GetMyResultList(string key, int hjjgid = 0, int yhfkid = 0, int pagesize = 10, int pageindex = 1)
  681. {
  682. StringBuilder sb = new StringBuilder();
  683. int userid = CurrentUser.UserData.F_UserId;
  684. sb.Append(" and F_UserId=" + userid);
  685. sb.Append(" and F_DeleteFlag=0 ");
  686. if (hjjgid != 0)
  687. {
  688. sb.Append(" and F_HJJGId=" + hjjgid);
  689. }
  690. if (yhfkid != 0)
  691. {
  692. sb.Append(" and F_YHFKId=" + yhfkid);
  693. }
  694. if (!string.IsNullOrWhiteSpace(key))
  695. {
  696. sb.Append(" and F_Phone like '%" + key.Trim() + "%'");
  697. }
  698. //string sqlwhere = "";
  699. //if (!string.IsNullOrWhiteSpace(key))
  700. //{
  701. // sqlwhere = " and F_TaskName like '%" + key + "%' or F_TaskRemark like '%" + key + "%' ";
  702. //}
  703. //sb.Append(" and F_TaskID in (select F_TaskID from T_Call_OutTask where F_IsStart=1 and F_DeleteFlag=0 " + sqlwhere + ") ");
  704. var recordCount = 0;
  705. var dt = BLL.PagerBLL.GetListPager(
  706. "T_Call_OutTaskTelNum",
  707. "F_Id",
  708. "*",
  709. sb.ToString(),
  710. "ORDER BY F_Id desc",
  711. pagesize,
  712. pageindex,
  713. true,
  714. out recordCount);
  715. var obj = new
  716. {
  717. rows = dt,
  718. total = recordCount
  719. };
  720. return Content(obj.ToJson());
  721. }
  722. //获取总体任务结果
  723. public ActionResult GetResultList(string key, int userid = 0, int hjjgid = 0, int yhfkid = 0, int pagesize = 10, int pageindex = 1)
  724. {
  725. StringBuilder sb = new StringBuilder();
  726. sb.Append(" and F_DeleteFlag=0 ");
  727. if (userid != 0)
  728. {
  729. sb.Append(" and F_UserId=" + userid);
  730. }
  731. if (hjjgid != 0)
  732. {
  733. sb.Append(" and F_HJJGId=" + hjjgid);
  734. }
  735. if (yhfkid != 0)
  736. {
  737. sb.Append(" and F_YHFKId=" + yhfkid);
  738. }
  739. if (!string.IsNullOrWhiteSpace(key))
  740. {
  741. sb.Append(" and F_Phone like '%" + key.Trim() + "%'");
  742. }
  743. //string sqlwhere = "";
  744. //if (!string.IsNullOrWhiteSpace(key))
  745. //{
  746. // sqlwhere = " and F_TaskName like '%" + key + "%' or F_TaskRemark like '%" + key + "%' ";
  747. //}
  748. //sb.Append(" and F_TaskID in (select F_TaskID from T_Call_OutTask where F_IsStart=1 and F_DeleteFlag=0 " + sqlwhere + ") ");
  749. var recordCount = 0;
  750. var dt = BLL.PagerBLL.GetListPager(
  751. "T_Call_OutTaskTelNum",
  752. "F_Id",
  753. "*",
  754. sb.ToString(),
  755. "ORDER BY F_Id desc",
  756. pagesize,
  757. pageindex,
  758. true,
  759. out recordCount);
  760. var obj = new
  761. {
  762. rows = dt,
  763. total = recordCount
  764. };
  765. return Content(obj.ToJson());
  766. }
  767. //获取任务结果详情
  768. public ActionResult GetTaskTelInfo(int id = 0)
  769. {
  770. if (id <= 0)
  771. return Error("参数不正确");
  772. var model = otnBLL.GetModel(id);
  773. var paperid = 0;
  774. if (model != null)
  775. {
  776. //modelPhoneImport.F_CusName = dr[0].ToString();//客户名称
  777. //modelPhoneImport.F_Phone = dr[1].ToString();//号码
  778. //modelPhoneImport.ExpandVchField12 = dr[2].ToString();//地址
  779. var cusmodel = cusBLL.GetModel(model.F_CusID.Value);
  780. var anslist = ansBLL.GetModelList(" F_TaskID=" + model.F_TaskId.Value + " and F_CusTelID=" + id + " ");
  781. var tmodel = otBLL.GetModel(model.F_TaskId.Value);
  782. if (tmodel != null)
  783. {
  784. paperid = tmodel.F_PagerID.Value;
  785. #region 获取问卷试题信息以及答案
  786. var pmodel = pagerInfoBLL.GetModel(paperid);
  787. var qlist = questionBLL.GetModelList(" F_DeleteFlag=0 and F_QuestionId in (select F_QuestionId from T_Ask_PagerItems where F_PagerId=" + paperid + ") order by F_QuestionId ");
  788. var qilist = questionItemBLL.GetModelList(" F_QuestionId in (select F_QuestionId from T_Ask_PagerItems where F_PagerId=" + paperid + ") order by F_ItemId ");
  789. var newmodel = new
  790. {
  791. F_Title = pmodel.F_Title,
  792. F_Remark = pmodel.F_Remark,
  793. F_Questions = qlist.Select(q =>
  794. {
  795. var answers = "";
  796. var qalist = anslist.Where(al => al.F_QID.Value == q.F_QuestionId).ToList<Model.T_Call_OutAnswers>();
  797. if (qalist.Count > 0)
  798. {
  799. if (q.F_Type > 1)
  800. {
  801. foreach (var item in qalist)
  802. {
  803. answers += item.F_QIID + "|";
  804. }
  805. }
  806. else
  807. {
  808. answers = qalist[0].F_Answer;
  809. }
  810. }
  811. return new
  812. {
  813. quesid = q.F_QuestionId,
  814. questitle = q.F_Title,
  815. questype = q.F_Type,
  816. quescontent = q.F_Content,
  817. quesremark = q.F_Remark,
  818. quesanswers = answers.Trim('|'),
  819. quesitems = qilist.Where(qq => qq.F_QuestionId == q.F_QuestionId).Select(qi =>
  820. {
  821. return new
  822. {
  823. itemid = qi.F_ItemId,
  824. itemname = qi.F_ItemName,
  825. itemremark = qi.F_Remark,
  826. };
  827. })
  828. };
  829. })
  830. };
  831. #endregion
  832. var objy = new
  833. {
  834. cusModel = new
  835. {
  836. cusname = cusmodel.F_CustomerName,
  837. telphone = cusmodel.F_Mobile,
  838. phone = cusmodel.F_Telephone,
  839. country = cusmodel.F_City,
  840. countryid = cusmodel.F_CityID,
  841. address = cusmodel.F_Address
  842. },
  843. taskModel = model,
  844. paperModel = newmodel
  845. };
  846. return Success("获取详情成功", objy);
  847. }
  848. }
  849. return Error("获取详情失败");
  850. }
  851. #endregion
  852. #region 问卷回答
  853. /// <summary>
  854. ///
  855. /// </summary>
  856. /// <param name="taskid">任务ID</param>
  857. /// <param name="custelid">客户电话ID</param>
  858. /// <param name="ans">答案,数组形式["15_20_单选选项内容","17_25|36|58_复选选项内容1|选项内容2|选项内容3","30_0_问答题"]</param>
  859. /// <param name="hjjgid">呼叫结果</param>
  860. /// <param name="telphone">电话号码</param>
  861. /// <param name="name">姓名</param>
  862. /// <param name="phone">固定号码</param>
  863. /// <param name="countryid">乡镇id</param>
  864. /// <param name="address">地址</param>
  865. /// <returns></returns>
  866. public ActionResult Answers(int taskid, int custelid, string[] ans, int hjjgid,
  867. string telphone, string name, string phone, int countryid, string address)
  868. {
  869. int cc = 0;
  870. if (!string.IsNullOrWhiteSpace(telphone))
  871. {
  872. int cusid = saveCus(telphone, name, phone, countryid, address);
  873. var ansModel = new Model.T_Call_OutAnswers();
  874. string askqids = "";
  875. string ansids = "";
  876. if (ans != null)
  877. {
  878. //先删除 后添加
  879. ansBLL.DeleteByTelid(custelid, taskid);
  880. ansModel.F_TaskID = taskid;
  881. ansModel.F_CusTelID = custelid;
  882. ansModel.F_CusID = cusid;
  883. ansModel.F_OptBy = CurrentUser.UserData.F_UserId;
  884. ansModel.F_OptByName = CurrentUser.UserData.F_UserName;
  885. ansModel.F_OptOn = DateTime.Now;
  886. foreach (var item in ans)
  887. {
  888. var nn = 0;
  889. var ii = item.Split('_');
  890. ansModel.F_QID = int.Parse(ii[0]);
  891. askqids += ii[0] + ",";
  892. ansids += ii[1] + ",";
  893. if (ii[1].IndexOf('|') > 0)
  894. {
  895. var iii = ii[1].Trim('|').Split('|');
  896. var iia = ii[2].Trim('|').Split('|');
  897. for (int i = 0; i < iii.Length; i++)
  898. {
  899. ansModel.F_QIID = int.Parse(iii[i]);
  900. ansModel.F_Answer = iia[i];
  901. if (ansBLL.Add(ansModel) > 0)
  902. nn++;
  903. }
  904. if (nn == iii.Length)
  905. cc++;
  906. }
  907. else
  908. {
  909. ansModel.F_QIID = int.Parse(ii[1]);
  910. ansModel.F_Answer = ii[2];
  911. if (ansBLL.Add(ansModel) > 0)
  912. cc++;
  913. }
  914. }
  915. }
  916. if (custelid > 0)
  917. {
  918. var otnModel = otnBLL.GetModel(custelid);
  919. if (otnModel != null)
  920. {
  921. otnModel.F_HJJGId = hjjgid;
  922. var hjconfig = new BLL.T_Sys_DictionaryValue().GetModel(hjjgid);
  923. if (hjconfig != null)
  924. otnModel.F_HJJGName = hjconfig.F_Name;
  925. //otnModel.F_YHFKId = yhfkid;
  926. //var fkconfig = new BLL.T_Sys_DictionaryValue().GetModel(yhfkid);
  927. //if (fkconfig != null)
  928. // otnModel.F_YHFKName = fkconfig.F_Name;
  929. otnModel.F_AskRes = askqids;
  930. otnModel.F_AskInfo = ansids;
  931. otnBLL.Update(otnModel);
  932. planrecord(otnModel);
  933. }
  934. }
  935. }
  936. if (ans != null)
  937. {
  938. if (cc == ans.Length)
  939. {
  940. return Success("问卷答案提交成功!taskid=" + taskid + ",custelid=" + custelid + ",操作人:" + CurrentUser.UserData.F_UserCode);
  941. }
  942. else
  943. {
  944. ansBLL.DeleteByTelid(custelid, taskid);
  945. return Error("问卷答案提交失败!taskid=" + taskid + ",custelid=" + custelid + ",操作人:" + CurrentUser.UserData.F_UserCode);
  946. }
  947. }
  948. else
  949. {
  950. return Error("没有问卷答案提交");
  951. }
  952. }
  953. #endregion
  954. #region 客户档案
  955. /// <summary>
  956. /// 保存客户档案
  957. /// </summary>
  958. /// <param name="telphone"></param>
  959. /// <param name="name"></param>
  960. /// <param name="phone"></param>
  961. /// <param name="countryid"></param>
  962. /// <param name="address"></param>
  963. /// <returns></returns>
  964. private int saveCus(string telphone, string name, string phone,int countryid, string address)
  965. {
  966. int res = 0;
  967. Model.T_Cus_CustomerBase cusmodel = new Model.T_Cus_CustomerBase();
  968. if (!string.IsNullOrWhiteSpace(telphone))
  969. {
  970. var fkconfig = new BLL.T_Sys_DictionaryValue().GetModel(countryid);
  971. cusmodel = cusBLL.GetModelByPhone(telphone);
  972. if (cusmodel != null)
  973. {
  974. cusmodel.F_Address = address;
  975. if (fkconfig != null)
  976. cusmodel.F_City = fkconfig.F_Name;
  977. cusmodel.F_CityID = countryid;
  978. cusmodel.F_CustomerName = name;
  979. cusmodel.F_Telephone = phone;
  980. cusBLL.Update(cusmodel);
  981. res = cusmodel.F_CustomerId;
  982. }
  983. else
  984. {
  985. cusmodel.F_Address = address;
  986. if (fkconfig != null)
  987. cusmodel.F_City = fkconfig.F_Name;
  988. cusmodel.F_CityID = countryid;
  989. cusmodel.F_CustomerName = name;
  990. cusmodel.F_Telephone = phone;
  991. cusmodel.F_Mobile = telphone;
  992. res = cusBLL.Add(cusmodel);
  993. }
  994. }
  995. return res;
  996. }
  997. #endregion
  998. #region 获取记录
  999. //获取外呼通话记录
  1000. public ActionResult GetTelList(string type, string telid, string phone, string usercode)
  1001. {
  1002. ActionResult res = NoToken("未知错误,请重新登录");
  1003. if (Request.IsAuthenticated)
  1004. {
  1005. string sql = "";
  1006. DataTable dt = new DataTable();
  1007. sql += " and TaskType='1'";
  1008. if (telid != null && telid.Trim() != "")
  1009. {
  1010. sql += " and CallType=1 and TaskPhoneID='" + telid.Trim() + "' ";
  1011. }
  1012. if (phone != null && phone.Trim() != "")
  1013. {
  1014. sql += " and CallNumber like'%" + phone + "%'";
  1015. }
  1016. if (usercode != null && usercode.Trim() != "")
  1017. {
  1018. sql += " and UserCode='" + usercode + "'";
  1019. }
  1020. string strpageindex = RequestString.GetQueryString("page");
  1021. int pageindex = 1;
  1022. string strpagesize = RequestString.GetQueryString("pagesize");
  1023. int pagesize = 10;
  1024. if (strpageindex.Trim() != "")
  1025. {
  1026. pageindex = Convert.ToInt32(strpageindex);
  1027. }
  1028. if (strpagesize.Trim() != "")
  1029. {
  1030. pagesize = Convert.ToInt32(strpagesize);
  1031. }
  1032. int recordCount = 0;
  1033. dt = BLL.PagerBLL.GetListPager(
  1034. "T_Call_CallRecords",
  1035. "CallRecordsId",
  1036. "*",
  1037. sql,
  1038. "ORDER BY CallRecordsId desc",
  1039. pagesize,
  1040. pageindex,
  1041. true,
  1042. out recordCount);
  1043. var obj = new
  1044. {
  1045. rows = dt,
  1046. total = recordCount
  1047. };
  1048. res = Content(obj.ToJson());
  1049. }
  1050. return res;
  1051. }
  1052. #endregion
  1053. #region 记录日志
  1054. private void planrecord(Model.T_Call_OutTaskTelNum tnModel)
  1055. {
  1056. Model.T_Call_OutTaskRecords trModel = new Model.T_Call_OutTaskRecords();
  1057. trModel.F_AskInfo = tnModel.F_AskInfo;
  1058. trModel.F_AskRes = tnModel.F_AskRes;
  1059. trModel.F_CreateTime = tnModel.F_CreateTime;
  1060. trModel.F_CusID = tnModel.F_CusID;
  1061. trModel.F_CusName = tnModel.F_CusName;
  1062. trModel.F_FPState = tnModel.F_FPState;
  1063. trModel.F_HCState = tnModel.F_HCState;
  1064. trModel.F_HJJGId = tnModel.F_HJJGId;
  1065. trModel.F_HJJGName = tnModel.F_HJJGName;
  1066. trModel.F_TelID = tnModel.F_Id;
  1067. trModel.F_OptTime = DateTime.Now;
  1068. trModel.F_OptUserCode = CurrentUser.UserData.F_UserCode;
  1069. trModel.F_Phone = tnModel.F_Phone;
  1070. trModel.F_PhoneBy = tnModel.F_PhoneBy;
  1071. trModel.F_TaskId = tnModel.F_TaskId;
  1072. trModel.F_UserId = tnModel.F_UserId;
  1073. trModel.F_UserName = tnModel.F_UserName;
  1074. trModel.F_YHFKId = tnModel.F_YHFKId;
  1075. trModel.F_YHFKName = tnModel.F_YHFKName;
  1076. trModel.F_YJState = tnModel.F_YJState;
  1077. new BLL.T_Call_OutTaskRecords().Add(trModel);
  1078. }
  1079. #endregion
  1080. }
  1081. }