using Core.Web.App_Start; using Core.Web.WebHelper; using CRM.Core.BLL.Base; using CRM.Core.BLL.UserProtocol; using CRM.Core.BLL.Util; using CRM.Core.BLL.Wx; using CRM.Core.Common.Layui; using CRM.Core.Common.WebHelper; using CRM.Core.Model.Entity; using CRM.Core.Model.Enum; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text.RegularExpressions; using System.Web; using System.Web.Mvc; using WX.CRM.Common; using WX.CRM.WebHelper; namespace Core.Web.Controllers { public class UserProtocolController : BaseController { private static USER_PROTOCOL_BL userProtocolbll = new USER_PROTOCOL_BL(); private BAS_PARAMETER_BL paramter_bl = new BAS_PARAMETER_BL(); private ValidationErrors errors = new ValidationErrors(); private CACHE_BL cache_BL = new CACHE_BL(); /// /// 协议列表 /// /// [AuthorizeRedirect(RightsConfig.CONST_用户协议, ToolBarConfig.CONST_NotButton, true)] public ActionResult ProList() { ViewBag.rightCode = RightsConfig.CONST_用户协议; var companyList = cache_BL.GetCompanyVirtual(); var allChannel = new List>(); foreach (var company in companyList) { var channel = new Dictionary { { "name", company.CompanyName }, { "value", company.Channel.Replace(",", ";") } }; allChannel.Add(channel); } ViewBag.AllChannel = JsonHelper.ToJson(allChannel); return View(); } public JsonResult GetHtmlList(Laypage pager, string columns, string resid,string UMID, string username, string softusername,int? proType, int? status, string subname,DateTime? subsdate,DateTime? subedate,string verifyname, DateTime? verifysdate,DateTime? verifyedate, string protocolno, string channel) { pager.order = "desc"; List list = userProtocolbll.PageList(ref pager, resid, UMID, username, softusername, proType,status, subname,subsdate, subedate, verifyname,verifysdate, verifyedate, protocolno, channel); LayuiData data = new LayuiData() { msg = "数据加载成功!", count = pager.count, code = 0, data = list }; return Json(data, JsonRequestBehavior.AllowGet); } [HttpGet] [AuthorizeRedirect(RightsConfig.CONST_用户协议, ToolBarConfig.CONST_Export, false)] public FileResult Export(string resid, string UMID, string username, string softusername, int? proType, int? status, string subname, DateTime? subsdate, DateTime? subedate, string verifyname, DateTime? verifysdate, DateTime? verifyedate, string protocolno, string channel) { Laypage pager = new Laypage(); pager.page = 1; pager.limit = 30000; List list = userProtocolbll.PageList(ref pager, resid, UMID, username, softusername, proType, status, subname, subsdate, subedate, verifyname, verifysdate, verifyedate, protocolno, channel); List data = new List(); foreach(var item in list) { data.Add(new ProtocolExport { AUDITTIME = item.AUDITTIME, RESID = item.RESID, USERID = item.USERID, CompanyName = item.CompanyName, CREATER = item.CREATER, CTIME = item.CTIME, NOTE = item.NOTE, PRICE = item.PRICE == 0 ? "" : item.PRICE.ToString(), PROTOCOLNO = item.PROTOCOLNO, PROTOCOLTYPENAME = item.PROTOCOLTYPENAME, REVIEWER = item.REVIEWER, STATUSNAME = item.STATUSNAME, USERNAME = item.USERNAME }); } String file = string.Format("用户协议 {0}.xls", DateTime.Now.ToLocalTime().ToString("yyyyMMddHHmmssfffff")); return File(ExcelHelper.ExportListModelToExcel(data, "用户协议", 30000, null), "application/ms-excel", file); } /// /// 编辑 /// /// [AuthorizeRedirect(RightsConfig.CONST_用户协议, ToolBarConfig.CONST_Edit, true)] public ActionResult Edit() { return View(); } /// /// 新增 /// /// [AuthorizeRedirect(RightsConfig.CONST_用户协议, ToolBarConfig.CONST_Add, true)] public ActionResult Add() { //select * from BAS_PARAMETERGROUP ViewBag.ParamGroupList= paramter_bl.GetParamGroup(); return View(); } /// /// 审核 /// /// [AuthorizeRedirect(RightsConfig.CONST_用户协议, ToolBarConfig.CONST_Other1, true)] public ActionResult Aduit(int ID) { SecurityHelper sHelper = new SecurityHelper(); var model = userProtocolbll.GetOne(ID); var url = paramter_bl.GetValue_Parameter(Parameter.User_Protocol_NewUrl); string pdfName = userProtocolbll.ProtocolName(model.PROTOCOLTYPE) + ".pdf";//协议名称 string timeF = "yyyy年MM月dd日"; //和解协议 if ((ProtocolType)model.PROTOCOLTYPE == ProtocolType.退款和解协议) { #region 和解协议 退款 var json = new { ctime = model.CTIME?.ToString(timeF), jiaRefundPrice = model.PRICE, yiRefundPrice = model.PRICE, uid = model.USERID, agreementNum = model.ID, htid = model.PROTOCOLNO }; string clientid = SecurityHelper.OrderClientIdKey; string content = sHelper.encyptData(clientid, Utility.ConvertToJSON(json)); string sign = sHelper.signData(clientid, content); ViewBag.url = url + string.Format("/agreement/reconcile-refund?content={0}&sign={1}&clientId={2}", HttpUtility.UrlEncode(content), HttpUtility.UrlEncode(sign), clientid); //var url1 = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_Settlement); //ViewBag.url = string.Format(url1+"?content={0}&sign={1}&clientId={2}", HttpUtility.UrlEncode(content), HttpUtility.UrlEncode(sign), clientid); ViewBag.pdfName = pdfName; //协议文件地址 if (model.STATUS != 0) { var pdfurl = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_SignPdf); var pdfcontent = sHelper.encyptData(clientid, string.Format("{0}_A_{1}", model.USERID, model.ID)); var pdfsign = sHelper.signData(clientid, pdfcontent); string fxjssUrl = string.Format("{0}/{4}?content={1}&sign={2}&clientId={3}&employeeId={5}&employeeName={6}&viewSource={7}&pageSource={8}", pdfurl, HttpUtility.UrlEncode(pdfcontent), HttpUtility.UrlEncode(pdfsign), clientid, pdfName, Eid, UserName, "数智化合规", "用户协议" ); ViewBag.pdfUrl = fxjssUrl; //ViewBag.pdfUrl = string.Format("{0}/{1}?content={2}&sign={3}&clientId={4}", pdfurl, pdfName, HttpUtility.UrlEncode(pdfcontent), HttpUtility.UrlEncode(pdfsign), clientid); } else { ViewBag.pdfUrl = "#"; } ViewBag.status = model.STATUS; #endregion } else if ((ProtocolType)model.PROTOCOLTYPE == ProtocolType.撤销投诉协议) { #region 撤销投诉协议 var json = new { ctime = model.CTIME?.ToString(timeF), uid = model.USERID, agreementNum = model.ID, htid = model.PROTOCOLNO }; string clientid = SecurityHelper.OrderClientIdKey; string content = sHelper.encyptData(clientid, Utility.ConvertToJSON(json)); string sign = sHelper.signData(clientid, content); ViewBag.url = url + string.Format("/agreement/repeal-complaint?content={0}&sign={1}&clientId={2}", HttpUtility.UrlEncode(content), HttpUtility.UrlEncode(sign), clientid); //var url2 = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_CancelComplaint); //ViewBag.url = string.Format(url2 + "?content={0}&sign={1}&clientId={2}", HttpUtility.UrlEncode(content), HttpUtility.UrlEncode(sign), clientid); ViewBag.pdfName = pdfName; var viewSource = "数智化合规系统"; var pageSource = "Audit:用户协议.风控"; //协议文件地址 if (model.STATUS != 0) { var pdfurl = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_SignPdf); //风险揭示书 var pdfcontent = sHelper.encyptData(clientid, string.Format("{0}_B_{1}", model.USERID, model.ID)); var pdfsign = sHelper.signData(clientid, pdfcontent); string fxjssUrl = string.Format("{0}/{4}?content={1}&sign={2}&clientId={3}&employeeId={5}&employeeName={6}&viewSource={7}&pageSource={8}", pdfurl, HttpUtility.UrlEncode(pdfcontent), HttpUtility.UrlEncode(pdfsign), clientid, pdfName, Eid, UserName, viewSource, pageSource ); ViewBag.pdfUrl = fxjssUrl; //ViewBag.pdfUrl = string.Format("{0}/{1}?content={2}&sign={3}&clientId={4}", pdfurl, pdfName, HttpUtility.UrlEncode(pdfcontent), HttpUtility.UrlEncode(pdfsign), clientid); } else { ViewBag.pdfUrl = "#"; } ViewBag.status = model.STATUS; #endregion } else if ((ProtocolType)model.PROTOCOLTYPE == ProtocolType.不退款和解协议) { #region 和解协议 不退款 var json = new { ctime = model.CTIME?.ToString(timeF), uid = model.USERID, agreementNum = model.ID, htid = model.PROTOCOLNO }; string clientid = SecurityHelper.OrderClientIdKey; string content = sHelper.encyptData(clientid, Utility.ConvertToJSON(json)); string sign = sHelper.signData(clientid, content); ViewBag.url = url + string.Format("/agreement/reconcile?content={0}&sign={1}&clientId={2}", HttpUtility.UrlEncode(content), HttpUtility.UrlEncode(sign), clientid); //var url1 = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_Settlement); //ViewBag.url = string.Format(url1 + "?content={0}&sign={1}&clientId={2}", HttpUtility.UrlEncode(content), HttpUtility.UrlEncode(sign), clientid); ViewBag.pdfName = pdfName; //协议文件地址 if (model.STATUS != 0) { var pdfurl = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_SignPdf); var pdfcontent = sHelper.encyptData(clientid, string.Format("{0}_A_{1}", model.USERID, model.ID)); var pdfsign = sHelper.signData(clientid, pdfcontent); string fxjssUrl = string.Format("{0}/{4}?content={1}&sign={2}&clientId={3}&employeeId={5}&employeeName={6}&viewSource={7}&pageSource={8}", pdfurl, HttpUtility.UrlEncode(pdfcontent), HttpUtility.UrlEncode(pdfsign), clientid, pdfName, Eid, UserName, "数智化合规", "用户协议" ); ViewBag.pdfUrl = fxjssUrl; //ViewBag.pdfUrl = string.Format("{0}/{1}?content={2}&sign={3}&clientId={4}", pdfurl, pdfName, HttpUtility.UrlEncode(pdfcontent), HttpUtility.UrlEncode(pdfsign), clientid); } else { ViewBag.pdfUrl = "#"; } ViewBag.status = model.STATUS; #endregion } else if ((ProtocolType)model.PROTOCOLTYPE == ProtocolType.退款赠与协议) { #region 赠与协议 退款 var json = new { ctime = model.CTIME?.ToString(timeF), uid = model.USERID, agreementNum = model.ID, productname = (model.PRODUCTTYPE == 1 ? model.PRODUCTNAME : model.SERVICENAME), giftdays = model.GIFTDAYS, htid = model.PROTOCOLNO }; var ApiName = model.PRODUCTTYPE == 1 ? "gift-product-refund" : "gift-service-refund"; string clientid = SecurityHelper.OrderClientIdKey; string content = sHelper.encyptData(clientid, Utility.ConvertToJSON(json)); string sign = sHelper.signData(clientid, content); ViewBag.url = url + string.Format("/agreement/{3}?content={0}&sign={1}&clientId={2}", HttpUtility.UrlEncode(content), HttpUtility.UrlEncode(sign), clientid, ApiName); ViewBag.pdfName = pdfName; //协议文件地址 if (model.STATUS != 0) { var pdfurl = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_SignPdf); var pdfcontent = sHelper.encyptData(clientid, string.Format("{0}_C_{1}", model.USERID, model.ID)); var pdfsign = sHelper.signData(clientid, pdfcontent); string fxjssUrl = string.Format("{0}/{4}?content={1}&sign={2}&clientId={3}&employeeId={5}&employeeName={6}&viewSource={7}&pageSource={8}", pdfurl, HttpUtility.UrlEncode(pdfcontent), HttpUtility.UrlEncode(pdfsign), clientid, pdfName, Eid, UserName, "数智化合规", "用户协议" ); ViewBag.pdfUrl = fxjssUrl; //ViewBag.pdfUrl = string.Format("{0}/{1}?content={2}&sign={3}&clientId={4}", pdfurl, pdfName, HttpUtility.UrlEncode(pdfcontent), HttpUtility.UrlEncode(pdfsign), clientid); } else { ViewBag.pdfUrl = "#"; } ViewBag.status = model.STATUS; #endregion } else if ((ProtocolType)model.PROTOCOLTYPE == ProtocolType.不退款赠与协议) { #region 赠与协议 不退款 var json = new { ctime = model.CTIME?.ToString(timeF), uid = model.USERID, agreementNum = model.ID, productname = (model.PRODUCTTYPE == 1 ? model.PRODUCTNAME : model.SERVICENAME), giftdays = model.GIFTDAYS, htid = model.PROTOCOLNO }; var ApiName = model.PRODUCTTYPE == 1 ? "gift-product" : "gift-service"; string clientid = SecurityHelper.OrderClientIdKey; string content = sHelper.encyptData(clientid, Utility.ConvertToJSON(json)); string sign = sHelper.signData(clientid, content); ViewBag.url = url + string.Format("/agreement/{3}?content={0}&sign={1}&clientId={2}", HttpUtility.UrlEncode(content), HttpUtility.UrlEncode(sign), clientid, ApiName); ViewBag.pdfName = pdfName; //协议文件地址 if (model.STATUS != 0) { var pdfurl = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_SignPdf); var pdfcontent = sHelper.encyptData(clientid, string.Format("{0}_C_{1}", model.USERID, model.ID)); var pdfsign = sHelper.signData(clientid, pdfcontent); string fxjssUrl = string.Format("{0}/{4}?content={1}&sign={2}&clientId={3}&employeeId={5}&employeeName={6}&viewSource={7}&pageSource={8}", pdfurl, HttpUtility.UrlEncode(pdfcontent), HttpUtility.UrlEncode(pdfsign), clientid, pdfName, Eid, UserName, "数智化合规", "用户协议" ); ViewBag.pdfUrl = fxjssUrl; //ViewBag.pdfUrl = string.Format("{0}/{1}?content={2}&sign={3}&clientId={4}", pdfurl, pdfName, HttpUtility.UrlEncode(pdfcontent), HttpUtility.UrlEncode(pdfsign), clientid); } else { ViewBag.pdfUrl = "#"; } ViewBag.status = model.STATUS; #endregion } else if ((ProtocolType)model.PROTOCOLTYPE == ProtocolType.高龄人群投资风险告知确认书) { #region 高龄人群投资风险告知确认书 var json = new { ctime = model.CTIME?.ToString(timeF), uid = model.USERID, agreementNum = model.ID, htid = model.PROTOCOLNO }; string clientid = SecurityHelper.OrderClientIdKey; string content = sHelper.encyptData(clientid, Utility.ConvertToJSON(json)); string sign = sHelper.signData(clientid, content); ViewBag.url = url + string.Format("/agreement/elderly-investment-risk-book?content={0}&sign={1}&clientId={2}", HttpUtility.UrlEncode(content), HttpUtility.UrlEncode(sign), clientid); ViewBag.pdfName = pdfName; //协议文件地址 if (model.STATUS != 0) { var pdfurl = paramter_bl.GetValue_Parameter(Parameter.UserCenter_RiaService_SignPdf); var pdfcontent = sHelper.encyptData(clientid, string.Format("{0}_D_{1}", model.USERID, model.ID)); var pdfsign = sHelper.signData(clientid, pdfcontent); string fxjssUrl = string.Format("{0}/{4}?content={1}&sign={2}&clientId={3}&employeeId={5}&employeeName={6}&viewSource={7}&pageSource={8}", pdfurl, HttpUtility.UrlEncode(pdfcontent), HttpUtility.UrlEncode(pdfsign), clientid, pdfName, Eid, UserName, "数智化合规", "用户协议" ); ViewBag.pdfUrl = fxjssUrl; //ViewBag.pdfUrl = string.Format("{0}/{1}?content={2}&sign={3}&clientId={4}", pdfurl, pdfName, HttpUtility.UrlEncode(pdfcontent), HttpUtility.UrlEncode(pdfsign), clientid); } else { ViewBag.pdfUrl = "#"; } ViewBag.status = model.STATUS; #endregion } ViewBag.model = model; ViewBag.ModelJson = JsonHelper.ObjDivertToJson(model); ViewBag.StatusName = userProtocolbll.StatusName(model.STATUS); ViewBag.GiftStatusName = userProtocolbll.GetGiftOrderStatusStr(model.ORDERID); return View(); } /// /// 数据插入 /// /// /// public JsonResult Save(SubmitModel model) { SYS_USER_PROTOCOL d = new SYS_USER_PROTOCOL(); d.RESID = model.resid.Trim(); d.USERNAME = model.username; d.PROTOCOLTYPE = model.protocolType; d.PRODUCTTYPE = model.producttype; d.SERVICENAME = model.servicename; d.PRODUCTNAME = model.productname; d.GIFTDAYS = model.giftdays ?? 0; d.ORDERID = model.orderid; d.PRICE = model.price ?? 0; d.USERID = model.userid; d.NOTE = model.note ?? ""; d.STATUS = 0;//默认未签订 d.CTIME = DateTime.Now; d.creater = UserName; d.PROTOCOLNO = CreateProtocolNo(model.protocolType); //退款金额判断 if ((ProtocolType)model.protocolType == ProtocolType.退款和解协议) { WX_SZZYORDER_BL wx_SzzyOrder_BL = new WX_SZZYORDER_BL(); WX_SzzyOrderRefund_BL wx_szzyorderrefund_BL = new WX_SzzyOrderRefund_BL(); var list = wx_SzzyOrder_BL.GetModelByResId(model.resid);//查询订单 var refundList = wx_szzyorderrefund_BL.GetListByResid(model.resid); var sumPrice = list.Where(m=> "80,90,200,205,220".Split(',').Contains(m.ORDERSTATUS)).Sum(m => m.ARRIVALPAY); sumPrice -= refundList.Sum(m => m.refundprice); if ((model.price ?? 0) > sumPrice && !model.confirm) { return Json(new { s = false, m = "当前退款金额大于(客户各订单到账金额总和-已退款金额),请确认是否提交?", c = true }, JsonRequestBehavior.AllowGet); } } //验证通过后插入 var res = userProtocolbll.Create(ref errors,d); if (res) { return Json(new { s = true }, JsonRequestBehavior.AllowGet); } else { return Json(new { s =false, errors }, JsonRequestBehavior.AllowGet); } } private string CreateProtocolNo(int protocolType) { var no = ""; switch ((ProtocolType)protocolType) { case ProtocolType.退款和解协议: case ProtocolType.不退款和解协议: no = "HJ"; break; case ProtocolType.退款赠与协议: case ProtocolType.不退款赠与协议: no = "ZY"; break; case ProtocolType.撤销投诉协议: no = "CX"; break; case ProtocolType.高龄人群投资风险告知确认书: no = "GL"; break; } no += $"{DateTimeOffset.Now.ToUnixTimeMilliseconds()}"; return no; } /// /// 签订协议 /// /// /// public JsonResult SignProtocol(int ID) { try { var model = userProtocolbll.GetOne(ID); if (model != null && model.STATUS == 1) { var res = userProtocolbll.AuditModel(ID, 9,UserName);//审核通过 return Json(new { s = res }, JsonRequestBehavior.AllowGet); } else { return Json(new { s = false,m="签署后才能审核!" }, JsonRequestBehavior.AllowGet); } } catch (Exception ex) { return Json(new { s = false,m=ex.Message }, JsonRequestBehavior.AllowGet); } } public JsonResult UserInfo(string resid) { WX_SZZYORDER_BL wx_SzzyOrder_BL = new WX_SZZYORDER_BL(); Wx_SzzyOrder_HandGift_BL wx_SzzyOrder_HandGift_BL = new Wx_SzzyOrder_HandGift_BL(); if (string.IsNullOrEmpty(resid)) { return Json(new {s=false }, JsonRequestBehavior.AllowGet); } var list = wx_SzzyOrder_BL.GetModelByResId(resid);//查询订单 var giftList = wx_SzzyOrder_HandGift_BL.GetListByResid(resid);//赠送产品 list = list.Where(m => !string.IsNullOrEmpty(m.idcard)).ToList();//筛选已经实名制有效订单 giftList = giftList.Where(m => list.Where(i=> "80,90,200,210,220".Split(',').Contains(i.ORDERSTATUS)).Select(o => o.ORDERID).Contains(m.mainorderid)//主订单状态 && (m.orderstatus == 0 || m.orderstatus == 1)).ToList();//赠送订单状态 if (list.Any()) { var userNameList = list.GroupBy(m=>m.SOFTUSERNAME).Select(m => m.Key); var cName = list.OrderByDescending(m => m.CTIME).First().CNAME; var orderList = new List>(); foreach (var item in giftList) { IDictionary r = new Dictionary(); r.Add("orderid", item.orderid); r.Add("productname", item.subproductname); r.Add("giftdays", item.giftdays); orderList.Add(r); } return Json(new {s=true,d= new { userNameList, cName, orderList } }, JsonRequestBehavior.AllowGet); } else { return Json(new { s = false }, JsonRequestBehavior.AllowGet); } } } public class SubmitModel { public string resid { get; set; } public string userid { get; set; } public string username { get; set; } public int protocolType { get; set; } /// /// 产品类型 /// public int? producttype { get; set; } /// /// 赠送产品id /// public decimal? orderid { get; set; } /// /// 赠送产品名称 /// public string productname { get; set; } /// /// 赠送服务名称 /// public string servicename { get; set; } /// /// 赠送天数 /// public int? giftdays { get; set; } public decimal? price { get; set; } public string note { get; set; } public bool confirm { get; set; } } public class ProtocolExport { [DisplayName("协议编号")] public string PROTOCOLNO { get; set; } [DisplayName("事业部")] public string CompanyName { get; set; } [DisplayName("客户id")] public string RESID { get; set; } [DisplayName("客户姓名")] public string USERNAME { get; set; } [DisplayName("用户名")] public string USERID { get; set; } [DisplayName("协议")] public string PROTOCOLTYPENAME { get; set; } /// /// 和解协议 金额 /// [DisplayName("退款金额")] public string PRICE { get; set; } [DisplayName("协议状态")] public string STATUSNAME { get; set; } [DisplayName("备注")] public string NOTE { get; set; } [DisplayName("创建人")] public string CREATER { get; set; } [DisplayName("创建时间")] public DateTime? CTIME { get; set; } [DisplayName("审核人")] public string REVIEWER { get; set; } [DisplayName("审核时间")] public DateTime? AUDITTIME { get; set; } } }