using System; using System.Collections.Generic; using System.Linq; using System.Web.Mvc; using WX.CRM.Common; using WX.CRM.IBLL.Level2; using WX.CRM.IBLL.Res; using WX.CRM.IBLL.Util; using WX.CRM.Model.Entity; using WX.CRM.Model.Enum; using WX.CRM.WEB.ViewModel.Level2; using WX.CRM.WebHelper; namespace WX.CRM.WEB.Controllers.Level2 { public class RefundApplayController : BaseController { // // GET: /RefundApplay/ [Ninject.Inject] public IL2_SOFT_REFUNDAPPLAY_Q refundApplay_q { get; set; } [Ninject.Inject] public IL2_SOFT_REFUNDAPPLAY refundApplay { get; set; } [Ninject.Inject] public IRES_CUSTOMER res_customer { get; set; } [Ninject.Inject] public IRES_CUSTOMER_Q res_customer_q { get; set; } [Ninject.Inject] public ISecurityHelper sHelper { get; set; } #region 查询订单 [AuthorizeRedirect(Roles = InitRights.CONST_L2订单退款申请)] public ActionResult Index() { ToolBar tool = new ToolBar(); string[] toolbtn = new ToolButtonView().ToolButtonRight(InitRights.L2订单退款申请, userRightId); tool.AllowButton(toolbtn); //tool.AllowButton("Create", "Edit", "Details", "Delete"); tool.AddOtherButton("Other1", "申请退款", "icon-lookup", "RefundApplay_Click", true); ViewBag.ToolBar = tool; //table Pager pager = new Pager() { page = 1, rows = 100 }; string tableId = "tablist"; Table tab = new Table(tableId); tab.AddHeadCol("orderid", "8%", "订单号"); tab.AddHeadCol("username", "8%", "用户名"); tab.AddHeadCol("productcode", "8%", "产品小类"); tab.AddHeadCol("booknum", "5%", "开通套数"); tab.AddHeadCol("totaldays", "8%", "开通天数"); tab.AddHeadCol("totalprice", "8%", "总金额"); tab.AddHeadCol("orderstatus", "8%", "订单状态"); tab.AddHeadCol("isopen", "8%", "开通状态"); tab.AddHeadCol("ispayed", "8%", "支付状态"); tab.AddHeadCol("otime", "8%", "开通时间"); tab.AddHeadCol("applaystatus", "", "退款状态"); tab.AddHeadCol("applaytime", "", "退款申请时间"); tab.AddHiddenHeadCol("orderdetail", ""); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pager, tableId, "10,20,30"); return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_L2订单退款申请)] public ActionResult GetHtmlList(Pager pager, string org_orderid, string org_username, string columns) { Table table = new Table(columns, true); table.gridPager = pager; ModelState.Clear(); Soft_RefundOrder order = new Soft_RefundOrder(); order.org_orderid = org_orderid.Trim(); order.org_username = org_username.Trim(); TryValidateModel(order); if (ModelState.IsValid) { List list = new List(); Soft_CRMOrderModel ordermodel = new Soft_CRMOrderModel(order.org_orderid, order.org_username, pager.page, pager.rows); string msg = ""; int total = 0; list = ordermodel.GetOderDetail(out msg, out total); ViewBag.OrderList = list; foreach (Soft_OrderDetail model in list) { L2_SOFT_REFUNDAPPLAY refundApplay = new L2_SOFT_REFUNDAPPLAY(); refundApplay = getRefundApplay(model); string refundApplayjson = JsonHelper.ObjDivertToJson(refundApplay); var product = new L2SoftProductHelper().getProduct(model.PRODUCTCODE); table.AddCol(model.ORDERID); table.AddCol(PhoneHelper.FormatPhoneUserName(model.USERNAME)); table.AddCol(product == null ? "" : product.PRODUCTNAME); table.AddCol(model.BOOKNUM); table.AddCol(model.TOTALDAYS); table.AddCol(model.TOTALPRICE); table.AddCol(Utility.GetEnumNameByValue(Convert.ToInt32(model.ORDERSTATUS))); table.AddCol(model.ISOPEN == 1 ? "已开通" : "未开通"); table.AddCol(model.ISPAYED == 1 ? "已支付" : "未支付"); table.AddCol(model.OTIME); if (model.ISREFUND == 1) { table.AddCol("已退款"); table.AddCol(model.CANCELTIME); } else { var refundAppplay = refundApplay_q.getRefundapplay(model.ORDERID, model.USERNAME); if (refundAppplay != null) { table.AddCol(Utility.GetEnumNameByValue(Convert.ToInt32(refundAppplay.ORDERSTATUS))); table.AddCol(refundAppplay.CTIME); } else { table.AddCol("未申请"); table.AddCol(""); } } table.AddHiddenCol(refundApplayjson); table.AddRow(); } } string values = table.GetRows(); var json = new { hasValue = !string.IsNullOrEmpty(values), totalPages = pager.totalPages, totalRows = pager.totalRows, rowsList = values }; return Json(json, JsonRequestBehavior.AllowGet); } #endregion #region 退款申请 public ActionResult CreateOrder(string refundApplay) { L2_SOFT_REFUNDAPPLAY model = JsonHelper.JsonDivertToObj(refundApplay); return View(model); } [HttpPost] [AuthorizeToolBar(InitRights.CONST_L2订单退款申请, InitToolBar.CONST_Other1)] public ActionResult AddRefundApplay(L2_SOFT_REFUNDAPPLAY applay) { if (applay == null || applay.ORDERID == 0 || string.IsNullOrEmpty(applay.USERNAME)) return JsonHandler.ManageMessage("订单号或用户名为空,无法申请", false); if (string.IsNullOrEmpty(applay.REASON)) return JsonHandler.ManageMessage("退款原因不能为空", false); //decimal _orderid = Convert.ToDecimal(orderid); var refundAppplay = refundApplay_q.getRefundapplay(applay.ORDERID, applay.USERNAME); if (refundAppplay == null) { string msg = ""; int total = 0; Soft_CRMOrderModel ordermodel = new Soft_CRMOrderModel(applay.ORDERID.ToString(), applay.USERNAME); var orderDtails = ordermodel.GetOderDetail(out msg, out total); var orderdetail = orderDtails.FirstOrDefault(p => p.ORDERID == applay.ORDERID); if (orderdetail.ISREFUND == 1) { return JsonHandler.ManageMessage("订单已退款不能申请退款", false); } if (orderdetail.ISPAYED == 0) { return JsonHandler.ManageMessage("订单未支付无法申请退款", false); } if (!(orderdetail.ORDERSTATUS == 220 || orderdetail.ORDERSTATUS == 210)) { return JsonHandler.ManageMessage("非已开通或暂缓开通订单无法申请退款", false); } L2_SOFT_REFUNDAPPLAY model = new L2_SOFT_REFUNDAPPLAY(); model = getRefundApplay(orderdetail); model.ORDERSTATUS = Convert.ToDecimal(L2OrderApplayStatus.已申请); model.REASON = applay.REASON; model.CREATEUSER = UserId; try { RegisterResId regist = new RegisterResId(model.RESID); regist.RegisterPhone(); } catch (Exception ex) { LogHelper.Error("level2手机注册" + model.RESID + ex.ToString()); } refundApplay.Create(model); return JsonHandler.ManageMessage("申请退款成功", true); } else { return JsonHandler.ManageMessage("订单已存在", false); } } #endregion #region 退款查询 [AuthorizeRedirect(Roles = InitRights.CONST_L2订单退款审核)] public ActionResult RefundApplayIndex(string org_orderid, string org_username) { ToolBar tool = new ToolBar(); string[] toolbtn = new ToolButtonView().ToolButtonRight(InitRights.L2订单退款审核, userRightId); tool.AllowButton(toolbtn); //tool.AllowButton("Create", "Edit", "Details", "Delete"); tool.AddOtherButton("Other1", "退款审核", "icon-lookup", "RefundCheck_Click", true); tool.AddOtherButton("Other2", "确认退款", "icon-lookup", "RefundApplay_Click", true); tool.AddOtherButton("Other3", "删除申请", "icon-remove", "RefundDelete_Click", true); tool.AddOtherButton("Other4", "修改退款金额", "icon-lookup", "RefundModMoney_Click", true); ViewBag.ToolBar = tool; //table Pager pager = new Pager() { page = 1, rows = 20 }; string tableId = "tablist"; Table tab = new Table(tableId); tab.AddHiddenHeadCol("hid_username", ""); tab.AddHeadCol("orderid", "6%", "订单号"); tab.AddHeadCol("username", "6%", "用户名"); tab.AddHeadCol("productcode", "10%", "产品小类"); tab.AddHeadCol("resid", "10%", "客户ID"); tab.AddHeadCol("applaystatus", "5%", "退款状态"); tab.AddHeadCol("TOTALDAYS", "3%", "开通天数"); tab.AddHeadCol("TOTALPRICE", "3%", "总金额"); tab.AddHeadCol("OTIME", "10%", "开通时间"); tab.AddHeadCol("L2ORDERSTATUS", "5%", "订单状态"); tab.AddHeadCol("REFUNDAMOUNT", "3%", "退款金额"); tab.AddHeadCol("REASON", "10%", "申请退款原因"); tab.AddHeadCol("createuser", "5%", "退款申请人"); tab.AddHeadCol("applaytime", "8%", "退款申请时间"); tab.AddHeadCol("operationuser", "5%", "退款审核人"); tab.AddHeadCol("utime", "8%", "退款审核时间"); tab.AddHeadRow(); List orderStatus = Utility.GetListItemFromEnum().Select(p => new SelectListItem() { Value = p.Value, Text = p.Text }).ToList(); orderStatus.Insert(0, new SelectListItem() { Text = "所有", Value = "" }); ViewBag.Status = orderStatus; ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pager, tableId, "10,20,30"); Soft_RefundOrder order = new Soft_RefundOrder(); order.org_orderid = org_orderid ?? "".Trim(); order.org_username = org_username ?? "".Trim(); return View(order); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_L2订单退款审核)] public ActionResult RefundApplayList(Pager pager, string columns) { Table table = new Table(columns, true); DateTime? ctime = Request.Form["ctime"].GetDateTime(); DateTime? etime = Request.Form["etime"].GetDateTime(); decimal? status = Request.Form["status"].GetDecimal(); decimal? orderid = Request.Form["org_orderid"].GetDecimal(); string username = Request.Form["org_username"]; var list = refundApplay_q.GetList(ref pager, orderid, username, status, ctime, etime); foreach (var model in list) { L2Soft_Product product = new L2SoftProductHelper().getProduct(model.PRODUCTCODE); table.AddHiddenCol(Utility.EncryptUrlEncode(model.USERNAME)); table.AddCol(model.ORDERID); table.AddCol(PhoneHelper.FormatPhoneUserName(model.USERNAME)); table.AddCol(product == null ? "" : product.PRODUCTNAME); table.AddCol(model.RESID); table.AddCol(Utility.GetEnumNameByValue(Convert.ToInt32(model.ORDERSTATUS))); table.AddCol(model.TOTALDAYS); table.AddCol(model.TOTALPRICE); table.AddCol(model.OTIME); table.AddCol(Utility.GetEnumNameByValue(Convert.ToInt32(model.L2ORDERSTATUS))); table.AddCol(model.REFUNDAMOUNT); table.AddCol(model.REASON); table.AddCol(InnerUserHelper.Instance.EidAndName(model.CREATEUSER)); table.AddCol(model.CTIME.ToUnityString()); table.AddCol(InnerUserHelper.Instance.EidAndName(model.OPERATIONUSER)); table.AddCol(model.UTIME.ToUnityString()); table.AddRow(); } var json = new { totalPages = pager.totalPages, totalRows = pager.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } #endregion #region 退款审核 [HttpPost] [AuthorizeToolBar(InitRights.CONST_L2订单退款审核, InitToolBar.CONST_Other1)] public ActionResult RefundApplayOrderCheck(string orderid, string username, string applayType) { username = Utility.DecryptUrlDecode(username); decimal _orderid = orderid.GetDecimal(0); var refundmodel = refundApplay_q.getRefundapplay(_orderid, username); if (refundmodel != null) { if (applayType == ((int)L2OrderApplayStatus.已申请).ToString() && refundmodel.ORDERSTATUS == Convert.ToDecimal(L2OrderApplayStatus.已申请)) { UpdateModel updatemodel = new UpdateModel(orderid, ((int)L2OrderApplayStatus.已审核).ToString(), UserId.ToString()); returnResult result = updatemodel.getResult(); if (result.result) { if (refundmodel.L2ORDERSTATUS == 220) refundmodel.L2ORDERSTATUS = 90; if (refundmodel.L2ORDERSTATUS == 210) refundmodel.L2ORDERSTATUS = 70; refundmodel.ORDERSTATUS = Convert.ToDecimal(L2OrderApplayStatus.已审核); refundmodel.OPERATIONUSER = UserId; refundmodel.UTIME = DateTime.Now; refundApplay.Update(refundmodel); return JsonHandler.ManageMessage("审核成功", true); } } return JsonHandler.ManageMessage("审核失败", true); } return JsonHandler.ManageMessage("订单不存在", false); } #endregion #region 确认退款 [HttpPost] [AuthorizeToolBar(InitRights.CONST_L2订单退款审核, InitToolBar.CONST_Other2)] public ActionResult RefundApplayOrderIsChecked(string orderid, string username, string applayType) { username = Utility.DecryptUrlDecode(username); decimal _orderid = orderid.GetDecimal(0); var refundmodel = refundApplay_q.getRefundapplay(_orderid, username); if (refundmodel != null) { if (applayType == ((int)L2OrderApplayStatus.已审核).ToString() && refundmodel.ORDERSTATUS == Convert.ToDecimal(L2OrderApplayStatus.已审核)) { UpdateModel updatemodel = new UpdateModel(orderid, ((int)L2OrderApplayStatus.已退款).ToString(), UserId.ToString()); returnResult result = updatemodel.getResult(); if (result.result) { refundmodel.ORDERSTATUS = Convert.ToDecimal(L2OrderApplayStatus.已退款); refundApplay.Update(refundmodel); return JsonHandler.ManageMessage("已退款确认成功", true); } } return JsonHandler.ManageMessage("已退款确认失败", true); } return JsonHandler.ManageMessage("订单不存在", false); } #endregion private L2_SOFT_REFUNDAPPLAY getRefundApplay(Soft_OrderDetail orderdetail) { L2_SOFT_REFUNDAPPLAY model = new L2_SOFT_REFUNDAPPLAY(); string mobile = orderdetail.orderExt.FirstOrDefault().MOBILE; model.ORDERID = orderdetail.ORDERID; model.USERNAME = orderdetail.USERNAME; model.PRODUCTCODE = orderdetail.PRODUCTCODE; model.RESID = mobile; model.L2ORDERSTATUS = orderdetail.ORDERSTATUS; model.OTIME = orderdetail.OTIME; model.TOTALDAYS = orderdetail.TOTALDAYS; model.TOTALPRICE = orderdetail.TOTALPRICE; if (orderdetail.ORDERSTATUS == 210) model.REFUNDAMOUNT = orderdetail.TOTALPRICE; else if (orderdetail.ORDERSTATUS == 220) { bool isZiXun = "UPCFZX" == orderdetail.PRODUCTCODE.Substring(0, 6);//咨询 decimal trueTotalday = orderdetail.TOTALDAYS % 365; if (orderdetail.TOTALDAYS < 365) { trueTotalday = 0; } //if (isZiXun) //{ // DateTime currentdate = Convert.ToDateTime(DateTime.Now.ToShortDateString()); // int days = (currentdate - Convert.ToDateTime(orderdetail.OTIME.Value.ToShortDateString())).Days; // decimal deductAmt = orderdetail.TOTALPRICE * (30 - days) / 30; // deductAmt = deductAmt < 0 ? 0 : deductAmt; // model.REFUNDAMOUNT = Math.Round(deductAmt, 0); //} //else if (orderdetail.PRODUCTCODE == "HSL2YH_YH30" || orderdetail.TOTALDAYS <= 30) { //DateTime currentdate = Convert.ToDateTime(DateTime.Now.ToShortDateString()); //int days = (currentdate - Convert.ToDateTime(orderdetail.OTIME.Value.ToShortDateString())).Days; model.REFUNDAMOUNT = orderdetail.TOTALPRICE; } else if (isZiXun) { DateTime currentdate = DateTime.Now; int days = (currentdate - orderdetail.OTIME.Value).Days + 1; if (days <= 7) model.REFUNDAMOUNT = orderdetail.TOTALPRICE; else { int months = (currentdate.Year * 12 + currentdate.Month) - (orderdetail.OTIME.Value.Year * 12 + orderdetail.OTIME.Value.Month); int currentday = currentdate.Day; int openday = orderdetail.OTIME.Value.Day; if (months < 1) months = 1; else { if (currentday >= openday) months = months + 1; } decimal deductAmt = orderdetail.TOTALPRICE - ((orderdetail.TOTALPRICE / (Math.Ceiling((orderdetail.TOTALDAYS - trueTotalday) / 365 * Convert.ToDecimal(12)))) * months); model.REFUNDAMOUNT = Math.Round(deductAmt, 2); } } else { DateTime currentdate = DateTime.Now; int hous = currentdate.Hour; if (hous >= 15) //暂定为当天15:00之前,超过15:00则算作次日 currentdate = currentdate.AddDays(1); int days = (currentdate - orderdetail.OTIME.Value).Days + 1; if (days <= 7) model.REFUNDAMOUNT = orderdetail.TOTALPRICE; else { int months = (currentdate.Year * 12 + currentdate.Month) - (orderdetail.OTIME.Value.Year * 12 + orderdetail.OTIME.Value.Month); int currentday = currentdate.Day; int openday = orderdetail.OTIME.Value.Day; if (months < 1) months = 1; else { if (currentday >= openday) months = months + 1; } decimal deductAmt = orderdetail.TOTALPRICE - ((orderdetail.TOTALPRICE / (Math.Ceiling((orderdetail.TOTALDAYS - trueTotalday) / 365 * Convert.ToDecimal(12)))) * months); model.REFUNDAMOUNT = Math.Round(deductAmt, 2); } } } return model; } #region 删除退款申请单 [HttpPost] [AuthorizeToolBar(InitRights.CONST_L2订单退款审核, InitToolBar.CONST_Other3)] public ActionResult RefundDeletOrderCheck(string orderid, string username, string applayType) { username = Utility.DecryptUrlDecode(username); decimal _orderid = orderid.GetDecimal(0); var refundmodel = refundApplay_q.getRefundapplay(_orderid, username); if (refundmodel != null) { if (applayType == ((int)L2OrderApplayStatus.已申请).ToString()) { refundApplay.Delete(refundmodel.PKID); return JsonHandler.ManageMessage("删除退款申请单成功", true); } return JsonHandler.ManageMessage("删除退款申请单失败", false); } return JsonHandler.ManageMessage("退款申订单不存在", false); } #endregion #region 修改退款金额 #region 退款金额修改 /// /// 查看订单信息 /// /// /// [HttpGet] [AuthorizeRedirect(Roles = InitRights.CONST_L2订单退款审核)] public ActionResult L2_ModRefundMoney(string orderid, string username) { username = Utility.DecryptUrlDecode(username); decimal _orderid = orderid.GetDecimal(0); var refundmodel = refundApplay_q.getRefundapplay(_orderid, username); refundmodel.USERNAME = PhoneHelper.FormatPhoneMoreUserName(refundmodel.USERNAME); return View(refundmodel); } [HttpPost] [AuthorizeToolBar(InitRights.CONST_L2订单退款审核, InitToolBar.CONST_Other4)] public JsonResult L2_RefundModMoneyClick(L2_SOFT_REFUNDAPPLAY model) { var refundmodel = refundApplay_q.getRefundapplay(model.PKID); if (refundmodel != null) { if (model.ORDERSTATUS.ToString() == ((int)YTGOrderApplayStatus.已申请).ToString()) { if (refundmodel.TOTALPRICE >= model.REFUNDAMOUNT) { refundmodel.REFUNDAMOUNT = model.REFUNDAMOUNT; refundApplay.Update(refundmodel); return JsonHandler.ManageMessage("修改订单退款金额成功", true); } else { return JsonHandler.ManageMessage("退款金额不能大于订单总金额", false); } } return JsonHandler.ManageMessage("非已申请状态不能更改", false); } return JsonHandler.ManageMessage("退款申订单不存在", false); } #endregion #endregion } }