TG.WXCRM.V4/WEB/Controllers/WeiXin/DeliverMethodController.cs

565 lines
25 KiB
C#

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<string>() : querydto.showPhone.Split(',').ToList();
List<DeliverOrderView> 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("<a href=\"javascript:parent.ChildAddTab('{0}', '{1}', '')\">{2}</a>"
, "客户详细"
, "/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("<a style=\"color:red\" href=\"javascript:parent.ChildAddTab('{0}', '{1}', '')\">{2}</a>", "支付记录申请列表", "/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<string>() : querydto.showPhone.Split(',').ToList();
List<DeliverOrderView> 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("<a href=\"javascript:parent.ChildAddTab('{0}', '{1}', '')\">{2}</a>"
, "客户详细"
, "/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<DeliverOrderView>(list, "订单交付列表", 60000, checkedFilds, checkedTitle, null), "application/ms-excel", PageRequest.GetDlownLoadName("订单交付列表.xls"));
}
/// <summary>
/// 获取产品交付连接
/// </summary>
/// <param name="OrderId"></param>
/// <returns></returns>
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);
}
}
/// <summary>
/// 获取产品交付信息
/// </summary>
/// <param name="OrderId"></param>
/// <returns></returns>
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);
}
}
/// <summary>
/// 修改交付地址
/// </summary>
/// <param name="OrderId"></param>
/// <param name=""></param>
/// <returns></returns>
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);
}
}
/// <summary>
/// 填写快递单号
/// </summary>
/// <param name="OrderIds"></param>
/// <param name="EmilNumber"></param>
/// <returns></returns>
public JsonResult AddDeliverLog(string OrderIds, string mailType, string MailNumber)
{
try
{
List<Client_DeliverMethodDTO> logs = new List<Client_DeliverMethodDTO>();
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>(retmsg);
}
return Json(new { s = true }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
return Json(new { s = false, m = ex.Message }, JsonRequestBehavior.AllowGet);
}
}
/// <summary>
/// 文件上传
/// </summary>
/// <param name="OrderIds"></param>
/// <param name="EmilNumber"></param>
/// <returns></returns>
public JsonResult AddFileDeliverLog(string OrderIds, string fileName, string fileUrl)
{
List<Client_DeliverMethodDTO> logs = new List<Client_DeliverMethodDTO>();
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>(retmsg);
}
return Json(new { s = true }, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 获取手机号
/// </summary>
/// <param name="OrderId"></param>
/// <returns></returns>
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);
}
}
/// <summary>
/// 获取web客户端ip
/// </summary>
/// <returns></returns>
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; }
}
}