using Core.Web.App_Start; using Core.Web.WebHelper; using CRM.Core.BLL; using CRM.Core.BLL.Application.Pay; using CRM.Core.BLL.Util; using CRM.Core.BLL.Wx; using CRM.Core.Common.Layui; using CRM.Core.DTO; using CRM.Core.Model.Entity; using CRM.Core.Model.Enum; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Web.Mvc; using WX.CRM.Common; namespace Core.Web.Controllers { public class OrderPayController : BaseController { CACHE_BL _cache = new CACHE_BL(); WX_SZZYORDER_BL _order = new WX_SZZYORDER_BL(); WX_SzzyOrderPay_BL _orderPay = new WX_SzzyOrderPay_BL(); WX_SzzyOrderDeposit_BL _orderDeposit = new WX_SzzyOrderDeposit_BL(); private PayServices _payService = new PayServices(); [HttpGet] [AuthorizeRedirect(RightsConfig.CONST_到款管理, ToolBarConfig.CONST_NotButton, true)] public ActionResult Index() { ViewBag.rightCode = RightsConfig.CONST_到款管理; ViewBag.companyList = _cache.GetCompanyVirtual(); return View(); } [HttpPost] [AuthorizeRedirect(RightsConfig.CONST_到款管理, ToolBarConfig.CONST_NotButton, false)] public JsonResult Index(Laypage pager, string columns, decimal? orderId, decimal? auditStatus, string payno, string companyCode, int? payType, DateTime? sTime, DateTime? eTime, string channel, string wxShopOrderNo) { if (!string.IsNullOrEmpty(wxShopOrderNo)) { var order = _order.Get(p => p.wXShopOrderNo == wxShopOrderNo); if (order != null) { orderId = order.ORDERID; } } var where = PredicateExtensionses.True(); if (orderId.HasValue) where = where.And(p => p.orderid == orderId); if (!string.IsNullOrWhiteSpace(payno)) where = where.And(p => p.payno == payno); if (auditStatus.HasValue) where = where.And(p => p.auditstatus == auditStatus); if (!string.IsNullOrEmpty(companyCode)) where = where.And(p => p.companycode == companyCode); if (payType.HasValue) where = where.And(p => p.paytype == payType); if (sTime.HasValue) where = where.And(p => p.paydate >= sTime.Value); if (eTime.HasValue) { var endtime = eTime.Value.AddDays(1); where = where.And(p => p.paydate < endtime); } where = where.And(m => m.isdelete == 0); if (!string.IsNullOrEmpty(channel)) { var arr0 = channel.Split('|'); if (arr0.Length > 1) { var whereOr = PredicateExtensionses.False(); foreach (var item in arr0) { var a = item.Split(','); var min = Convert.ToInt32(a[0]); var max = Convert.ToInt32(a[1]); whereOr = whereOr.Or(m => m.channel >= min && m.channel <= max); } where = where.And(whereOr); //where = where.And(m => m.channel >= 1100 && m.channel <= 1100 || m.channel >= 26600 && m.channel <= 26699); } else { var arr = channel.Split(','); var min = Convert.ToInt32(arr[0]); var max = Convert.ToInt32(arr[1]); where = where.And(m => m.channel >= min && m.channel <= max); } } var list = _orderPay.GetList(where, p => p.id, pager).ToList(); //var sumList = _orderPay.GetList(where, p => p.id, new Laypage() { page = 1, limit = int.MaxValue }); var sum = _orderPay.Sum(where, m => m.payprice) ?? 0; var orderArr = list.Select(p => Convert.ToDecimal(p.orderid)); var orderList = _order.GetList(p => orderArr.Contains(p.ORDERID)); var view = new List(); foreach (var item in list) { var order = orderList.FirstOrDefault(p => p.ORDERID == item.orderid); var info = new OrderPayView() { id = item.id, orderid = item.orderid, wxshoporderno = order != null ? order.wXShopOrderNo : string.Empty, payno = item.payno, needpay = item.needpay, paytypename = item.paytypename, paydate = item.paydate, payprice = item.payprice, payname = item.payname, remark = item.remark, auditstatus = item.auditstatus, rejectremark = item.rejectremark }; view.Add(info); } var data = new { msg = "数据加载成功!", count = pager.count, code = 0, data = view, totalRow = new { payprice = sum } }; return Json(data, JsonRequestBehavior.AllowGet); } [HttpGet] public ActionResult Add(int orderid) { var order = _order.GetModel(orderid); var model = new WX_SzzyOrderPay(); model.orderid = Convert.ToInt32(order.ORDERID); model.needpay = order.NEEDPAY.GetValueOrDefault(); return View(model); } [HttpPost] public JsonResult Add(WX_SzzyOrderPay orderPay) { try { //LogHelper.Info(orderPay.ToJson()); if (ModelState.IsValid) { var payTypeName = _cache.GetList_Parameter(ParameterGroup.OrderPayType).FirstOrDefault(p => p.PARAVALUE == orderPay.paytype.ToString()).PARANAME; orderPay.paytypename = payTypeName; //orderPay.paytypename = "支付宝"; _orderPay.Add(orderPay); return Json(new retMsg { result = true }, JsonRequestBehavior.AllowGet); } return Json(new retMsg { result = false, retmsg = "实体验证未通过" }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { LogHelper.Error(ex.ToString()); return Json(new retMsg { result = false, retmsg = ex.ToString() }, JsonRequestBehavior.AllowGet); } } [HttpGet] [AuthorizeRedirect(RightsConfig.CONST_到款管理, ToolBarConfig.CONST_Other1, true)] public ActionResult Audit(int id) { var model = _orderPay.Get(p => p.id == id); return View(model); } [HttpPost] [AuthorizeRedirect(RightsConfig.CONST_到款管理, ToolBarConfig.CONST_Other1, false)] public JsonResult Audit(WX_SzzyOrderPay orderPayDto) { try { var orderPay = _orderPay.Get(p => p.id == orderPayDto.id); var order = _order.Get(p => p.ORDERID == orderPay.orderid); //如果订单已经开通,不需要进行到款操作 if (order.ORDERSTATUS == "60") { return Json(new retMsg { result = false, retcode = 60 }, JsonRequestBehavior.AllowGet); } else if (order.ORDERSTATUS == "70") { return Json(new retMsg { result = false, retcode = 70 }, JsonRequestBehavior.AllowGet); } else if (order.ORDERSTATUS == "220") { return Json(new retMsg { result = false, retcode = 220 }, JsonRequestBehavior.AllowGet); } //var orderPayNo = _orderPay.Get(p => p.payno == orderPayDto.payno && p.auditstatus == 1); var orderPayNo = _orderPay.Get(p => p.payno == orderPay.payno && p.auditstatus == 1); if (orderPayNo != null) { return Json(new retMsg { result = false, retcode = 10 }, JsonRequestBehavior.AllowGet); } //orderPay.payno = orderPayDto.payno; //orderPay.payprice = orderPayDto.payprice; //到账金额根据实际打款金额 //orderPay.paydate = orderPayDto.paydate; //到账时间根据实际入账时间 _orderPay.Audit(orderPay, order, int.Parse(UserId.ToString()), UserName); return Json(new retMsg { result = true }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { LogHelper.Error(ex.ToString()); return Json(new retMsg { result = false, retcode = 0, retmsg = ex.ToString() }, JsonRequestBehavior.AllowGet); } } [AuthorizeRedirect(RightsConfig.CONST_到款管理, ToolBarConfig.CONST_Other2, false)] public JsonResult Batch(int[] ids) { try { var errMsg = string.Empty; foreach (var id in ids) { var orderPay = _orderPay.Get(p => p.id == id); if (orderPay.auditstatus == 1 || orderPay.auditstatus == -1) { //如果已经确认或者驳回就跳过 continue; } if (orderPay.orderid.ToString().StartsWith("2")) { errMsg += "订金:" + orderPay.orderid.ToString() + "不能执行该操作
"; continue; } var order = _order.Get(p => p.ORDERID == orderPay.orderid); if (order == null) { errMsg += "订单号:" + orderPay.orderid.ToString() + "为空
"; continue; } //如果订单已经开通,不需要进行到款操作 if (order.ORDERSTATUS == "60") { errMsg += "订单号:" + order.ORDERID.ToString() + "已经关闭
"; continue; } else if (order.ORDERSTATUS == "70") { errMsg += "订单号:" + order.ORDERID.ToString() + "已经退款
"; continue; } else if (order.ORDERSTATUS == "220") { errMsg += "订单号:" + order.ORDERID.ToString() + "已经开通
"; continue; } var orderPayNo = _orderPay.Get(p => p.payno == orderPay.payno && p.auditstatus == 1); if (orderPayNo != null) { errMsg += "流水号:" + orderPayNo.payno + "已经使用
"; continue; } try { _orderPay.Audit(orderPay, order, int.Parse(UserId.ToString()), UserName); } catch (Exception ee) { errMsg += "流水号:" + orderPay.payno + "未执行成功!
"; LogHelper.Error(ee.ToString()); } } if (!string.IsNullOrEmpty(errMsg)) { return Json(new retMsg { result = false, retcode = -1, retmsg = errMsg }, JsonRequestBehavior.AllowGet); } return Json(new retMsg { result = true }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { LogHelper.Error(ex.ToString()); return Json(new retMsg { result = false, retcode = 0, retmsg = ex.ToString() }, JsonRequestBehavior.AllowGet); } } [HttpGet] [AuthorizeRedirect(RightsConfig.CONST_到款管理, ToolBarConfig.CONST_Other3, true)] public ActionResult Exists() { return View(); } [AuthorizeRedirect(RightsConfig.CONST_到款管理, ToolBarConfig.CONST_Other3, false)] public JsonResult Exists(int? payType, DateTime? startDate, DateTime? endDate) { if (!startDate.HasValue) startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); if (!endDate.HasValue) endDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day + 1); else endDate = endDate.Value.AddDays(1); var file = Request.Files[0]; var dt = new DataTable(); dt = ExcelToDataTable(file); var payNoList = new List(); foreach (DataRow item in dt.Rows) { DateTime d = DateTime.Now; if (!DateTime.TryParse(item[2].ToString(), out d)) { d = DateTime.ParseExact(item[2].ToString(), "dd-M月-yyyy", System.Globalization.CultureInfo.InvariantCulture); } payNoList.Add(new PaynoDiff(item[0].ToString(), item[1].ToString(), d.ToString("yyyy-MM-dd"))); } var orderPayAll = _orderPay.GetList(p => p.auditstatus == 1 && p.paydate >= startDate && p.paydate < endDate); //LogHelper.Info(orderPayAll.Count().ToString()); var notfoundPaynoList = payNoList.Where(p => !orderPayAll.Select(m => m.payno).Contains(p.PayNo)); var data = new { msg = "数据加载成功!", count = int.MaxValue, code = 0, data = notfoundPaynoList }; return Json(data, JsonRequestBehavior.AllowGet); } [HttpPost] [AuthorizeRedirect(RightsConfig.CONST_到款管理, ToolBarConfig.CONST_Other1, false)] public JsonResult Reject(int id, int status, string rejectremark) { var retmsg = _orderPay.Reject(id, status, rejectremark, int.Parse(UserId.ToString()), UserName); return Json(retmsg, JsonRequestBehavior.AllowGet); } [HttpGet] public ActionResult Import() { return View(); } [HttpPost] public JsonResult Import(DateTime? startDate, DateTime? endDate, int paytype) { if (!startDate.HasValue) startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); if (!endDate.HasValue) endDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day + 1); else endDate = endDate.Value.AddDays(1); var file = Request.Files[0]; var list = new List(); var list2 = new List(); var list3 = new List(); var dt = new DataTable(); if (Path.GetExtension(file.FileName).ToLower().Equals(".csv")) { dt = CsvToDataTable(file); } else { dt = ExcelToDataTable(file); } //var payNos = new List(); //foreach (DataRow item in dt.Rows) //{ // LogHelper.Info(item[5].ToString() + "," + item[24].ToString()); // //payNos.Add(item[5].ToString()); //} //时间段内所有提交上来的数据 var orderPayAll = _orderPay.GetList(p => p.paydate >= startDate && p.paydate < endDate && p.auditstatus == 1); //根据excel匹配出未审核数据 //var orderPayList = orderPayAll.Where(p => payNos.Contains(p.payno) && p.auditstatus == 0); //找出有提交多条支付记录的数据(包含了已审核、未审核) //var groupOrderPay = orderPayAll.GroupBy(p => p.payno).Where(x => x.Count() > 1).Select(p => p.Key); //有多条记录并且有审核通过的记录 //var manyAuditOrderPay = orderPayAll.Where(p => groupOrderPay.Contains(p.payno) && p.auditstatus == 1).Select(p => p.payno); //有多条并且记录是没有审核过的记录 //var manyOrderPay = orderPayList.Where(p => groupOrderPay.Contains(p.payno) && !manyAuditOrderPay.Contains(p.payno)); //有提交到款,未匹配到到款记录的数据 //var notfoundPayNo = orderPayAll.Where(p => p.auditstatus == 0).Except(orderPayList).Except(manyOrderPay); //orderPayList = orderPayList.Except(manyOrderPay).ToList(); var payNos = new List(); foreach (DataRow item in dt.Rows) { foreach (var subItem in orderPayAll) { var payNo = paytype == 6 ? item[1].ToString() : (paytype == 5 ? item[5].ToString() : item[4].ToString()); if (payNo.StartsWith("`")) { payNo = payNo.Remove(0, 1); } if (payNo == subItem.payno) { var paydate = paytype == 6 ? item[0].ToString() : (paytype == 5 ? item[0].ToString() : item[1].ToString()); decimal price = 0; var priceStr = paytype == 6 ? item[5].ToString() : (paytype == 5 ? item[12].ToString() : item[12].ToString()); if (priceStr.StartsWith("`")) { price = decimal.Parse(priceStr.Remove(0, 1)); } else { price = decimal.Parse(priceStr); } if (price == subItem.payprice) { list.Add(new OrderPayDiff(subItem.orderid, "`" + subItem.payno, subItem.payprice.ToString(), price.ToString(), paydate, "正常")); } else { list.Add(new OrderPayDiff(subItem.orderid, "`" + subItem.payno, subItem.payprice.ToString(), price.ToString(), paydate, "异常")); } payNos.Add(payNo); } } } foreach (DataRow item in dt.Rows) { var payNo = paytype == 6 ? item[1].ToString() : (paytype == 5 ? item[5].ToString() : item[4].ToString()); var priceStr = paytype == 6 ? item[5].ToString() : (paytype == 5 ? item[12].ToString() : item[12].ToString()); var paydate = paytype == 6 ? item[0].ToString() : (paytype == 5 ? item[0].ToString() : item[1].ToString()); if (payNo.StartsWith("`")) { payNo = payNo.Remove(0, 1); } if (!payNos.Any(p => p == payNo)) { list2.Add(new OrderPayDiff(0, "`" + payNo, priceStr, priceStr, paydate, "")); } } var data = new { msg = "数据加载成功!", count = int.MaxValue, code = 0, data = list, data2 = list2 }; return Json(data, JsonRequestBehavior.AllowGet); } [HttpPost] public JsonResult SetPayName(int id, string payName) { var rsp = _payService.SetPayName(id, payName); return Json(rsp, JsonRequestBehavior.AllowGet); } //[HttpPost] //public JsonResult BatchAudit(List orders) //{ // //LogHelper.Info(orders.Count.ToString()); // var errorOrder = new List(); // foreach (var item in orders) // { // try // { // var orderPay = _orderPay.Get(p => p.id == item.Id); // var order = _order.Get(p => p.ORDERID == orderPay.orderid); // var orderPayNo = _orderPay.Get(p => p.payno == orderPay.payno && p.auditstatus == 1); // if (order.ORDERSTATUS == "220" || order.ORDERSTATUS == "70" || orderPayNo != null) // { // errorOrder.Add(item); // } // else // { // orderPay.payprice = item.PayPriceExcel; //到账金额根据实际打款金额 // orderPay.paydate = item.PayDateExcel; //到账时间根据实际入账时间 // _orderPay.Audit(orderPay, order, int.Parse(UserId.ToString()), UserName); // } // } // catch (Exception ex) // { // LogHelper.Error(ex.ToString()); // errorOrder.Add(item); // } // } // var data = new LayuiData() // { // msg = "数据加载成功!", // count = errorOrder.Count, // code = 0, // data = errorOrder // }; // return Json(data, JsonRequestBehavior.AllowGet); //} } public class OrderPayDiff { public OrderPayDiff() { } public OrderPayDiff(int orderId, string payNo, string payPrice, string payPriceExcel, string payDateExcel, string status) { OrderId = orderId; PayNo = payNo; PayPrice = payPrice; PayPriceExcel = payPriceExcel; PayDateExcel = payDateExcel; Status = status; } public int OrderId { get; set; } public string PayNo { get; set; } public string PayPrice { get; set; } //public string PayName { get; set; } //public DateTime? PayDate { get; set; } //public string PayNoExcel { get; set; } public string PayPriceExcel { get; set; } //public string PayAccountExcel { get; set; } //public string PayNameExcel { get; set; } public string PayDateExcel { get; set; } public string Status { get; set; } } public class PaynoDiff { public PaynoDiff() { } public PaynoDiff(string payNo, string payPrice, string payDate) { PayNo = payNo; PayPrice = payPrice; PayDate = payDate; } public string PayNo { get; set; } public string PayPrice { get; set; } public string PayDate { get; set; } } }