using CallCenter.Utility; using CallCenterApi.DB; using CallCenterApi.Interface.Controllers.Base; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; using System.Web.Mvc; namespace CallCenterApi.Interface.Controllers.MedicalFollowup { public class FollowUpController : BaseController { //private readonly BLL.T_Call_OutTaskTelNum otnBLL = new BLL.T_Call_OutTaskTelNum(); private readonly BLL.T_Call_OutAnswers ansBLL = new BLL.T_Call_OutAnswers(); private readonly BLL.T_Med_FollowUp mfBLL = new BLL.T_Med_FollowUp(); private readonly BLL.T_Ask_Question questionBLL = new BLL.T_Ask_Question(); private readonly BLL.T_Ask_QuestionItems questionItemBLL = new BLL.T_Ask_QuestionItems(); private readonly BLL.T_Ask_PagerInfo pagerInfoBLL = new BLL.T_Ask_PagerInfo(); BLL.SF_BINGRENQK busSF_BINGRENQK = new BLL.SF_BINGRENQK(); // GET: FollowUp public ActionResult Index() { return View(); } #region 获取随访列表 /// /// 获取随访列表 /// /// public ActionResult GetListAll() { string sql = " datediff(day,T1.CYRQ,'2020-11-01')<=0 "; DataTable dt = new DataTable(); string dischargedept = HttpUtility.UrlDecode(RequestString.GetQueryString("dischargedept"));//出院科室 string strstate = HttpUtility.UrlDecode(RequestString.GetQueryString("state"));//状态 string strcode = HttpUtility.UrlDecode(RequestString.GetQueryString("code"));//病案号 string stropename = HttpUtility.UrlDecode(RequestString.GetQueryString("opename"));//手术名称 //来电号码 string strtel = HttpUtility.UrlDecode(RequestString.GetQueryString("phone"));//联系人电话 string BRXM = HttpUtility.UrlDecode(RequestString.GetQueryString("name"));//姓名 string strdoctor = "";// HttpUtility.UrlDecode(RequestString.GetQueryString("tubedoctor"));//管床医生 adminken //诊断名称 string strzdmc = HttpUtility.UrlDecode(RequestString.GetQueryString("zdmc"));//诊断名称 //出院日期 string strstarttime = HttpUtility.UrlDecode(RequestString.GetQueryString("starttime"));//查询起始时间 string strendtime = HttpUtility.UrlDecode(RequestString.GetQueryString("endtime"));//查询截止时间 //总费用 string strcosts = HttpUtility.UrlDecode(RequestString.GetQueryString("costs")); string strcoste = HttpUtility.UrlDecode(RequestString.GetQueryString("coste")); //随访日期 adminken string strtime = "";// HttpUtility.UrlDecode(RequestString.GetQueryString("sftime")); //仅包含随访结束的 string strsfend = "";// HttpUtility.UrlDecode(RequestString.GetQueryString("sfend")); string strResult = "";// HttpUtility.UrlDecode(RequestString.GetQueryString("sresult")); //仅二级随访未完成 string strejwwc = "";//HttpUtility.UrlDecode(RequestString.GetQueryString("secondlevel")); //满意度 string strsatisfy = ""; HttpUtility.UrlDecode(RequestString.GetQueryString("satisfied")); //类型 string strtype = "";// HttpUtility.UrlDecode(RequestString.GetQueryString("type")); string strpageindex = RequestString.GetQueryString("page"); int pageindex = 1; string strpagesize = RequestString.GetQueryString("pagesize"); int pagesize = 10; if (dischargedept.Trim() != "" && dischargedept != "undefined") { sql += " and T1.CYKS like '%" + dischargedept.Trim() + "%' "; } if (strstate.Trim() != "" && strstate != "undefined") { if (strstate == "2") { sql += " and T4.F_Id IS NOT NULL and T4.F_Result='正常接通'"; } else if (strstate == "1") { sql += " and T4.F_Id IS NULL "; } else if (strstate == "3") { sql += " and T4.F_Id IS NOT NULL and T4.F_Result!='正常接通' "; } } else { sql += " and T4.F_Id IS NULL "; } if (strcode.Trim() != "" && strcode != "undefined") { sql += " and T1.BAH = '" + strcode.Trim() + "' "; } if (stropename.Trim() != "" && stropename != "undefined") { sql += " and T2.SSMC like '%" + stropename.Trim() + "%' "; } if (BRXM.Trim() != "" && BRXM != "undefined") { sql += " and T1.BRXM = '" + BRXM.Trim() + "' "; } if (strdoctor.Trim() != "" && strdoctor != "undefined") { sql += " and F_TubeDoctor like '%" + strdoctor.Trim() + "%' "; } if (strtel.Trim() != "" && strtel != "undefined") { sql += " and T1.XZZDH like '%" + strtel + "%' "; } if (strstarttime!=null&&strstarttime.Trim() != "" && strstarttime != "undefined") { sql += " and datediff(day,T1.CYRQ,'" + strstarttime + "')<=0 "; } if (strendtime.Trim() != "" && strendtime != "undefined") { sql += " and datediff(day,T1.CYRQ,'" + strendtime + "')>=0 "; } if (strzdmc.Trim() != "" && strzdmc != "undefined") { sql += " and T3.ZZDMC = '" + strzdmc.Trim() + "' "; } if (strcosts.Trim() != "" && strcosts != "undefined") { sql += " and T1.ZFY >= '" + strzdmc.Trim() + "' "; } if (strcoste.Trim() != "" && strcoste != "undefined") { sql += " and T1.ZFY <= '" + strzdmc.Trim() + "' "; } if (strtime.Trim() != "" && strtime != "undefined") { sql += " and datediff(day,F_SFDate,'" + strtime + "')=0 "; } //if (strsfend.Trim() != "" && strsfend != "undefined") //{ // sql += " and F_State = 3 ";//随访完成状态 //} if (strejwwc.Trim() != "" && strejwwc != "undefined") { sql += " and F_State = 2 ";//随访完成状态 } if (strsatisfy.Trim() != "" && strsatisfy != "undefined") { sql += " and F_Satisfied = '" + strsatisfy + "' ";//随访完成状态 } if (strtype.Trim() != "" && strtype != "undefined") { sql += " and F_Type = '" + strtype.Trim() + "' "; } if (strpageindex.Trim() != "") { pageindex = Convert.ToInt32(strpageindex); } if (strpagesize.Trim() != "") { pagesize = Convert.ToInt32(strpagesize); } int count = 0; dt =busSF_BINGRENQK.GetALLListByPage(sql,"", (pageindex-1)*pagesize, pagesize*pageindex, out count); //dt = BLL.PagerBLL.GetListPager( // "T_Med_FollowUp", // "T_Med_FollowUp.F_Id", // "*", // sql, // "ORDER BY T_Med_FollowUp.F_Id desc", // pagesize, // pageindex, // true, // out recordCount); var obj = new { state = "success", message = "成功", rows = dt, total = count }; return Content(obj.ToJson()); } /// /// 根据id获取信息 /// /// public ActionResult GetListById(string id) { int idint = Convert.ToInt32(id); DataTable dt = new DataTable(); dt = busSF_BINGRENQK.GetALLListById(" T1.BINGRENZYID="+ idint, "", 0, 1); var obj = new { state = "success", message = "成功", rows = dt, total = 1 }; return Content(obj.ToJson()); } /// /// 获取随访单条结果 /// /// public ActionResult Getdetail() { DataTable dt = new DataTable(); int F_Id =Convert.ToInt32(HttpUtility.UrlDecode(RequestString.GetQueryString("F_Id"))); BLL.T_Med_FollowUp busfollowUp = new BLL.T_Med_FollowUp(); Model.T_Med_FollowUp model = busfollowUp.GetModel(F_Id); return Content(model.ToJson()); } /// /// 获取随访列表 /// /// public ActionResult GetListAllOld() { string sql = " and F_IsDel=0 "; DataTable dt = new DataTable(); string dischargedept = HttpUtility.UrlDecode(RequestString.GetQueryString("dischargedept"));//出院科室 string strstate = HttpUtility.UrlDecode(RequestString.GetQueryString("state"));//状态 string strcode = HttpUtility.UrlDecode(RequestString.GetQueryString("code"));//病案号 string stropename = HttpUtility.UrlDecode(RequestString.GetQueryString("opename"));//手术名称 //来电号码 string strtel = HttpUtility.UrlDecode(RequestString.GetQueryString("phone"));//联系人电话 string strname = HttpUtility.UrlDecode(RequestString.GetQueryString("name"));//姓名 string strdoctor = HttpUtility.UrlDecode(RequestString.GetQueryString("tubedoctor"));//管床医生 //诊断名称 string strzdmc = HttpUtility.UrlDecode(RequestString.GetQueryString("zdmc"));//诊断名称 //出院日期 string strstarttime = HttpUtility.UrlDecode(RequestString.GetQueryString("starttime"));//查询起始时间 string strendtime = HttpUtility.UrlDecode(RequestString.GetQueryString("endtime"));//查询截止时间 //总费用 string strcosts = HttpUtility.UrlDecode(RequestString.GetQueryString("costs")); string strcoste = HttpUtility.UrlDecode(RequestString.GetQueryString("coste")); //随访日期 string strtime = HttpUtility.UrlDecode(RequestString.GetQueryString("sftime")); //仅包含随访结束的 string strsfend = HttpUtility.UrlDecode(RequestString.GetQueryString("sfend")); //仅二级随访未完成 string strejwwc = HttpUtility.UrlDecode(RequestString.GetQueryString("secondlevel")); //满意度 string strsatisfy = HttpUtility.UrlDecode(RequestString.GetQueryString("satisfied")); //类型 string strtype = HttpUtility.UrlDecode(RequestString.GetQueryString("type")); string strpageindex = RequestString.GetQueryString("page"); int pageindex = 1; string strpagesize = RequestString.GetQueryString("pagesize"); int pagesize = 10; if (dischargedept.Trim() != "" && dischargedept != "undefined") { sql += " and F_DischargeDept like '%" + dischargedept.Trim() + "%' "; } if (strstate.Trim() != "" && strstate != "undefined") { sql += " and F_State = '" + strstate.Trim() + "' "; } if (strcode.Trim() != "" && strcode != "undefined") { sql += " and F_Code = '" + strcode.Trim() + "' "; } if (stropename.Trim() != "" && stropename != "undefined") { sql += " and F_OpeName like '%" + stropename.Trim() + "%' "; } if (strname.Trim() != "" && strname != "undefined") { sql += " and F_Name = '" + strname.Trim() + "' "; } if (strdoctor.Trim() != "" && strdoctor != "undefined") { sql += " and F_TubeDoctor like '%" + strdoctor.Trim() + "%' "; } if (strtel.Trim() != "" && strtel != "undefined") { sql += " and F_Phone like '%" + strtel + "%' "; } if (strstarttime.Trim() != "" && strstarttime != "undefined") { sql += " and datediff(day,F_OutDate,'" + strstarttime + "')<=0 "; } if (strendtime.Trim() != "" && strendtime != "undefined") { sql += " and datediff(day,F_OutDate,'" + strendtime + "')>=0 "; } if (strzdmc.Trim() != "" && strzdmc != "undefined") { sql += " and F_ZDMC = '" + strzdmc.Trim() + "' "; } if (strcosts.Trim() != "" && strcosts != "undefined") { sql += " and F_TotalCosts >= '" + strzdmc.Trim() + "' "; } if (strcoste.Trim() != "" && strcoste != "undefined") { sql += " and F_TotalCosts <= '" + strzdmc.Trim() + "' "; } if (strtime.Trim() != "" && strtime != "undefined") { sql += " and datediff(day,F_SFDate,'" + strtime + "')=0 "; } if (strsfend.Trim() != "" && strsfend != "undefined") { sql += " and F_State = 3 ";//随访完成状态 } if (strejwwc.Trim() != "" && strejwwc != "undefined") { sql += " and F_State = 2 ";//随访完成状态 } if (strsatisfy.Trim() != "" && strsatisfy != "undefined") { sql += " and F_Satisfied = '"+strsatisfy +"' ";//随访完成状态 } if (strtype.Trim() != "" && strtype != "undefined") { sql += " and F_Type = '" + strtype.Trim() + "' "; } if (strpageindex.Trim() != "") { pageindex = Convert.ToInt32(strpageindex); } if (strpagesize.Trim() != "") { pagesize = Convert.ToInt32(strpagesize); } int recordCount = 0; dt = BLL.PagerBLL.GetListPager( "T_Med_FollowUp", "T_Med_FollowUp.F_Id", "*", sql, "ORDER BY T_Med_FollowUp.F_Id desc", pagesize, pageindex, true, out recordCount); var obj = new { state = "success", message = "成功", rows = dt, total = recordCount }; return Content(obj.ToJson()); } #endregion #region 问卷回答 /// /// /// /// 任务ID /// 客户电话ID /// 答案,数组形式["15_20_单选选项内容","17_25|36|58_复选选项内容1|选项内容2|选项内容3","30_0_问答题"] /// 呼叫结果 /// 电话号码 /// 姓名 /// 固定号码 /// 乡镇id /// 地址 /// public ActionResult Answers(int? taskid, int custelid, string[] ans, int hjjgid, string name, string phone, string address,string advise, string satisfied,string praise,string criticism,int pagerid=0, int countryid = 0) { taskid = 0; int cc = 0; var hjconfig = new BLL.T_Sys_DictionaryValue().GetModel(hjjgid); if (hjconfig == null) { return Error("提交结果配置不正常"); } if (custelid > 0) { var otnModel = busSF_BINGRENQK.GetModel(custelid.ToString()); if (otnModel != null) { //物业系统,客户档案信息是存储业主信息的,外呼不需要存储 //int cusid = saveCus(otnModel.F_Phone, name, phone, countryid, address); int cusid = 0; #region 保存答案 var ansModel = new Model.T_Call_OutAnswers(); string askqids = ""; string ansids = ""; if (ans != null) { //先删除 后添加 ansBLL.DeleteByTelid(custelid, taskid); ansModel.F_TaskID = taskid; ansModel.F_CusTelID = custelid; ansModel.F_CusID = cusid; ansModel.F_OptBy = CurrentUser.UserData.F_UserId; ansModel.F_OptByName = CurrentUser.UserData.F_UserName; ansModel.F_OptOn = DateTime.Now; ansModel.F_Expand1 = countryid.ToString(); ansModel.F_Expand3 = DateTime.Now.ToString("yyyyMMddHHmmssfff"); #region 循环保存 foreach (var item in ans) { var nn = 0; var ii = item.Split('_'); ansModel.F_QID = int.Parse(ii[0]); askqids += ii[0] + ","; ansids += ii[1] + ","; if (ii[1].IndexOf('|') > 0) { var iii = ii[1].Trim('|').Split('|'); var iia = ii[2].Trim('|').Split('|'); for (int i = 0; i < iii.Length; i++) { ansModel.F_QIID = int.Parse(iii[i]); ansModel.F_Answer = iia[i]; if (ansBLL.Add(ansModel) > 0) nn++; } if (nn == iii.Length) cc++; } else { ansModel.F_QIID = int.Parse(ii[1]); ansModel.F_Answer = ii[2]; if (ansBLL.Add(ansModel) > 0) cc++; } } #endregion } #endregion #region 保存日志 BLL.SF_Result busResult= new BLL.SF_Result(); Model.SF_Result modelResult= busResult.GetModel(custelid.ToString()); if (modelResult != null) { busResult.Delete(modelResult.F_Id); modelResult.F_SFNum += 1; modelResult.F_Remark += "
上次满意度:" + modelResult.F_MYD; modelResult.F_Remark += "
上次建议:" + modelResult.F_Advise; modelResult.F_Remark += "
上次回访结果" + modelResult.F_Result; } else { modelResult = new Model.SF_Result(); modelResult.F_SFNum = 1; } modelResult.F_Result = hjconfig.F_Name; modelResult.F_Id = custelid.ToString(); modelResult.F_SFPersion = CurrentUser.UserData.F_UserName; modelResult.F_SFPersionId= CurrentUser.UserData.F_UserCode; modelResult.F_SFTime = DateTime.Now; modelResult.F_Advise = advise; modelResult.F_MYD = satisfied; modelResult.F_PagerID = pagerid.ToString(); modelResult.F_Praise = praise; modelResult.F_Criticism = criticism; modelResult.F_State = 2; busResult.Add(modelResult); //planrecord(otnModel); #endregion } } if (ans != null) { if (cc == ans.Length) { //return Success("问卷答案提交成功!taskid=" + taskid + ",custelid=" + custelid + ",操作人:" + CurrentUser.UserData.F_UserCode); return Success("问卷答案提交成功!custelid=" + custelid + ",操作人:" + CurrentUser.UserData.F_UserCode); } else { ansBLL.DeleteByTelid(custelid, taskid); return Error("问卷答案提交失败!custelid=" + custelid + ",操作人:" + CurrentUser.UserData.F_UserCode); } } else if (hjconfig.F_Name.Contains ("正常")) { return Error("没有问卷答案提交"); } else { return Success("提交成功!custelid=" + custelid + ",操作人:" + CurrentUser.UserData.F_UserCode); } } #endregion #region 导出 #endregion #region 获取随访结果详情 //获取任务结果详情 public ActionResult GetTaskTelInfo(int id = 0) { if (id <= 0) return Error("参数不正确"); var model = mfBLL.GetModel(id); var paperid = 0; if (model != null) { var taskmodel = new Model.T_Med_FollowUp(); #region 绑定任务和客户信息 taskmodel.F_Id = model.F_Id;//号码id //taskmodel.F_TaskId = model.F_TaskId.Value;//任务id //taskmodel.F_HJJGId = model.F_HJJGId != null ? model.F_HJJGId.Value : 0;//呼叫结果id taskmodel.F_Satisfied = model.F_Satisfied; taskmodel.F_SFResult = model.F_SFResult; if (!string.IsNullOrWhiteSpace(model.F_Name)) taskmodel.F_Name = model.F_Name;//客户姓名 if (!string.IsNullOrWhiteSpace(model.F_Phone)) taskmodel.F_Phone = model.F_Phone;//号码 if (!string.IsNullOrWhiteSpace(model.F_Addr)) taskmodel.F_Addr = model.F_Addr;//住址 #endregion var anslist = ansBLL.GetModelList(" F_CusTelID=" + id + " ");//ansBLL.GetModelList(" F_TaskID=" + model.F_TaskId.Value + " and F_CusTelID=" + id + " "); //var tmodel = otBLL.GetModel(model.F_TaskId.Value); //if (tmodel != null) //{ paperid = model .F_PagerID; #region 获取问卷试题信息以及答案 var pmodel = pagerInfoBLL.GetModel(paperid); 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 "); var qilist = questionItemBLL.GetModelList(" F_QuestionId in (select F_QuestionId from T_Ask_PagerItems where F_PagerId=" + paperid + ") order by F_ItemId "); var newmodel = new { F_Title = pmodel.F_Title, F_Remark = pmodel.F_Remark, F_StartText = pmodel.F_StartText, F_EndText = pmodel.F_EndText, F_Questions = qlist.Select(q => { var answers = ""; var qalist = anslist.Where(al => al.F_QID.Value == q.F_QuestionId).ToList(); if (qalist.Count > 0) { if (q.F_Type > 1) { foreach (var item in qalist) { answers += item.F_QIID + "|"; } } else { answers = qalist[0].F_Answer; } } return new { quesid = q.F_QuestionId, questitle = q.F_Title, questype = q.F_Type, quescontent = q.F_Content, quesremark = q.F_Remark, quesanswers = answers.Trim('|'), quesitems = qilist.Where(qq => qq.F_QuestionId == q.F_QuestionId).Select(qi => { return new { itemid = qi.F_ItemId, itemname = qi.F_ItemName, itemremark = qi.F_Remark, }; }) }; }) }; #endregion //taskmodel.F_TaskName = tmodel.F_TaskName;//任务名称 //taskmodel.F_TaskRemark = tmodel.F_TaskRemark;//任务备注 var objy = new { taskModel = taskmodel, paperModel = newmodel }; return Success("获取详情成功", objy); //} } return Error("获取详情失败"); } #endregion #region 科室随访率统计 //获取数据 public ActionResult GetSFDataList(string ks,string stime,string etime) { ActionResult res = NoToken("未知错误,请重新登录"); DataTable dtNew = new DataTable(); dtNew = GetData(ks, stime, etime); res = Success("获取科室随访率统计数据成功", dtNew); return res; } //获取数据源 private DataTable GetData(string ks, string stime, string etime) { DataTable dtNew = new DataTable(); #region 编辑表头 /*DataColumn dc1 = new DataColumn("科室名称", Type.GetType("System.String")); DataColumn dc2 = new DataColumn("科室代码", Type.GetType("System.String")); DataColumn dc3 = new DataColumn("时间", Type.GetType("System.String")); DataColumn dc4 = new DataColumn("需要随访病人数", Type.GetType("System.String")); DataColumn dc5 = new DataColumn("随访完成人数", Type.GetType("System.String")); DataColumn dc6 = new DataColumn("科室随访率", Type.GetType("System.String")); DataColumn dc7 = new DataColumn("满意人数", Type.GetType("System.String")); DataColumn dc8 = new DataColumn("不满意人数", Type.GetType("System.String")); DataColumn dc9 = new DataColumn("随访满意率", Type.GetType("System.String")); dtNew.Columns.Add(dc1); dtNew.Columns.Add(dc2); dtNew.Columns.Add(dc3); dtNew.Columns.Add(dc4); dtNew.Columns.Add(dc5); dtNew.Columns.Add(dc6); #endregion string sql = " "; var list = bllCall.DataTableToList(bllCall.GetList($" 1=1 {sql} and UserCode is not null ").Tables[0]); int callInCount = 0, callOutCount = 0, calledCount = 0, nocalledCount = 0; //一天24小时 for (int i = 0; i < 24; i++) { DateTime stimes = Convert.ToDateTime(stime + " 00:00:00").AddHours(i); DateTime etimes = Convert.ToDateTime(stime + " 00:59:59").AddHours(i); DataRow drNew = dtNew.NewRow(); //SELECT BeginTime, * FROM T_Call_CallRecords WHERE DATEPART(hh,BeginTime) = DATEPART(hh, DATEADD(hh,-2,GETDATE())) and DATEPART(dd,BeginTime) = DATEPART(dd, GETDATE()) and DATEPART(mm, BeginTime) = DATEPART(mm, GETDATE()) and DATEPART(yy, BeginTime) = DATEPART(yy, GETDATE()) //CallType //CallState呼叫状态,0:未接通电话1已接通电话 var callInTimes = list.Where(x => x.CallType == 0 && x.BeginTime >= stimes && x.BeginTime <= etimes).Count(); //呼入量 var callOutTimes = list.Where(x => x.CallType == 1 && x.BeginTime >= stimes && x.BeginTime <= etimes).Count(); //呼出量 var calledTimes = list.Where(x => x.CallState == 1 && x.BeginTime >= stimes && x.BeginTime <= etimes).Count(); //接通量 var nocalledTimes = list.Where(x => x.CallState == 0 && x.BeginTime >= stimes && x.BeginTime <= etimes).Count();//未接通量 //var calledRate = list.Where(x => x.CallType == 1 && x.BeginTime >= stimes && x.BeginTime <= etimes).Count(); drNew["时间"] = (i + 1).ToString(); drNew["呼入量"] = callInTimes.ToString(); drNew["呼出量"] = callOutTimes.ToString(); drNew["接通量"] = calledTimes.ToString(); drNew["未接通量"] = nocalledTimes.ToString(); //计算未结案率 var calledTotal = calledTimes + nocalledTimes; Double notRate = 0.00; if (calledTotal > 0) notRate = (double)calledTimes / (double)calledTotal; drNew["接通率"] = (notRate * 100).ToString("0.00") + "%"; ////统计结案,未结案数 callInCount += callInTimes; callOutCount += callOutTimes; calledCount += calledTimes; nocalledCount += nocalledTimes; dtNew.Rows.Add(drNew); } #region 获取一条统计信息 DataRow drzj = dtNew.NewRow(); drzj["时间"] = "总计"; drzj["呼入量"] = callInCount.ToString(); drzj["呼出量"] = callOutCount.ToString(); drzj["接通量"] = calledCount.ToString(); drzj["未接通量"] = nocalledCount.ToString(); //计算未结案率 int totalAllCount = calledCount + nocalledCount; Double calledAllRate = 0.00; if (totalAllCount > 0) calledAllRate = (double)calledCount / (double)totalAllCount; drzj["接通率"] = (calledAllRate * 100).ToString("0.00") + "%"; dtNew.Rows.Add(drzj);*/ #endregion return dtNew; } #endregion } }