ComplianceServer/oldcode/WEB/Controllers/Level2/RefundApplayController.cs

522 lines
24 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<Soft_OrderDetail> list = new List<Soft_OrderDetail>();
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<L2OrderStatus>(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<L2OrderApplayStatus>(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<L2_SOFT_REFUNDAPPLAY>(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<SelectListItem> orderStatus = Utility.GetListItemFromEnum<L2OrderApplayStatus>().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<L2OrderApplayStatus>(Convert.ToInt32(model.ORDERSTATUS)));
table.AddCol(model.TOTALDAYS);
table.AddCol(model.TOTALPRICE);
table.AddCol(model.OTIME);
table.AddCol(Utility.GetEnumNameByValue<L2OrderStatus>(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 退
/// <summary>
/// 查看订单信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[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
}
}