using CRM.Core.DTO; using Ninject; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Web; using System.Web.Mvc; using WX.CRM.BLL.Deliver; using WX.CRM.BLL.Res; using WX.CRM.BLL.Util; using WX.CRM.Common; using WX.CRM.IBLL.Res; using WX.CRM.IBLL.Util; using WX.CRM.Model.Entity; using WX.CRM.Model.Enum; using WX.CRM.Model.MAP; using WX.CRM.WebHelper; namespace WX.CRM.WEB.Controllers.WeiXin { public class DeliverMethodController : BaseController { [Inject] public IRES_RESOURCEMOBILE_Q res_ResourceMobile_BL { get; set; } [Inject] public IRES_CUSTOMER_Q res_Customer_BL { get; set; } [Inject] public ICACHE_Q _CacheQ { get; set; } [Inject] public CACHE_BL cache_BL { get; set; } [Inject] public ISecurityHelper sHelper { get; set; } [Inject] private static IRES_CUSTOMER _customer = new RES_CUSTOMER_BL(); private DELIVER_BLL deliver_bll = new DELIVER_BLL(); [AuthorizeRedirect(Roles = InitRights.CONST_交付订单列表)] public ActionResult DeliverOrderList() { //ToolBar ToolBar tool = new ToolBar(); string[] toolbtn = new ToolButtonView().ToolButtonRight(InitRights.交付订单列表, userRightId); tool.AllowButton(toolbtn); tool.AddOtherButton("Other1", "查看订单交付连接", "icon-add", "ShowLink_Click", true); tool.AddOtherButton("Other2", "填写快递单号", "icon-edit", "emilNumber_Click", true); tool.AddOtherButton("Other3", "上传快递回执", "icon-export", "upload_Click", true); tool.AddOtherButton("Other4", "显示手机加密部分", "icon-export", "show_Phone_Click", true); tool.AddOtherButton("Other5", "修改收件信息", "icon-export", "address_Click", true); ViewBag.ToolBar = tool; //table Pager pager = new Pager() { page = 1, rows = 20 }; string tableId = "tablist"; Table tab = new Table(tableId); tab.isCheckbox = true; tab.AddHeadCol("RESID", "", "客户ID"); tab.AddHeadCol("DEPTCODE", "", "部门归属"); tab.AddHeadCol("CNAME", "", "客户姓名"); tab.AddHeadCol("GNAME", "", "组别"); tab.AddHeadCol("INNERUSERID", "", "工号"); tab.AddHeadCol("SUBPRODUCTNAME", "", "产品"); tab.AddHeadCol("ORDERID", "", "订单ID"); tab.AddHeadCol("ORDERSTATUSNAME", "", "订单状态"); tab.AddHeadCol("OPENDAYS", "", "订单天数"); tab.AddHeadCol("DELIVERTYPE", "", "交付方式"); tab.AddHeadCol("DELIVERSTATUS", "", "交付状态"); tab.AddHeadCol("MAILNAME", "", "收件人"); tab.AddHeadCol("ADDRESSINFO", "", "收货地址"); tab.AddHeadCol("MAILPHONE", "", "收件人电话"); tab.AddHeadCol("MAILTYPE", "", "快递公司"); tab.AddHeadCol("MAILNUMBER", "", "快递单号"); tab.AddHeadCol("MAILFIlE", "", "快递回执"); tab.AddHeadCol("OTIME", "", "订单审核时间"); tab.AddHeadCol("DTIME", "", "交付时间"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pager, tableId, "5,10,15,20"); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.currentRight = InitRights.CONST_交付订单列表;//当前页面权限 return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_交付订单列表)] public JsonResult GetDeliverOrderList(string columns, Pager pager, DeliverOrderListDto querydto, QueryUserComboDto usercomboDto) { string roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); var showPhoneArray = querydto.showPhone == null ? new List() : querydto.showPhone.Split(',').ToList(); List list = deliver_bll.GetList(ref pager, querydto, usercomboDto); Table table = new Table(columns, true); table.isCheckbox = true; table.gridPager = pager; var deptList = _CacheQ.GetList_SalesDepartMent().Where(p => p.CHANNELDEF != null); foreach (var item in list) { var linkUrl = string.Format("{2}" , "客户详细" , "/Csvr/CustomerInfo/CustomerDetail?resid=" + item.RESID , item.RESID); var dept = deptList.FirstOrDefault(p => p.SALEDEPTCODE == item.DEPTCODE); table.AddCol(linkUrl); if (dept != null) { table.AddCol(dept.DEPTNAME); } else { table.AddCol("未知"); } table.AddCol(item.CNAME); if (decimal.TryParse(item.INNERUSERID, out decimal iid)) { var innerUserId = Convert.ToDecimal(iid); table.AddCol(InnerUserHelper.Instance.GetGroupName(InnerUserHelper.Instance.GetGroupId(innerUserId))); table.AddCol(InnerUserHelper.Instance.EidAndName(innerUserId)); } else { table.AddCol("无工号"); table.AddCol("无工号"); } table.AddCol(item.SUBPRODUCTNAME); table.AddCol(item.ORDERID); if (item.ORDERSTATUS == "190") { table.AddCol("color:blue", "", item.ORDERSTATUSNAME); } else if (item.ORDERSTATUS == "195") { table.AddCol("", "", string.Format("{2}", "支付记录申请列表", "/weixin/orderpay?orderid=" + item.ORDERID.ToString(), item.ORDERSTATUSNAME)); } else if (item.ORDERSTATUS == "200") { table.AddCol("color:orange", "", item.ORDERSTATUSNAME); } else if (item.ORDERSTATUS == "220") { table.AddCol("color:green", "", item.ORDERSTATUSNAME); } else { table.AddCol(item.ORDERSTATUSNAME); } table.AddCol(item.OPENDAYS); table.AddCol(item.DELIVERTYPE); //交付状态 table.AddCol(item.DELIVERSTATUS); table.AddCol(item.MAILNAME); table.AddCol(item.ADDRESSINFO); if (showPhoneArray.Contains(item.ORDERID.ToString()) && !string.IsNullOrEmpty(item.MAILRESID))//需要显示手机号的订单 { DataTable dataTable = res_Customer_BL.CheckResidCanShowMobile(item.MAILRESID, UserId, roleCodes); int isShowMobile = Convert.ToInt32(dataTable.Rows[0]["isLook"]); string message = dataTable.Rows[0]["msg"].ToString(); if (isShowMobile == 0)//等于零为不允许查看号码 { table.AddCol(message); } else if (!string.IsNullOrEmpty(item.MAILRESID)) { PhoneLogModel phoneLogModel = new PhoneLogModel { Method = System.Reflection.MethodBase.GetCurrentMethod().Name, userid = UserId }; var mobile = res_ResourceMobile_BL.GetNumberByResId(item.MAILRESID, phoneLogModel); table.AddCol(mobile); } else { table.AddCol(item.MAILPHONE); } } else { table.AddCol(item.MAILPHONE); } table.AddCol(item.MAILTYPE); table.AddCol(item.MAILNUMBER); table.AddCol(item.MAILFIlE); table.AddCol(item.OTIME); table.AddCol(item.DTIME); table.AddRow(); } var json = new { totalPages = pager.totalPages, totalRows = pager.totalRows, rowsList = table.GetRows(), foot = table.GetFoot(), }; return Json(json, JsonRequestBehavior.AllowGet); } [AuthorizeRedirect(Roles = InitRights.CONST_交付订单列表)] public FileResult ExportDeliverOrderList(Pager pager, DeliverOrderListDto querydto, QueryUserComboDto usercomboDto) { string roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); var showPhoneArray = querydto.showPhone == null ? new List() : querydto.showPhone.Split(',').ToList(); List list = deliver_bll.GetList(ref pager, querydto, usercomboDto); var checkedFilds = PageRequest.GetQueryString("checkedFilds"); var checkedTitle = PageRequest.GetQueryString("checkedTitles"); var deptList = _CacheQ.GetList_SalesDepartMent().Where(p => p.CHANNELDEF != null); foreach (var item in list) { var linkUrl = string.Format("{2}" , "客户详细" , "/Csvr/CustomerInfo/CustomerDetail?resid=" + item.RESID , item.RESID); var dept = deptList.FirstOrDefault(p => p.SALEDEPTCODE == item.DEPTCODE); item.DEPTCODE = dept?.DEPTNAME ?? "未知"; var innerUserId = Convert.ToDecimal(item.INNERUSERID); item.GNAME = InnerUserHelper.Instance.GetGroupName(InnerUserHelper.Instance.GetGroupId(innerUserId)); item.INNERUSERID = InnerUserHelper.Instance.EidAndName(innerUserId); // if (showPhoneArray.Contains(item.ORDERID.ToString()) && !string.IsNullOrEmpty(item.MAILRESID))//需要显示手机号的订单 { DataTable dataTable = res_Customer_BL.CheckResidCanShowMobile(item.MAILRESID, UserId, roleCodes); int isShowMobile = Convert.ToInt32(dataTable.Rows[0]["isLook"]); string message = dataTable.Rows[0]["msg"].ToString(); if (isShowMobile == 0)//等于零为不允许查看号码 { item.MAILPHONE = message; } else if (!string.IsNullOrEmpty(item.MAILRESID)) { PhoneLogModel phoneLogModel = new PhoneLogModel { Method = System.Reflection.MethodBase.GetCurrentMethod().Name, userid = UserId }; var mobile = res_ResourceMobile_BL.GetNumberByResId(item.MAILRESID, phoneLogModel); item.MAILPHONE = mobile; } } } return File(ExcelHelper.ExportListModelToExcel(list, "订单交付列表", 60000, checkedFilds, checkedTitle, null), "application/ms-excel", PageRequest.GetDlownLoadName("订单交付列表.xls")); } /// /// 获取产品交付连接 /// /// /// public JsonResult GetDeliverOrderLink(decimal? OrderId) { try { var link = deliver_bll.GetOrderDeliverLink(OrderId); return Json(new { s = true, d = link }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { return Json(new { s = false, m = ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取产品交付信息 /// /// /// public JsonResult GetMailInfo(decimal? OrderId) { try { string roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); var info = deliver_bll.GetDeliverInfo(OrderId); if (info == null) { return Json(new { s = false, m = "客户未填写收件信息!" }, JsonRequestBehavior.AllowGet); } else { if (!string.IsNullOrEmpty(info.MAIL_RESID)) { DataTable dataTable = res_Customer_BL.CheckResidCanShowMobile(info.MAIL_RESID, UserId, roleCodes); int isShowMobile = Convert.ToInt32(dataTable.Rows[0]["isLook"]); string message = dataTable.Rows[0]["msg"].ToString(); if (isShowMobile != 0)//等于零为不允许查看号码 { PhoneLogModel phoneLogModel = new PhoneLogModel { Method = System.Reflection.MethodBase.GetCurrentMethod().Name, userid = UserId }; info.MAIL_PHONE = res_ResourceMobile_BL.GetNumberByResId(info.MAIL_RESID, phoneLogModel); } } return Json(new { s = true, d = info }, JsonRequestBehavior.AllowGet); } } catch (Exception ex) { return Json(new { s = false, m = ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 修改交付地址 /// /// /// /// public JsonResult SubMailInfo(int OrderId, string mailName, string mailPhone, string province, string city, string area, string address) { try { if (OrderId <= 0) return Json(new { s = false, m = "参数异常!" }, JsonRequestBehavior.AllowGet); if (string.IsNullOrEmpty(mailName)) return Json(new { s = false, m = "缺少收件人!" }, JsonRequestBehavior.AllowGet); if (string.IsNullOrEmpty(mailPhone)) return Json(new { s = false, m = "缺少收件人电话!" }, JsonRequestBehavior.AllowGet); if (!Utility.ChekMobile(mailPhone)) return Json(new { s = false, m = "填写手机号不正确!" }, JsonRequestBehavior.AllowGet); if (string.IsNullOrEmpty(province) || string.IsNullOrEmpty(city) || string.IsNullOrEmpty(area)) return Json(new { s = false, m = "缺少区域!" }, JsonRequestBehavior.AllowGet); if (string.IsNullOrEmpty(address)) return Json(new { s = false, m = "缺少详细地址!" }, JsonRequestBehavior.AllowGet); Client_DeliverMethodDTO dto = new Client_DeliverMethodDTO(); dto.Order_Id = OrderId; dto.Mail_Name = mailName; dto.Mail_Phone = mailPhone; dto.Province = province; dto.City = city; dto.Area = area; dto.Address = address; dto.IsLog = false; //推送千拓//并下发坐席 var url = cache_BL.GetValue_Parameter(Parameter.Deliver_Push); var json = sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey); string retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8); return Json(new { s = true }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { return Json(new { s = false, m = ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 填写快递单号 /// /// /// /// public JsonResult AddDeliverLog(string OrderIds, string mailType, string MailNumber) { try { List logs = new List(); foreach (var id in OrderIds.Split(',')) { var oid = Convert.ToDecimal(id); var orderDeliver = deliver_bll.GetOrderDeliver(oid); if (orderDeliver == null) { return Json(new { s = false, m = $"{oid}订单,未选择交付方式!" }, JsonRequestBehavior.AllowGet); } else if (orderDeliver.DELIVER_TYPE != (int)DELIVER_TYPE_ENUM.邮寄交付) { return Json(new { s = false, m = $"{oid}订单,未选择邮寄交付!" }, JsonRequestBehavior.AllowGet); } //var orderDeliverLog = deliver_bll.GetOrderDeliverLog(oid); //if (orderDeliverLog.FirstOrDefault(m => !string.IsNullOrEmpty(m.MAIL_NUMBER)) != null) { // return Json(new { s = false, m = $"{oid}订单,已经填写过快递单号!" }, JsonRequestBehavior.AllowGet); //} Client_DeliverMethodDTO dto = new Client_DeliverMethodDTO(); dto.Order_Id = Convert.ToInt32(oid); dto.Deliver_Type = orderDeliver.DELIVER_TYPE; dto.Ip = GetWebClientIp(); dto.Mail_Type = mailType; dto.Mail_Number = MailNumber; dto.IsLog = true; logs.Add(dto); } //推送千拓//并下发坐席 var url = cache_BL.GetValue_Parameter(Parameter.Deliver_Push); foreach (var item in logs) { var json = sHelper.createSignEncodingStr(item.ToJson(), SecurityHelper.OrderClientIdKey); string retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8); //retmsg = sHelper.decyptData(SecurityHelper.OrderClientIdKey, retmsg); //var retmessage = WebHelper.JsonHelper.JsonDivertToObj(retmsg); } return Json(new { s = true }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { return Json(new { s = false, m = ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 文件上传 /// /// /// /// public JsonResult AddFileDeliverLog(string OrderIds, string fileName, string fileUrl) { List logs = new List(); foreach (var id in OrderIds.Split(',')) { var oid = Convert.ToDecimal(id); var orderDeliver = deliver_bll.GetOrderDeliver(oid); if (orderDeliver == null) { return Json(new { s = false, m = $"{oid}订单,未选择交付方式!" }, JsonRequestBehavior.AllowGet); } else if (orderDeliver.DELIVER_TYPE != (int)DELIVER_TYPE_ENUM.邮寄交付) { return Json(new { s = false, m = $"{oid}订单,未选择邮寄交付!" }, JsonRequestBehavior.AllowGet); } //var orderDeliverLog = deliver_bll.GetOrderDeliverLog(oid); //if (orderDeliverLog.FirstOrDefault(m => !string.IsNullOrEmpty(m.FILE_PATH)) != null) //{ // return Json(new { s = false, m = $"{oid}订单,已经上传过回执!" }, JsonRequestBehavior.AllowGet); //} Client_DeliverMethodDTO dto = new Client_DeliverMethodDTO(); dto.Order_Id = Convert.ToInt32(oid); dto.Deliver_Type = orderDeliver.DELIVER_TYPE; dto.Ip = GetWebClientIp(); dto.File_Name = fileName; dto.File_Path = fileUrl; dto.IsLog = true; logs.Add(dto); } //推送千拓//并下发坐席 var url = cache_BL.GetValue_Parameter(Parameter.Deliver_Push); foreach (var item in logs) { var json = sHelper.createSignEncodingStr(item.ToJson(), SecurityHelper.OrderClientIdKey); string retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8); //retmsg = sHelper.decyptData(SecurityHelper.OrderClientIdKey, retmsg); //var retmessage = WebHelper.JsonHelper.JsonDivertToObj(retmsg); } return Json(new { s = true }, JsonRequestBehavior.AllowGet); } /// /// 获取手机号 /// /// /// public JsonResult GetPhone(decimal? OrderId) { try { var phone = deliver_bll.GetPhone(OrderId); return Json(new { s = true, d = phone }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { return Json(new { s = false, m = ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 获取web客户端ip /// /// private static string GetWebClientIp() { string userIP = "未获取用户IP"; try { if (System.Web.HttpContext.Current == null || System.Web.HttpContext.Current.Request == null || System.Web.HttpContext.Current.Request.ServerVariables == null) { return ""; } string CustomerIP = ""; //CDN加速后取到的IP simone 090805 CustomerIP = System.Web.HttpContext.Current.Request.Headers["Cdn-Src-Ip"]; if (!string.IsNullOrEmpty(CustomerIP)) { return CustomerIP; } CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (!String.IsNullOrEmpty(CustomerIP)) { return CustomerIP; } if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null) { CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (CustomerIP == null) { CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } } else { CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } if (string.Compare(CustomerIP, "unknown", true) == 0 || String.IsNullOrEmpty(CustomerIP)) { return System.Web.HttpContext.Current.Request.UserHostAddress; } return CustomerIP; } catch { } return userIP; } } public class Client_DeliverMethodDTO { public int Order_Id { get; set; } public int Deliver_Type { get; set; } public string Mail_Name { get; set; } = ""; public string Mail_Phone { get; set; } = ""; public string Province { get; set; } = ""; public string City { get; set; } = ""; public string Area { get; set; } = ""; public string Address { get; set; } = ""; //日志信息 public string Deliver_url_Log { get; set; } = ""; public string Ip { get; set; } = ""; public string File_Path { get; set; } = ""; public string File_Name { get; set; } = ""; public string Mail_Type { get; set; } = ""; public string Mail_Number { get; set; } = ""; public bool IsLog { get; set; } } }