ComplianceServer/oldcode/Core.Web/Controllers/OrderPayController.cs

580 lines
23 KiB
C#

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<WX_SzzyOrderPay>();
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<WX_SzzyOrderPay>();
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<OrderPayView>();
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() + "不能执行该操作<br />";
continue;
}
var order = _order.Get(p => p.ORDERID == orderPay.orderid);
if (order == null)
{
errMsg += "订单号:" + orderPay.orderid.ToString() + "为空<br />";
continue;
}
//如果订单已经开通,不需要进行到款操作
if (order.ORDERSTATUS == "60")
{
errMsg += "订单号:" + order.ORDERID.ToString() + "已经关闭<br />";
continue;
}
else if (order.ORDERSTATUS == "70")
{
errMsg += "订单号:" + order.ORDERID.ToString() + "已经退款<br />";
continue;
}
else if (order.ORDERSTATUS == "220")
{
errMsg += "订单号:" + order.ORDERID.ToString() + "已经开通<br />";
continue;
}
var orderPayNo = _orderPay.Get(p => p.payno == orderPay.payno && p.auditstatus == 1);
if (orderPayNo != null)
{
errMsg += "流水号:" + orderPayNo.payno + "已经使用<br />";
continue;
}
try
{
_orderPay.Audit(orderPay, order, int.Parse(UserId.ToString()), UserName);
}
catch (Exception ee)
{
errMsg += "流水号:" + orderPay.payno + "未执行成功!<br />";
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<PaynoDiff>();
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<OrderPayDiff>();
var list2 = new List<OrderPayDiff>();
var list3 = new List<OrderPayDiff>();
var dt = new DataTable();
if (Path.GetExtension(file.FileName).ToLower().Equals(".csv"))
{
dt = CsvToDataTable(file);
}
else
{
dt = ExcelToDataTable(file);
}
//var payNos = new List<string>();
//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<string>();
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<OrderPayDiff> orders)
//{
// //LogHelper.Info(orders.Count.ToString());
// var errorOrder = new List<OrderPayDiff>();
// 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<OrderPayDiff>()
// {
// 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; }
}
}