using Ninject; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Web.Mvc; using WX.CRM.BLL.Base; using WX.CRM.Common; using WX.CRM.IBLL.Base; using WX.CRM.IBLL.Csvr; using WX.CRM.IBLL.Util; using WX.CRM.IBLL.Ww; using WX.CRM.IBLL.Wx; using WX.CRM.Model.Entity; using WX.CRM.Model.MAP; using WX.CRM.WebHelper; namespace WX.CRM.WEB.Controllers.WeiXin { public class MessageController : BaseController { private ValidationErrors errors = new ValidationErrors(); [Inject] public IWX_MESSAGE wx_Message_BL { get; set; } [Inject] public IWX_WORKACCOUNT wx_WorkAccount_BL { get; set; } [Inject] public IWX_RCONTACT wx_Rcontact_BL { get; set; } [Inject] public IBAS_INNERUSERGROUP_Q bas_InnerUserGroup_BL { get; set; } [Inject] public IBAS_INNERGROUP_Q bas_InnerGroup_BL { get; set; } [Inject] public IWX_MESSAGECOMPLIANCE wx_MessageCompliance_BL { get; set; } [Inject] public IBAS_PARAMETER bas_Parameter_BL { get; set; } [Inject] public IWw_huser ww_huser_bl { get; set; } [Inject] public IBAS_PARAMETER_Q bas_Parameter_Q_BL { get; set; } [Inject] public IBAS_COMTYPE_Q bas_ComType_Q_BL { get; set; } [Inject] public IBAS_SUBCOMTYPE_Q bas_SubComType_Q_BL { get; set; } [Inject] public ICACHE_Q cache_BL { get; set; } [Inject] public IBAS_PARAMETER_Q _BAS_PARAMETER_Q { get; set; } [Inject] public ICSVR_CALLRECORD_Q _CSVR_CALLRECORD_Q { get; set; } [AuthorizeRedirect(Roles = InitRights.CONST_微信聊天合规管理)] public ActionResult Index() { ToolBar tool = new ToolBar(); string[] toolbtn = new ToolButtonView().ToolButtonRight(InitRights.微信聊天合规管理, userRightId); tool.AllowButton(toolbtn); tool.AddOtherButton("Other1", "标记违规信息", "icon-edit", "Update_Click", true); tool.AddOtherButton("Other2", "合规关键字", "icon-edit", "Keyword_Click", true); ViewBag.ToolBar = tool; Pager pager = new Pager() { page = 1, rows = 30 }; string tableId = "tablist"; Table tab = new Table(tableId); tab.AddHiddenHeadCol("msgsvrid", ""); tab.AddHiddenHeadCol("inneruserid", ""); tab.AddHiddenHeadCol("msgtype", ""); tab.AddHiddenHeadCol("username", ""); tab.AddHiddenHeadCol("msgurl", ""); tab.AddHiddenHeadCol("msgcontent", ""); tab.AddHeadCol("talker", "", "客户微信"); tab.AddHeadCol("issend", "", ""); tab.AddHeadCol("content", "50%", "消息内容"); tab.AddHeadCol("createtime", "", "消息时间"); tab.AddHeadCol("alias", "", "客服微信"); tab.AddHeadCol("eid", "", "客服"); tab.AddHeadCol("gname", "", "销售组"); tab.AddHeadCol("", "", "查看"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pager, tableId, "20,30,50"); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); var model = bas_Parameter_Q_BL.GetModel_Patameter(WX.CRM.Model.Enum.Parameter.WeiXin_IllegalKewords.ToString()); ViewBag.keyword = model != null ? model.PARAVALUE.Trim(';') : ""; ViewBag.monthList = getMonthList(); return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_微信聊天合规管理)] public JsonResult GetHtmlList(Pager pager, string month, string stime, string etime, string keyword, string customerUserName, string alias, string columns) { decimal saleDeptId = Request["saleDeptId"].GetDecimal(0); decimal groupId = Request["groupId"].GetDecimal(0); decimal userId = Request["userId"].GetDecimal(0); var tableName = ""; if (string.IsNullOrWhiteSpace(month)) { month = string.Format("{0:yyyyMM}", DateTime.Now); } tableName = "wx_message" + month; var workAccountList = wx_WorkAccount_BL.GetList().ToList(); if (!string.IsNullOrWhiteSpace(alias)) { var rcontact = wx_Rcontact_BL.Get(m => m.ALIAS == alias); if (rcontact != null) { customerUserName = rcontact.USERNAME; } } string unixStime = ""; string unixEtime = ""; if (!string.IsNullOrWhiteSpace(stime)) { DateTime time1 = Convert.ToDateTime(stime); unixStime = time1.ToShortDateString(); //unixStime = Utility.ConvertDateTimeToInt(time1).ToString(); } if (!string.IsNullOrWhiteSpace(etime)) { DateTime time2 = Convert.ToDateTime(etime).AddDays(1); //unixEtime = Utility.ConvertDateTimeToInt(time2).ToString(); unixEtime = time2.ToShortDateString(); } string userNames = ""; if (userId > 0) { var userNameList = workAccountList.Where(m => m.INNERUSERID == userId); if (userNameList != null) { foreach (var item in userNameList) { userNames += item.USERNAME + ","; } userNames = userNames.Trim(','); } } else if (groupId > 0) { var groupUserList = bas_InnerUserGroup_BL.GetList().Where(m => m.GID == groupId).ToList(); if (groupUserList != null) { var groupUserIdList = groupUserList.Select(m => m.INNERUSERID).ToList(); var userNameList = workAccountList.Where(m => groupUserIdList.Contains(m.INNERUSERID.Value)); if (userNameList != null) { foreach (var item in userNameList) { userNames += item.USERNAME + ","; } userNames = userNames.Trim(','); } } } else if (saleDeptId > 0) { var groupIdList = bas_InnerGroup_BL.GetList().Where(m => m.SALEDEPTID == saleDeptId).ToList().Select(mm => mm.GID).ToList(); ; if (groupIdList != null) { var groupUserList = bas_InnerUserGroup_BL.GetList().Where(m => groupIdList.Contains(m.GID.Value)).ToList(); if (groupUserList != null) { var groupUserIdList = groupUserList.Select(m => m.INNERUSERID).ToList(); var userNameList = workAccountList.Where(m => groupUserIdList.Contains(m.INNERUSERID.Value)); if (userNameList != null) { foreach (var item in userNameList) { userNames += item.USERNAME + ","; } userNames = userNames.Trim(','); } } } } var list = new List(); if (!string.IsNullOrWhiteSpace(month) && !string.IsNullOrWhiteSpace(stime)) { DateTime timer = Convert.ToDateTime(stime); if (month == string.Format("{0:yyyyMM}", timer)) { list = wx_Message_BL.GetMessageList(ref pager, keyword, tableName, userNames, unixStime, unixEtime, customerUserName); } } string isShowMobileOfContent = cache_BL.GetValue_Parameter(Model.Enum.Parameter.Sys_IsShowMobileOfContent); Table table = new Table(columns, true); foreach (var model in list) { var workAccount = workAccountList.Where(m => m.USERNAME == model.username).OrderByDescending(m => m.CTIME).FirstOrDefault(); table.AddHiddenCol(model.msgsvrid); table.AddHiddenCol(workAccount != null ? workAccount.INNERUSERID : 0); table.AddHiddenCol(model.msgtype); table.AddHiddenCol(model.username); table.AddHiddenCol(model.msgurl); table.AddHiddenCol(model.msgcontent); table.AddCol(model.talker); if (!string.IsNullOrEmpty(isShowMobileOfContent) && isShowMobileOfContent == "1") { table.AddCol(model.issend == 0 ? string.Format("{0}说:", model.nickname) : string.Format("客服对{0}说:", model.nickname)); } else { table.AddCol(model.issend == 0 ? string.Format("{0}说:", Utility.ReplaceMobile(model.nickname)) : string.Format("客服对{0}说:", Utility.ReplaceMobile(model.nickname))); } table.AddCol(getMsgContent(model)); table.AddCol(Utility.ConvertStringToDateTime(model.createtime.ToString())); table.AddCol(workAccount != null ? workAccount.ALIAS : ""); table.AddCol(workAccount != null ? InnerUserHelper.Instance.GetEidAndTrueName(workAccount.INNERUSERID) : ""); table.AddCol(workAccount != null ? InnerUserHelper.Instance.GetGroupName(InnerUserHelper.Instance.GetGroupId(workAccount.INNERUSERID)) : ""); table.AddCol(string.Format(" 查看消息 ", model.talker, model.username)); table.AddRow(); } var json = new { totalPages = pager.totalPages, totalRows = pager.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } [HttpPost] [AuthorizeToolBar(InitRights.CONST_微信聊天合规管理, InitToolBar.CONST_Other1)] public JsonResult UpdateIsillegal(string msgsvrid, string username, string msgcontent, string month, decimal? msgtype, string talker, string msgurl, DateTime createtime) { var tableName = ""; if (!string.IsNullOrWhiteSpace(month)) { tableName = "wx_message" + month; } try { decimal? innerUserId = 0; var workAccount = wx_WorkAccount_BL.Get(m => m.USERNAME == username); if (workAccount != null) { innerUserId = workAccount.INNERUSERID; } WX_MESSAGECOMPLIANCE compliance = new WX_MESSAGECOMPLIANCE { PKID = new SEQUENCES_BL().Seq_base_get(), JOBUSERNAME = username, USERNAME = talker, INNERUSERID = innerUserId, MESSAGE = msgcontent, MSGTYPE = msgtype, CTIME = DateTime.Now, OPERATORID = UserId, MSGSOURCE = 1, MSGSVRID = msgsvrid, MSGURL = msgurl, TYPE = 1, ORIGINALTIME = createtime }; wx_Message_BL.UpdateMessageIsIllegal(tableName, username, msgsvrid); wx_MessageCompliance_BL.Add(compliance); string rootPath = AppDomain.CurrentDomain.BaseDirectory + "Message"; //html文件生成的根目录 var dir = string.Format("{0}\\{1}", rootPath, username); var path = string.Format("{0}_{1}.json", talker, month.Substring(0, 4) + month.Substring(4, 2).Replace("0", "")); var str = Path.Combine(dir, path); if (System.IO.File.Exists(Path.Combine(dir, path))) { string result = string.Format("[{0}]", FileUnit.Read(Path.Combine(dir, path))); List messageJson = Utility.JSONToObject>(result); if (messageJson != null && messageJson.Any(m => m.msgSvrId == msgsvrid)) { Dictionary dic = messageJson.GroupBy(m => m.msgSvrId).ToDictionary(key => key.First().msgSvrId, value => value.First()); //Dictionary dic = new Dictionary(); //foreach(var m in messageJson) //{ // dic.Add(m.msgSvrId, m); //} dic[msgsvrid].isillegal = 1; FileUnit.Write(Path.Combine(dir, path), Utility.ConvertToJSON(dic.Values.ToList()).TrimStart('[').TrimEnd(']')); } } return JsonHandler.ManageMessage("", true); } catch (Exception ex) { LogHelper.Error(ex); return JsonHandler.ManageMessage(ex.Message, false); } } [HttpGet] [AuthorizeToolBar(InitRights.CONST_微信聊天合规管理, InitToolBar.CONST_Other1)] public ActionResult MessageCompliance() { var model = new WX_MESSAGECOMPLIANCE(); var list = bas_ComType_Q_BL.GetList().Where(m => m.map_TYPECODE.Contains("MessageCompliance")).OrderBy(m => m.map_TYPECODE).ToList(); var bigTypeList = new List(); if (list != null) { foreach (var m in list) { bigTypeList.Add(new SelectListItem { Text = m.map_TYPENAME, Value = m.map_TYPECODE }); } } ViewBag.BigTypeList = bigTypeList; return View(model); } [HttpPost] [AuthorizeToolBar(InitRights.CONST_微信聊天合规管理, InitToolBar.CONST_Other1)] public ActionResult MessageCompliance(WX_MESSAGECOMPLIANCE model, string msgsvrid, string username, string msgcontent, string month, decimal? msgtype, string talker, string msgurl, string bigType, string subType, DateTime createtime) { if (string.IsNullOrWhiteSpace(bigType)) { errors.Add("请选择大类!"); return JsonHandler.UpdateMessage(errors, false); } if (string.IsNullOrWhiteSpace(subType)) { errors.Add("请选择小类!"); return JsonHandler.UpdateMessage(errors, false); } if (string.IsNullOrWhiteSpace(model.REMARK)) { errors.Add("请输入备注信息!"); return JsonHandler.UpdateMessage(errors, false); } var tableName = ""; if (!string.IsNullOrWhiteSpace(month)) { tableName = "wx_message" + month; } try { decimal? innerUserId = 0; var workAccount = wx_WorkAccount_BL.Get(m => m.USERNAME == username); if (workAccount != null) { innerUserId = workAccount.INNERUSERID; } WX_MESSAGECOMPLIANCE compliance = new WX_MESSAGECOMPLIANCE { PKID = new SEQUENCES_BL().Seq_base_get(), JOBUSERNAME = username, USERNAME = talker, INNERUSERID = innerUserId, MESSAGE = msgcontent, MSGTYPE = msgtype, CTIME = DateTime.Now, OPERATORID = UserId, MSGSOURCE = 1, MSGSVRID = msgsvrid, MSGURL = msgurl, BIGTYPE = bigType, SUBTYPE = subType, REMARK = model.REMARK, TYPE = 1, ORIGINALTIME = createtime, RESULT = model.RESULT }; var res = wx_MessageCompliance_BL.Get(m => m.MSGSVRID == msgsvrid); if (res == null) { //进行合规扣款判断 /* 一类违规:首次罚款500元,二次再犯直接给予辞退,或移交司法机关;如该单已成交,同时要扣除此单业绩 二类违规:首次罚款300元,二次再犯罚款500元;第三次给予辞退;如该单已成交,同时要扣除此单业绩 三类违规:首次罚款200元,二次(或二次以上)再犯罚款300元;如该单已成交,扣除此单业绩(超额订单直接退回用户)。 四类违规:给予200元现金处罚; */ if (compliance.BIGTYPE == "MessageComplianceA") { var complianceBlist = wx_MessageCompliance_BL.GetList(m => m.BIGTYPE == "MessageComplianceA" && m.INNERUSERID == innerUserId).ToList(); if (complianceBlist == null) { compliance.PENALTY = 500; } else { if (complianceBlist.Count == 0) { compliance.PENALTY = 500; } else { compliance.PENALTY = 0; } } } else if (compliance.BIGTYPE == "MessageComplianceB") { var complianceBlist = wx_MessageCompliance_BL.GetList(m => m.BIGTYPE == "MessageComplianceB" && m.INNERUSERID == innerUserId).ToList(); if (complianceBlist != null) { if (complianceBlist.Count >= 2) { compliance.PENALTY = 0; } else if (complianceBlist.Count == 1) { compliance.PENALTY = 500; } else if (complianceBlist.Count == 0) { compliance.PENALTY = 300; } } else { compliance.PENALTY = 300; } } else if (compliance.BIGTYPE == "MessageComplianceC") { var complianceBlist = wx_MessageCompliance_BL.GetList(m => m.BIGTYPE == "MessageComplianceC" && m.INNERUSERID == innerUserId).ToList(); if (complianceBlist == null) { compliance.PENALTY = 200; } else { if (complianceBlist.Count == 0) { compliance.PENALTY = 200; } else { compliance.PENALTY = 300; } } } else if (compliance.BIGTYPE == "MessageComplianceD") { compliance.PENALTY = 200; } else { compliance.PENALTY = 0; } wx_MessageCompliance_BL.Add(compliance); } wx_Message_BL.UpdateMessageIsIllegal(tableName, username, msgsvrid); string rootPath = AppDomain.CurrentDomain.BaseDirectory + "Message"; //html文件生成的根目录 var dir = string.Format("{0}\\{1}", rootPath, username); var path = string.Format("{0}_{1}.json", talker, month.Substring(0, 4) + month.Substring(4, 2).Replace("0", "")); var str = Path.Combine(dir, path); if (System.IO.File.Exists(Path.Combine(dir, path))) { string result = string.Format("[{0}]", FileUnit.Read(Path.Combine(dir, path))); List messageJson = Utility.JSONToObject>(result); if (messageJson != null && messageJson.Any(m => m.msgSvrId == msgsvrid)) { Dictionary dic = messageJson.GroupBy(m => m.msgSvrId).ToDictionary(key => key.First().msgSvrId, value => value.First()); //Dictionary dic = new Dictionary(); //foreach(var m in messageJson) //{ // dic.Add(m.msgSvrId, m); //} dic[msgsvrid].isillegal = 1; FileUnit.Write(Path.Combine(dir, path), Utility.ConvertToJSON(dic.Values.ToList()).TrimStart('[').TrimEnd(']')); } } return JsonHandler.ManageMessage("操作成功", true); } catch (Exception ex) { LogHelper.Error(ex); return JsonHandler.ManageMessage(ex.Message, false); } } public JsonResult GetSubTypeList(string bigType) { Pager pg = new Pager(); pg.page = 1; pg.rows = int.MaxValue; pg.order = "desc"; pg.sort = "paraKey"; var list = bas_SubComType_Q_BL.GetList_Subcomtype(ref pg, null, null, bigType, null, null); var subTypeList = new List(); if (list != null) { foreach (var item in list) { subTypeList.Add(new SelectListItem { Text = item.Subtypename.map_SUBTYPENAME, Value = item.Subtypename.map_SUBTYPECODE }); } } return Json(subTypeList, JsonRequestBehavior.AllowGet); } [HttpGet] [AuthorizeToolBar(InitRights.CONST_微信聊天合规管理, InitToolBar.CONST_Other2)] public ActionResult Keyword() { var model = bas_Parameter_Q_BL.GetModel_Patameter(WX.CRM.Model.Enum.Parameter.WeiXin_IllegalKewords.ToString()); if (model == null) { model = new BAS_PARAMETER(); } return View(model); } [HttpPost] [AuthorizeToolBar(InitRights.CONST_微信聊天合规管理, InitToolBar.CONST_Other2)] public JsonResult Keyword(BAS_PARAMETER model) { if (!string.IsNullOrEmpty(model.PARAKEY)) { string keywords = model.PARAVALUE; keywords = keywords.Replace(";", ";").Replace("\n\r", "").Replace("\r", "").Replace("\n", ""); List keylist2 = keywords.Split(';').ToList(); List keylist = new List(); foreach (var item in keylist2) { if (!string.IsNullOrEmpty(item)) keylist.Add(item); } string newkeyword = string.Join(";", keylist.ToArray()); model.PARAVALUE = keywords; bas_Parameter_BL.Update_ParameterValueByKey(model.PARAKEY, model.PARAVALUE); ww_huser_bl.SetKeyWords(keywords, ref errors); return JsonHandler.UpdateMessage(errors, true); } else { errors.Add("不存在合规关键字记录,不能修改!"); return JsonHandler.UpdateMessage(errors, false); } } #region 微信聊天违规信息 [AuthorizeRedirect(Roles = InitRights.CONST_微信聊天违规信息)] public ActionResult ComplianceIndex() { ToolBar tool = new ToolBar(); string[] toolbtn = new ToolButtonView().ToolButtonRight(InitRights.微信聊天违规信息, userRightId); tool.AllowButton(toolbtn); Pager pager = new Pager() { page = 1, rows = 20 }; string tableId = "tablist"; Table tab = new Table(tableId); tab.AddHiddenHeadCol("PKID", ""); tab.AddHeadColRowSpan("RESID", 2, "来源");//合并行 tab.AddHeadCol("WXNAME", 4, "客服信息"); tab.AddHeadCol("CONTENT", 2, "违规信息"); tab.AddHeadCol("HGMSG", 6, "合规信息"); tab.AddHeadRow(); tab.AddHeadCol("JOBUSERNAME", "", "微信号/用户名"); tab.AddHeadCol("Alias", "", "企微/名称"); //tab.AddHeadCol("RESID", "", "客户ID"); tab.AddHeadCol("Eid", "", "客服"); tab.AddHeadCol("Gname", "", "销售组"); tab.AddHeadCol("USERNAME", "", "客户"); tab.AddHeadCol("MESSAGE", "25%", "消息"); tab.AddHeadCol("CTIME", "", "添加时间"); tab.AddHeadCol("OPERATORID", "", "操作人"); tab.AddHeadCol("SUBTYPE", "", "类别"); tab.AddHeadCol("REMARK", "", "违规细则"); tab.AddHeadCol("PENALTY", "", "违规金额"); tab.AddHeadCol("RESULT", "", "处理结果"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pager, tableId, "20,30,50"); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.ToolBar = tool; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); var model = new WX_MESSAGECOMPLIANCE(); var list = bas_ComType_Q_BL.GetList().Where(m => m.map_TYPECODE.Contains("MessageCompliance")).OrderBy(m => m.map_TYPECODE).ToList(); var bigTypeList = new List(); if (list != null) { foreach (var m in list) { bigTypeList.Add(new SelectListItem { Text = m.map_TYPENAME, Value = m.map_TYPECODE }); } } ViewBag.BigTypeList = bigTypeList; return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_微信聊天违规信息)] public JsonResult GetComplianceIndexHtmlList(Pager pager, string jobUserName, string stime, string etime, string nickName, string conRemark, string bigType, string subType, string columns) { decimal groupId = Request["groupId"].GetDecimal(0); decimal userId = Request["userId"].GetDecimal(0); string[] userArrs = null; if (!string.IsNullOrWhiteSpace(nickName) || !string.IsNullOrWhiteSpace(conRemark)) { Pager pager2 = new Pager(); pager2.rows = 1000; pager2.page = 1; var rcontackList = wx_Rcontact_BL.GetList(ref pager2, null, null, null, nickName, conRemark, null, null); if (rcontackList != null && rcontackList.Count > 0) { userArrs = rcontackList.Select(m => m.USERNAME).ToArray(); } } var list = wx_MessageCompliance_BL.GetList(ref pager, groupId, userId, userArrs, jobUserName, bigType, subType, stime, etime); Table table = new Table(columns, true); foreach (var model in list) { WX_Message_Extend message = new WX_Message_Extend() { msgtype = (int?)model.wx_MessageCompliance.MSGTYPE, msgsvrid = model.wx_MessageCompliance.MSGSVRID, msgurl = model.wx_MessageCompliance.MSGURL, msgcontent = model.wx_MessageCompliance.MESSAGE }; table.AddHiddenCol(model.wx_MessageCompliance.PKID); if (model.wx_MessageCompliance.TYPE == 1) { table.AddCol("微信"); } else if (model.wx_MessageCompliance.TYPE == 2) { var linkUrl = string.Format("{2}" , "客户详细" , "/Csvr/CustomerInfo/CustomerDetail?resid=" + model.wx_MessageCompliance.RESID , model.wx_MessageCompliance.RESID); table.AddCol(linkUrl); } else if (model.wx_MessageCompliance.TYPE == 3) { table.AddCol(string.Format("企微:
{0}", model.wx_MessageCompliance.CORPNAME)); } if (!string.IsNullOrEmpty(model.wx_MessageCompliance.JOBUSERNAME)) { table.AddCol(string.Format("{0}
{1}", model.Alias, model.wx_MessageCompliance.JOBUSERNAME)); } else { table.AddCol(""); } if (!string.IsNullOrEmpty(model.wx_MessageCompliance.HHUSERID)) { table.AddCol(string.Format("{0}/{1}", model.wx_MessageCompliance.HHUSERID, model.wx_MessageCompliance.HHUSERNAME)); } else { table.AddCol(""); } table.AddCol(InnerUserHelper.Instance.EidAndName(model.wx_MessageCompliance.INNERUSERID)); table.AddCol(InnerUserHelper.Instance.GetGroupName(InnerUserHelper.Instance.GetGroupId(model.wx_MessageCompliance.INNERUSERID))); if (model.wx_MessageCompliance.TYPE == 3) { table.AddCol(model.wx_MessageCompliance.EXTNAME); } else { table.AddCol(model.wx_MessageCompliance.USERNAME); } if (model.wx_MessageCompliance.TYPE == 2) { string cti; string playurl = _getCallRecordUrl(model.wx_MessageCompliance.SERVERID, model.wx_MessageCompliance.FILENAME, out cti); var playcrl = string.Format("", playurl, model.wx_MessageCompliance.RECORDID, cti == null ? "" : cti); playcrl += string.Format("
", model.wx_MessageCompliance.RECORDID, playurl); table.AddCol(playcrl); } else { table.AddCol(getMsgContent(message)); } table.AddCol(model.wx_MessageCompliance.CTIME); table.AddCol(InnerUserHelper.Instance.EidAndName(model.wx_MessageCompliance.OPERATORID)); table.AddCol(getSubType(model)); table.AddCol(model.wx_MessageCompliance.REMARK); table.AddCol(model.wx_MessageCompliance.PENALTY); table.AddCol(model.wx_MessageCompliance.RESULT); table.AddRow(); } var json = new { totalPages = pager.totalPages, totalRows = pager.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } [AuthorizeToolBar(InitRights.CONST_微信聊天违规信息, InitToolBar.CONST_Delete)] public JsonResult Delete(decimal? id) { if (!id.HasValue) { return JsonHandler.ManageMessage("id不能为空", false); } var model = wx_MessageCompliance_BL.Get(m => m.PKID == id); if (model == null) { return JsonHandler.ManageMessage("删除的记录不存在", false); } bool result = false; //删除微信聊天记录 if (model.TYPE == 1) { try { string month = string.Format("{0:yyyyMM}", model.ORIGINALTIME); var tableName = "wx_message" + month; var msgsvrid = model.MSGSVRID; wx_MessageCompliance_BL.DeleteMessageIsIllegal(tableName, model.JOBUSERNAME, msgsvrid); string rootPath = AppDomain.CurrentDomain.BaseDirectory + "Message"; //html文件生成的根目录 var dir = string.Format("{0}\\{1}", rootPath, model.JOBUSERNAME); var path = string.Format("{0}_{1}.json", model.USERNAME, month.Substring(0, 4) + month.Substring(4, 2).Replace("0", "")); var str = Path.Combine(dir, path); if (System.IO.File.Exists(Path.Combine(dir, path))) { string res = string.Format("[{0}]", FileUnit.Read(Path.Combine(dir, path))); List messageJson = Utility.JSONToObject>(res); if (messageJson != null && messageJson.Any(m => m.msgSvrId == msgsvrid)) { Dictionary dic = messageJson.GroupBy(m => m.msgSvrId).ToDictionary(key => key.First().msgSvrId, value => value.First()); //Dictionary dic = new Dictionary(); //foreach(var m in messageJson) //{ // dic.Add(m.msgSvrId, m); //} dic[msgsvrid].isillegal = 0; FileUnit.Write(Path.Combine(dir, path), Utility.ConvertToJSON(dic.Values.ToList()).TrimStart('[').TrimEnd(']')); } } result = wx_MessageCompliance_BL.DeleteMessage(ref errors, id.Value); return JsonHandler.DeleteMessage(errors, result); } catch (Exception ex) { LogHelper.Error(ex); errors.Add(ex.ToString()); return JsonHandler.DeleteMessage(errors, false); } } else //删除录音记录 { result = wx_MessageCompliance_BL.DeleteMessage(ref errors, id.Value); return JsonHandler.DeleteMessage(errors, result); } } #endregion [AuthorizeRedirect(Roles = InitRights.CONST_合规信息统计)] public ActionResult CountCompliance(DateTime? stime, DateTime? etime) { ToolBar tool = new ToolBar(); string[] toolbtn = new ToolButtonView().ToolButtonRight(InitRights.合规信息统计, userRightId); tool.AllowButton(toolbtn); ViewBag.ToolBar = tool; if (!stime.HasValue) stime = DateTime.Now; if (!etime.HasValue) etime = DateTime.Now; var list = bas_ComType_Q_BL.GetList().Where(m => m.map_TYPECODE.Contains("MessageCompliance")).OrderBy(m => m.map_TYPECODE).ToList(); //string tableId = "tablist"; //Table tab = new Table(tableId); //tab.AddHeadCol("Eid", "", "客服"); //tab.AddHeadCol("Gname", "", "销售组"); //if(list != null) //{ // foreach(var bigType in list) // { // tab.AddHeadCol(bigType.map_TYPECODE, "", bigType.map_TYPENAME); // } //} //ViewBag.gridTable = tab.GetHead(); if (list == null) { list = new List(); } ViewBag.BigTypeList = list; ViewBag.stime = stime; ViewBag.etime = etime; return View(); } [AuthorizeRedirect(Roles = InitRights.CONST_合规信息统计)] public JsonResult GetCountComplianceHtml(string stime, string etime) { DataSet ds = wx_MessageCompliance_BL.CountMessageCompliance(stime, etime); List countComplianceByUserList = null; List countComplianceBySubTypeList = null; if (ds != null && ds.Tables[0].Rows.Count > 0) { countComplianceByUserList = ds.Tables[0].ToList(); } if (ds != null && ds.Tables[1].Rows.Count > 0) { countComplianceBySubTypeList = ds.Tables[1].ToList(); } var bigTypelist = bas_ComType_Q_BL.GetList().Where(m => m.map_TYPECODE.Contains("MessageCompliance")).OrderBy(m => m.map_TYPECODE).ToList(); List subTypeList = new List(); if (bigTypelist != null) { List subList = null; foreach (var item in bigTypelist) { subList = cache_BL.GetList_SubComType(item.map_TYPECODE); if (subList != null) { subTypeList.AddRange(subList); } } } Table tab = new Table("tablist"); if (countComplianceByUserList != null) { List innerUserIdList = countComplianceByUserList.GroupBy(m => m.InnerUserId).Select(g => g.Key).ToList(); if (innerUserIdList != null) { foreach (var userId in innerUserIdList) { tab.AddCol(InnerUserHelper.Instance.GetEidAndTrueName(userId)); tab.AddCol(InnerUserHelper.Instance.GetGroupName(InnerUserHelper.Instance.GetGroupId(userId))); if (bigTypelist != null) { foreach (var item in bigTypelist) { var model = countComplianceByUserList.Where(m => m.InnerUserId == userId && m.BigType == item.map_TYPECODE).SingleOrDefault(); tab.AddCol(model != null ? model.CountNum : 0); } } tab.AddRow(); } } } string tableId = "tablist2"; Table tab2 = new Table(tableId); tab2.AddHeadCol("SubType", "", "合规分类"); tab2.AddHeadCol("CountNum", "", "数量"); tab2.AddHeadCol("NumRate", "", "占比(%)"); tab2.AddHeadRow(); if (countComplianceBySubTypeList != null) { foreach (var item in countComplianceBySubTypeList) { var subType = subTypeList.Where(m => m.map_SUBTYPECODE == item.SubType).SingleOrDefault(); tab2.AddCol(subType != null ? subType.map_SUBTYPENAME : ""); string url = string.Format("{3}", item.SubType, stime, etime, item.CountNum); tab2.AddCol(url); tab2.AddCol(item.NumRate); tab2.AddRow(); } } //ViewBag.gridTable = tab.GetTable(); var json = new { data = tab.GetRows(), rowList = tab2.GetTable() }; return Json(json, JsonRequestBehavior.AllowGet); } [AuthorizeRedirect(Roles = InitRights.CONST_合规信息统计)] public ActionResult CountComplianceList() { //ToolBar ToolBar tool = new ToolBar(); string[] toolbtn = new ToolButtonView().ToolButtonRight(InitRights.合规信息统计, userRightId); tool.AllowButton(toolbtn); ViewBag.ToolBar = tool; //table string tableId = "tablist"; Table tab = new Table(tableId); tab.AddHeadCol("Eid", "", "客服"); tab.AddHeadCol("GName", "", "销售组"); tab.AddHeadCol("SubTypeName", "", "类别"); tab.AddHeadCol("ARRIVALPAY", "", "数量"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead(); return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_合规信息统计)] public JsonResult GetCountComplianceHtmlList(string columns) { var typeCode = Request["typeCode"]; var stime = Request["stime"]; var etime = Request["etime"]; DataSet ds = wx_MessageCompliance_BL.CountMessageComplianceList(typeCode, stime, etime); var subList = cache_BL.GetList_SubComType(typeCode); Table table = new Table(columns, true); if (ds != null && ds.Tables[0].Rows.Count > 0) { DataTable dt = ds.Tables[0]; foreach (DataRow dr in dt.Rows) { table.AddCol(InnerUserHelper.Instance.GetEidAndTrueName(Convert.ToDecimal(dr["inneruserid"]))); table.AddCol(InnerUserHelper.Instance.GetGroupName(InnerUserHelper.Instance.GetGroupId(Convert.ToDecimal(dr["inneruserid"])))); if (subList != null) { var subType = subList.Where(m => m.map_SUBTYPECODE == dr["subtype"].ToString()).SingleOrDefault(); table.AddCol(subType != null ? subType.SUBTYPENAME : ""); } else { table.AddCol(""); } table.AddCol(dr["countnum"]); table.AddRow(); } } var json = new { rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } private string getSubType(WX_MESSAGECOMPLIANCE_Extend model) { if (model.wx_MessageCompliance.BIGTYPE == Model.Enum.ComType.MessageComplianceA.ToString()) { var subList = cache_BL.GetList_SubComType(Model.Enum.ComType.MessageComplianceA); if (subList != null) { var subType = subList.Where(m => m.map_SUBTYPECODE == model.wx_MessageCompliance.SUBTYPE).FirstOrDefault(); if (subType != null) { return subType.map_SUBTYPENAME; } } } else if (model.wx_MessageCompliance.BIGTYPE == Model.Enum.ComType.MessageComplianceB.ToString()) { var subList = cache_BL.GetList_SubComType(Model.Enum.ComType.MessageComplianceB); if (subList != null) { var subType = subList.Where(m => m.map_SUBTYPECODE == model.wx_MessageCompliance.SUBTYPE).FirstOrDefault(); if (subType != null) { return subType.map_SUBTYPENAME; } } } else if (model.wx_MessageCompliance.BIGTYPE == Model.Enum.ComType.MessageComplianceC.ToString()) { var subList = cache_BL.GetList_SubComType(Model.Enum.ComType.MessageComplianceC); if (subList != null) { var subType = subList.Where(m => m.map_SUBTYPECODE == model.wx_MessageCompliance.SUBTYPE).FirstOrDefault(); if (subType != null) { return subType.map_SUBTYPENAME; } } } else if (model.wx_MessageCompliance.BIGTYPE == Model.Enum.ComType.MessageComplianceD.ToString()) { var subList = cache_BL.GetList_SubComType(Model.Enum.ComType.MessageComplianceD); if (subList != null) { var subType = subList.Where(m => m.map_SUBTYPECODE == model.wx_MessageCompliance.SUBTYPE).FirstOrDefault(); if (subType != null) { return subType.map_SUBTYPENAME; } } } return ""; } private string getMsgContent(WX_Message_Extend model) { if (model.msgtype == 3) { return string.Format("[图片]:", model.msgsvrid, model.msgtype); } else if (model.msgtype == 47) { if (!string.IsNullOrWhiteSpace(model.msgurl)) { return string.Format("", model.msgsvrid, model.msgtype, model.msgurl); } else { return string.Format("", model.msgsvrid, model.msgtype); } } else if (model.msgtype == 34) { return string.Format("[语音]", model.msgsvrid, model.msgtype); } else if (model.msgtype == 43) { return string.Format("[视频]", model.msgsvrid, model.msgtype); } else if (model.msgtype == 49) { return string.Format("[文件]", model.msgsvrid, model.msgtype); } else { return string.Format("
{1}
", model.msgsvrid, model.msgcontent); //return model.msgcontent; } } private List getMonthList() { List list = new List(); var currentText = string.Format("{0:yyyy}年{0:MM}月", DateTime.Now); var currentValue = string.Format("{0:yyyyMM}", DateTime.Now); var endText = "2016年12月"; var endValue = "201612"; list.Add(new SelectListItem { Text = currentText, Value = currentValue }); int i = 1; while (true) { var text = string.Format("{0:yyyy}年{0:MM}月", DateTime.Now.AddMonths(-i)); var value = string.Format("{0:yyyyMM}", DateTime.Now.AddMonths(-i)); if (value == endValue) { break; } list.Add(new SelectListItem { Text = text, Value = value }); i++; } list.Add(new SelectListItem { Text = endText, Value = endValue }); return list; } private class CountComplianceByUser { public decimal InnerUserId { get; set; } public string BigType { get; set; } public decimal CountNum { get; set; } } private class CountComplianceBySubType { public string SubType { get; set; } public decimal CountNum { get; set; } public decimal NumRate { get; set; } } //获取录音地址 private string _getCallRecordUrl(string _ServerID, string _FileName, out string cti) { var playurl = ""; cti = ""; var _IAD_localhostCallRecord = _BAS_PARAMETER_Q.GetModel_Patameter("ICSR_IAD_localhostCallRecord"); if (null != _IAD_localhostCallRecord) { var FuturesRecordServerUrl = _IAD_localhostCallRecord.PARAVALUE; playurl = FuturesRecordServerUrl + "?serverID=" + _ServerID + "&file=" + _FileName.Replace("\\", "/"); cti = _CSVR_CALLRECORD_Q.Sys_Environment_CTI_VER(); if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷移动坐席).ToString()) { playurl = FuturesRecordServerUrl + "?file=" + _FileName.Replace("\\", "/"); } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷固定坐席).ToString()) { var shjctiinterface = Utility.GetSettingByKey("shj"); playurl = shjctiinterface + "?action=record_download&filename=/var/spool/asterisk/monitor/" + _FileName.Replace("\\", "/"); } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.和声).ToString()) { playurl = FuturesRecordServerUrl + "?file=" + _FileName; } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯).ToString()) { playurl = FuturesRecordServerUrl + _FileName; } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯new).ToString()) { _IAD_localhostCallRecord = _BAS_PARAMETER_Q.GetModel_Patameter("ICSR_IAD_localhostCallRecord_AX"); var filename = _FileName; if (null != _IAD_localhostCallRecord) { playurl = _IAD_localhostCallRecord.PARAVALUE + (filename.StartsWith("UP") ? "/home/" + filename : filename); playurl = playurl.Replace("\\", "/"); } } } return playurl; } } }