ComplianceServer/oldcode/Core.BLL/Wx/WX_SzzyOrderPay_BL.cs

531 lines
22 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 CRM.Core.BLL.Base;
using CRM.Core.BLL.EventBus.Events;
using CRM.Core.BLL.Util;
using CRM.Core.Common.Layui;
using CRM.Core.DAL;
using CRM.Core.DTO;
using CRM.Core.DTO.Ord;
using CRM.Core.Model;
using CRM.Core.Model.Entity;
using CRM.Core.Model.Map;
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using WX.CRM.Common;
namespace CRM.Core.BLL.Wx
{
public class WX_SzzyOrderPay_BL : DbContextRepository<WX_SzzyOrderPay>
{
/// <summary>
/// 订单状态180新订单 195驳回 190已提交支付 200已支付 202待开通 205已升级 220已开通
/// </summary>
/// <param name="orderPay"></param>
/// <param name="order"></param>
/// <param name="userId"></param>
/// <param name="userName"></param>
public void Audit(WX_SzzyOrderPay orderPay, WX_SZZYORDER order, int userId, string userName)
{
using (var db = new zxdContext())
{
orderPay.auditstatus = 1;
orderPay.auditor = userId;
orderPay.auditorname = userName;
if (!orderPay.audittime.HasValue)
{
orderPay.audittime = DateTime.Now;
}
Update(orderPay);
var arrivalPayList = db.WX_SzzyOrderPay.Where(p => p.orderid == orderPay.orderid && p.auditstatus == 1);
var arrivalPay = arrivalPayList.Sum(p => p.payprice);
var payDate = arrivalPayList.OrderByDescending(p => p.paydate).First().paydate;
if (arrivalPay >= order.NEEDPAY)
{
order.ORDERSTATUS = "200";
order.ORDERSTATUSNAME = "已支付";
order.ISPAYED = 1;
}
else
{
order.ORDERSTATUS = "190";
order.ORDERSTATUSNAME = "已提交支付";
}
order.ARRIVALPAY = arrivalPay;
order.ARRIVALTIME = payDate;
var entry = db.Entry(order);
db.Set<WX_SZZYORDER>().Attach(order);
entry.State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
Common.EventBus.EventBus.Instance.Publish(new PayOrderEvent(Convert.ToInt32(order.ORDERID), order.ORDERSTATUS, order.ORDERSTATUSNAME, order.ARRIVALPAY.Value, order.ARRIVALTIME.Value, order.companycode, orderPay.id, orderPay.auditor.Value, orderPay.auditorname, orderPay.audittime.Value, orderPay.payno, orderPay.paydate));
}
}
/// <summary>
/// 支付记录驳回
/// </summary>
/// <param name="id"></param>
/// <param name="status"></param>
/// <param name="rejectremark"></param>
/// <param name="userId"></param>
/// <param name="userName"></param>
/// <returns></returns>
public retMsg Reject(int id, int status, string rejectremark, int userId, string userName)
{
using (var db = new zxdContext())
{
var orderPay = Get(p => p.id == id);
if (orderPay != null)
{
if (orderPay.auditstatus == -1)
{
return new retMsg() { result = false, retcode = 300, retmsg = "exists" };
}
if (orderPay.auditstatus == 1)
{
return new retMsg() { result = false, retcode = 400, retmsg = "isaudit" };
}
orderPay.auditstatus = status;
orderPay.auditor = userId;
orderPay.auditorname = userName;
orderPay.audittime = DateTime.Now;
orderPay.rejectremark = rejectremark;
var order = db.WX_SZZYORDER.FirstOrDefault(p => p.ORDERID == orderPay.orderid);
if (order != null)
{
//新订单状态,已提交支付状态,驳回状态才可以修改订单状态为驳回
if (order.ORDERSTATUS == "180" || order.ORDERSTATUS == "190" || order.ORDERSTATUS == "195")
{
order.ORDERSTATUS = "195";
order.ORDERSTATUSNAME = "支付驳回";
}
}
var entry = db.Entry(orderPay);
db.Set<WX_SzzyOrderPay>().Attach(orderPay);
entry.State = System.Data.Entity.EntityState.Modified;
var result = db.SaveChanges();
if (result > 0)
{
//推送到坐席
Common.EventBus.EventBus.Instance.Publish(new PayRejectEvent(orderPay.id, status, rejectremark, userId, userName, order.CHANNEL));
}
return new retMsg() { result = result > 0, retcode = result > 0 ? 200 : 500, retmsg = result > 0 ? "success" : "error" };
}
return new retMsg() { result = false, retcode = 100, retmsg = "para" };
}
}
public List<PayDto> GetOrderPayList(DateTime startTime, DateTime? endTime = null)
{
using (var db = new zxdContext())
{
var query = from f in db.WX_SzzyOrderPay
join o in db.WX_SZZYORDER on f.orderid equals o.ORDERID
where f.auditstatus == 1 && f.paydate >= startTime
select new PayDto()
{
PayDate = f.paydate.Value
,
PayPrice = f.payprice
,
Channel = f.channel.Value
,
ProductId = o.PRODUCTID.Value
//, ProductId = o.SettleType.Value
,
OrderId = f.orderid
};
if (endTime.HasValue)
query = query.Where(p => p.PayDate <= endTime);
return query.ToList();
}
}
public List<PayDto> GetOrderPayList2(DateTime startTime, DateTime? endTime = null)
{
using (var db = new zxdContext())
{
var query = from f in db.WX_SzzyOrderPay
where f.auditstatus == 1 && f.paydate >= startTime
select new PayDto()
{
PayDate = f.paydate.Value,
PayPrice = f.payprice,
Channel = f.channel.Value,
OrderId = f.orderid
};
if (endTime.HasValue)
query = query.Where(p => p.PayDate <= endTime);
return query.ToList();
}
}
public List<WX_SzzyOrderPay> GetList(string[] payNos)
{
using (var db = new zxdContext())
{
return db.WX_SzzyOrderPay.Where(p => payNos.Contains(p.payno)).ToList();
}
}
public List<WX_SzzyOrderPay> GetUnAuditOrderPay(string[] payNos)
{
using (var db = new zxdContext())
{
return db.WX_SzzyOrderPay.Where(p => payNos.Contains(p.payno) && p.auditstatus == 0).ToList();
}
}
public List<WX_SzzyOrderPay> GetListByOrderId(int orderId)
{
using (var db = new zxdContext())
{
return db.WX_SzzyOrderPay.Where(m => m.orderid == orderId && m.auditstatus == 1).OrderByDescending(m => m.audittime).ToList();
}
}
public List<WX_SzzyOrderPay> GetListByOrderIds(List<int> orderIds)
{
using (var db = new zxdContext())
{
return db.WX_SzzyOrderPay.Where(m => orderIds.Contains(m.orderid) && m.auditstatus == 1).ToList();
}
}
/// <summary>
/// 通过订金ID获取涉及到的订单好
/// </summary>
/// <param name="depositIds"></param>
/// <returns></returns>
public int[] GetOrderIdsByDepositIds(int[] depositIds)
{
using (var db = new zxdContext())
{
return db.WX_SzzyOrderPay.Where(m => depositIds.Contains(m.depositid.Value) && m.auditstatus == 1).GroupBy(m => m.orderid).Select(m => m.Key).ToArray();
}
}
public List<OrderPayView> GetPayInfo(int year, int month, string companyCode, string channel)
{
var startTime = new DateTime(year, month, 1);
var endTime = startTime.AddMonths(1);
var where = PredicateExtensionses.True<OrderPayView>();
where = where.And(p => p.paydate >= startTime);
where = where.And(p => p.paydate < endTime);
where = where.And(m => m.auditstatus == 1);
if (!string.IsNullOrEmpty(channel))
{
var arr0 = channel.Split('|');
if (arr0.Length > 1)
{
var whereOr = PredicateExtensionses.False<OrderPayView>();
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.Where(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);
}
}
using (var db = new zxdContext())
{
var query = from p in db.WX_SzzyOrderPay
join o in db.WX_SZZYORDER on p.orderid equals o.ORDERID into poTmp
from po in poTmp.DefaultIfEmpty()
select new OrderPayView()
{
id = p.id,
orderid = p.orderid,
wxshoporderno = po.wXShopOrderNo,
payno = p.payno,
needpay = p.needpay,
paytypename = p.paytypename,
paydate = p.paydate.Value,
payprice = p.payprice,
payname = p.payname,
remark = p.remark,
auditstatus = p.auditstatus,
channel = p.channel,
rejectremark = p.rejectremark
};
query = query.Where(where);
return query.ToList();
}
}
public List<OrderPayView> GetDepositInfo(int year, int month, string companyCode, string channel)
{
var startTime = new DateTime(year, month, 1);
var endTime = startTime.AddMonths(1);
var where = PredicateExtensionses.True<OrderPayView>();
where = where.And(p => p.paydate >= startTime);
where = where.And(p => p.paydate < endTime);
where = where.And(m => m.auditstatus == 1);
if (!string.IsNullOrEmpty(channel))
{
var arr0 = channel.Split('|');
if (arr0.Length > 1)
{
var whereOr = PredicateExtensionses.False<OrderPayView>();
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.Where(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);
}
}
using (var db = new zxdContext())
{
var query = from p in db.WX_SzzyOrderDeposit
select new OrderPayView()
{
id = p.id,
orderid = p.id,
wxshoporderno = string.Empty,
payno = p.payno,
needpay = p.payprice.Value,
paytypename = p.paytypename,
paydate = p.paydate.Value,
payprice = p.payprice.Value,
payname = p.payname,
remark = p.remark,
auditstatus = p.auditstatus,
channel = p.channel,
rejectremark = p.rejectremark
};
query = query.Where(where);
return query.ToList();
}
}
public List<PayDto2> GetPayList(DateTime ptime)
{
var sql = @"
select CONVERT(DATE_FORMAT(p.paydate,'%Y%m'),SIGNED INTEGER) pmonth, sum(p.payprice) payprice
from wx_szzyorderpay p
where p.auditstatus = 1 and p.paydate < @arg_ptime
group by DATE_FORMAT(p.paydate,'%Y%m')";
var param = new List<MySqlParameter> {
new MySqlParameter { ParameterName = "arg_ptime", DbType = DbType.DateTime, Value = ptime }
};
var ds = MySqlDbHelper.DataQueray(ConStringHelper.ZxdCRMConn, System.Data.CommandType.Text, sql, param.ToArray());
var list = new List<PayDto2>();
foreach (DataRow row in ds.Tables[0].Rows)
{
list.Add(new PayDto2() { pMonth = Convert.ToInt32(row[0]), payPrice = Convert.ToDecimal(row[1]) });
}
decimal tmpSum = 0;
foreach (var item in list.OrderBy(p => p.pMonth))
{
tmpSum += item.payPrice;
item.payPriceSum = tmpSum;
}
return list;
}
public List<OrderPayUseListRspDto> OrderPayUseListGet(OrderPayUseListReqDto dto, ref OrderPayUseListSumRspInfo info)
{
using (var db = new zxdContext())
{
var paylist = db.WX_SzzyOrderPay.AsQueryable();
paylist = paylist.Where(m => (m.isdelete == 0 || m.isdelete == null));// 查询需要查出除了删除的所有状态数据
if (dto.orderid.HasValue)
{
paylist = paylist.Where(m => m.orderid == dto.orderid.Value);
}
if (dto.auditstatus.HasValue)
{
paylist = paylist.Where(m => m.auditstatus == dto.auditstatus.Value);
}
if (dto.audittimeStime.HasValue)
{
paylist = paylist.Where(m => m.audittime >= dto.audittimeStime.Value);
}
if (dto.audittimeEtime.HasValue)
{
dto.audittimeEtime = dto.audittimeEtime.Value.AddDays(1);
paylist = paylist.Where(m => m.audittime <= dto.audittimeEtime.Value);
}
if (dto.paydateStime.HasValue)
{
paylist = paylist.Where(m => m.paydate >= dto.paydateStime.Value);
}
if (dto.paydateEtime.HasValue)
{
dto.paydateEtime = dto.paydateEtime.Value.AddDays(1);
paylist = paylist.Where(m => m.paydate <= dto.paydateEtime.Value);
}
if (!string.IsNullOrEmpty(dto.payno))
{
dto.payno = dto.payno.Trim();
paylist = paylist.Where(m => m.payno == dto.payno);
}
if (dto.paytype.HasValue)
{
paylist = paylist.Where(m => m.paytype == dto.paytype.Value);
}
//if (!string.IsNullOrEmpty(dto.resid))
//{
// dto.resid = dto.resid.Trim();
// where = where.Where(m => m.re == dto.resid);
//}
//CompanyVirlual channelInfo = new Bas_CompanyVirtual_BL().GetChannel(dto.channel);
List<CompanyVirlual> channelInfoList = new Bas_CompanyVirtual_BL().GetChannelList(dto.channel);
var predicates = new List<Expression<Func<WX_SzzyOrderPay, bool>>>();
foreach (var channelInfo in channelInfoList)
{
foreach (var item in channelInfo.channels)
{
predicates.Add(m => m.channel >= item.minChannel && m.channel <= item.maxChannel);
}
}
paylist = paylist.WhereOR(predicates.ToArray());
//Laypage laypage = new Laypage()
//{
// count = dto.laypage.count,
// limit = dto.laypage.limit,
// order = dto.laypage.order,
// page = dto.laypage.page,
// sort = dto.laypage.sort
//};
//info = new OrderPayUseListSumRspInfo() { usePriceSum = paylist.Sum(m => m.payprice) };
var xxs = from a in paylist
join b in db.WX_SzzyOrderDeposit on a.depositid equals b.id into tempB
from m in tempB.DefaultIfEmpty()
select new OrderPayUseListRspDto()
{
auditor = a.auditor,
payprice = a.payprice,
auditorname = a.auditorname,
auditstatus = a.auditstatus,
audittime = a.audittime,
channel = a.channel,
checkpaytime = a.checkpaytime,
checkreslut = a.checkreslut,
companycode = a.companycode,
creator = a.creator,
creatorname = a.creatorname,
ctime = a.ctime,
depositid = a.depositid,
id = a.id,
isdelete = a.isdelete,
needpay = a.needpay,
orderid = a.orderid,
paydate = a.paydate,
payname = a.payname,
depositPrice = m.payprice,
payno = a.payno,
paytype = a.paytype,
paytypename = a.paytypename,
rejectremark = a.rejectremark,
remark = a.remark,
tradeno = a.tradeno
};
xxs = xxs.OrderByDescending(m => m.ctime);
Laypage pager = new Laypage()
{
count = dto.laypage.count,
limit = dto.laypage.limit,
order = dto.laypage.order,
page = dto.laypage.page,
sort = dto.laypage.sort
};
PagerUtil.SetPager(ref xxs, ref pager);
dto.laypage.count = pager.count;
var nlist = xxs.ToList();
return nlist;
}
}
}
public class PayDto
{
public DateTime PayDate { get; set; }
public decimal PayPrice { get; set; }
public int Channel { get; set; }
public int ProductId { get; set; }
public int OrderId { get; set; }
}
public class OrderPayView
{
public int id { get; set; }
public int orderid { get; set; }
public string wxshoporderno { get; set; }
public string payno { get; set; }
public decimal needpay { get; set; }
public string paytypename { get; set; }
public DateTime? paydate { get; set; }
public decimal payprice { get; set; }
public string payname { get; set; }
public string remark { get; set; }
public int auditstatus { get; set; }
public int? channel { get; set; }
public string rejectremark { get; set; }
}
public class PayDto2
{
public int pMonth { get; set; }
public decimal payPrice { get; set; }
public decimal payPriceSum { get; set; }
}
}