/***********************************************************************
* Project: baifenBinfa
* ProjectName: 百分兵法管理系统
* Web: http://chuanyin.com
* Author:
* Email:
* CreateTime: 202403/02
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.Entities.Expression;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.DTO;
using CoreCms.Net.Utility.Helper;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SqlSugar;
namespace CoreCms.Net.Repository
{
///
/// 订单表 接口实现
///
public class CoreCmsOrderRepository : BaseRepository, ICoreCmsOrderRepository
{
public CoreCmsOrderRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
#region 查询团购秒杀下单数量(获取货品的秒杀团购数据)
///
/// 查询团购秒杀下单数量(获取货品的秒杀团购数据)
///
///
///
///
///
///
///
public FindLimitOrderDto FindLimitOrder(int productId, int userId, DateTime? startTime, DateTime? endTime, int orderType = 0)
{
var dto = new FindLimitOrderDto();
var statusArr = new int[] { (int)GlobalEnumVars.OrderStatus.Normal, (int)GlobalEnumVars.OrderStatus.Complete };
var payStatusArr = new int[] { (int)GlobalEnumVars.OrderPayStatus.No, (int)GlobalEnumVars.OrderPayStatus.Yes, (int)GlobalEnumVars.OrderPayStatus.PartialYes };
var shipStatusArr = new int[] { (int)GlobalEnumVars.OrderShipStatus.No, (int)GlobalEnumVars.OrderShipStatus.Yes, (int)GlobalEnumVars.OrderShipStatus.PartialYes };
var queryable = DbClient.Queryable((orderItem, orderModel) => new object[]
{
JoinType.Inner, orderItem.orderId == orderModel.orderId
});
//计算订单总量
queryable.WhereIF(productId > 0, (orderItem, orderModel) => orderItem.productId == productId);
queryable.In((orderItem, orderModel) => orderModel.status, statusArr);
//在活动时间范围内
queryable.WhereIF(startTime != null, (orderItem, orderModel) => orderModel.createTime >= startTime);
queryable.WhereIF(endTime != null, (orderItem, orderModel) => orderModel.createTime < endTime);
//已退款、已退货、部分退款的、部分退货的排除
queryable.In((orderItem, orderModel) => orderModel.payStatus, payStatusArr);
queryable.In((orderItem, orderModel) => orderModel.shipStatus, shipStatusArr);
//订单类型
if (orderType > 0)
{
queryable.Where((orderItem, orderModel) => orderModel.orderType == orderType);
}
dto.TotalOrders = queryable.Clone().Select((orderItem, orderModel) => new { nums = orderItem.nums }).MergeTable().With(SqlWith.Null).Sum(p => p.nums);
if (userId <= 0) return dto;
{
queryable.Where((orderItem, orderModel) => orderModel.userId == userId);
dto.TotalUserOrders = queryable.Clone().Select((orderItem, orderModel) => new { nums = orderItem.nums }).MergeTable().With(SqlWith.Null).Sum(p => p.nums);
}
return dto;
}
#endregion
#region 查询团购秒杀下单数量(获取商品序号的秒杀团购数据)
///
/// 查询团购秒杀下单数量(获取商品序号的秒杀团购数据)
///
///
///
///
///
///
///
public FindLimitOrderDto FindLimitOrderByGoodId(int goodId, int userId, DateTime? startTime, DateTime? endTime, int orderType = 0)
{
var dto = new FindLimitOrderDto();
var statusArr = new int[] { (int)GlobalEnumVars.OrderStatus.Normal, (int)GlobalEnumVars.OrderStatus.Complete };
var payStatusArr = new int[] { (int)GlobalEnumVars.OrderPayStatus.No, (int)GlobalEnumVars.OrderPayStatus.Yes, (int)GlobalEnumVars.OrderPayStatus.PartialYes };
var shipStatusArr = new int[] { (int)GlobalEnumVars.OrderShipStatus.No, (int)GlobalEnumVars.OrderShipStatus.Yes, (int)GlobalEnumVars.OrderShipStatus.PartialYes };
var queryable = DbClient.Queryable((orderItem, orderModel) => new object[]
{
JoinType.Inner, orderItem.orderId == orderModel.orderId
});
//计算订单总量
queryable.WhereIF(goodId > 0, (orderItem, orderModel) => orderItem.goodsId == goodId);
queryable.In((orderItem, orderModel) => orderModel.status, statusArr);
//在活动时间范围内
queryable.WhereIF(startTime != null, (orderItem, orderModel) => orderModel.createTime >= startTime);
queryable.WhereIF(endTime != null, (orderItem, orderModel) => orderModel.createTime < endTime);
//已退款、已退货、部分退款的、部分退货的排除
queryable.In((orderItem, orderModel) => orderModel.payStatus, payStatusArr);
queryable.In((orderItem, orderModel) => orderModel.shipStatus, shipStatusArr);
//订单类型
if (orderType > 0)
{
queryable.Where((orderItem, orderModel) => orderModel.orderType == orderType);
}
dto.TotalOrders = queryable.Clone().Select((orderItem, orderModel) => new { nums = orderItem.nums }).MergeTable().With(SqlWith.Null).Sum(p => p.nums);
if (userId <= 0) return dto;
{
queryable.Where((orderItem, orderModel) => orderModel.userId == userId);
dto.TotalUserOrders = queryable.Clone().Select((orderItem, orderModel) => new { nums = orderItem.nums }).MergeTable().With(SqlWith.Null).Sum(p => p.nums);
}
return dto;
}
#endregion
#region 根据用户id和商品id获取下了多少订单
///
/// 根据用户id和商品id获取下了多少订单
///
///
///
///
public int GetOrderNum(int userId, int goodId)
{
var num = DbClient.Queryable((op, ot) => new object[]
{
JoinType.Inner, op.orderId == ot.orderId
}).Where((op, ot) => op.userId == userId && ot.goodsId == goodId).Count();
return num;
}
#endregion
#region 根据用户id和商品id获取下了多少订单
///
/// 根据用户id和商品id获取下了多少订单
///
///
///
/// 状态
///
public int GetOrderNum(int userId, int goodId,int orderStatus)
{
var num = DbClient.Queryable((op, ot) => new object[]
{
JoinType.Inner, op.orderId == ot.orderId
}).Where((op, ot) => op.userId == userId && ot.goodsId == goodId && op.status == orderStatus).Count();
return num;
}
#endregion
#region 重写根据条件列表数据
///
/// 重写根据条件列表数据
///
/// 判断集合
/// 排序方式
///
///
public async Task> QueryListAsync(Expression> predicate,
Expression> orderByExpression, OrderByType orderByType)
{
List list = await DbClient.Queryable((sOrder, sUser) => new JoinQueryInfos(
JoinType.Left, sOrder.userId == sUser.id))
.Select((sOrder, sUser) => new CoreCmsOrder
{
orderId = sOrder.orderId,
goodsAmount = sOrder.goodsAmount,
payedAmount = sOrder.payedAmount,
orderAmount = sOrder.orderAmount,
payStatus = sOrder.payStatus,
shipStatus = sOrder.shipStatus,
status = sOrder.status,
orderType = sOrder.orderType,
receiptType = sOrder.receiptType,
paymentCode = sOrder.paymentCode,
paymentTime = sOrder.paymentTime,
logisticsId = sOrder.logisticsId,
logisticsName = sOrder.logisticsName,
costFreight = sOrder.costFreight,
userId = sOrder.userId,
sellerId = sOrder.sellerId,
confirmStatus = sOrder.confirmStatus,
confirmTime = sOrder.confirmTime,
storeId = sOrder.storeId,
shipAreaId = sOrder.shipAreaId,
shipAddress = sOrder.shipAddress,
shipName = sOrder.shipName,
shipMobile = sOrder.shipMobile,
weight = sOrder.weight,
taxType = sOrder.taxType,
taxCode = sOrder.taxCode,
taxTitle = sOrder.taxTitle,
point = sOrder.point,
pointMoney = sOrder.pointMoney,
orderDiscountAmount = sOrder.orderDiscountAmount,
goodsDiscountAmount = sOrder.goodsDiscountAmount,
couponDiscountAmount = sOrder.couponDiscountAmount,
coupon = sOrder.coupon,
promotionList = sOrder.promotionList,
memo = sOrder.memo,
ip = sOrder.ip,
mark = sOrder.mark,
source = sOrder.source,
isComment = sOrder.isComment,
isdel = sOrder.isdel,
createTime = sOrder.createTime,
updateTime = sOrder.updateTime,
userNickName = sUser.nickName
})
.With(SqlWith.NoLock)
.MergeTable()
.Mapper(sOrder => sOrder.aftersalesItem, sOrder => sOrder.aftersalesItem.First().orderId)
.Mapper(sOrder => sOrder.items, sOrder => sOrder.items.First().orderId)
.OrderByIF(orderByExpression != null, orderByExpression, orderByType)
.WhereIF(predicate != null, predicate)
.ToListAsync();
return list;
}
#endregion
#region 重写根据条件查询分页数据-带用户数据
///
/// 重写根据条件查询分页数据-带用户数据
///
/// 判断集合
/// 排序方式
/// 当前页面索引
/// 分布大小
///
/// 是否使用WITH(NOLOCK)
///
public async Task> QueryPageAsync(Expression> predicate,
Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false)
{
RefAsync totalCount = 0;
List page = await DbClient.Queryable((sOrder, sUser) => new JoinQueryInfos(
JoinType.Left, sOrder.userId == sUser.id))
.Select((sOrder, sUser) => new CoreCmsOrder
{
orderId = sOrder.orderId,
goodsAmount = sOrder.goodsAmount,
payedAmount = sOrder.payedAmount,
orderAmount = sOrder.orderAmount,
payStatus = sOrder.payStatus,
shipStatus = sOrder.shipStatus,
status = sOrder.status,
orderType = sOrder.orderType,
receiptType = sOrder.receiptType,
paymentCode = sOrder.paymentCode,
paymentTime = sOrder.paymentTime,
logisticsId = sOrder.logisticsId,
logisticsName = sOrder.logisticsName,
costFreight = sOrder.costFreight,
userId = sOrder.userId,
sellerId = sOrder.sellerId,
confirmStatus = sOrder.confirmStatus,
confirmTime = sOrder.confirmTime,
storeId = sOrder.storeId,
shipAreaId = sOrder.shipAreaId,
shipAddress = sOrder.shipAddress,
shipName = sOrder.shipName,
shipMobile = sOrder.shipMobile,
weight = sOrder.weight,
taxType = sOrder.taxType,
taxCode = sOrder.taxCode,
taxTitle = sOrder.taxTitle,
point = sOrder.point,
pointMoney = sOrder.pointMoney,
orderDiscountAmount = sOrder.orderDiscountAmount,
goodsDiscountAmount = sOrder.goodsDiscountAmount,
couponDiscountAmount = sOrder.couponDiscountAmount,
coupon = sOrder.coupon,
promotionList = sOrder.promotionList,
memo = sOrder.memo,
ip = sOrder.ip,
mark = sOrder.mark,
source = sOrder.source,
isComment = sOrder.isComment,
isdel = sOrder.isdel,
createTime = sOrder.createTime,
updateTime = sOrder.updateTime,
userNickName = sUser.nickName,
})
.With(SqlWith.NoLock)
.MergeTable()
.Mapper(sOrder => sOrder.aftersalesItem, sOrder => sOrder.aftersalesItem.First().orderId)
.Mapper(sOrder => sOrder.items, sOrder => sOrder.items.First().orderId)
.OrderByIF(orderByExpression != null, orderByExpression, orderByType)
.WhereIF(predicate != null, predicate)
.ToPageListAsync(pageIndex, pageSize, totalCount);
var list = new PageList(page, pageIndex, pageSize, totalCount);
return list;
}
#endregion
#region 重写根据条件查询分页数据
///
/// 重写根据条件查询分页数据
///
/// 判断集合
/// 排序方式
/// 当前页面索引
/// 分布大小
///
/// 是否使用WITH(NOLOCK)
///
public async Task> QueryPageNewAsync(Expression> predicate,
Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false)
{
RefAsync totalCount = 0;
List page;
if (blUseNoLock)
{
page = await DbClient.Queryable()
.OrderByIF(orderByExpression != null, orderByExpression, orderByType)
.WhereIF(predicate != null, predicate).Select(p => new CoreCmsOrder
{
orderId = p.orderId,
goodsAmount = p.goodsAmount,
payedAmount = p.payedAmount,
orderAmount = p.orderAmount,
payStatus = p.payStatus,
shipStatus = p.shipStatus,
status = p.status,
orderType = p.orderType,
receiptType = p.receiptType,
paymentCode = p.paymentCode,
paymentTime = p.paymentTime,
logisticsId = p.logisticsId,
logisticsName = p.logisticsName,
costFreight = p.costFreight,
userId = p.userId,
sellerId = p.sellerId,
confirmStatus = p.confirmStatus,
confirmTime = p.confirmTime,
storeId = p.storeId,
shipAreaId = p.shipAreaId,
shipAddress = p.shipAddress,
shipName = p.shipName,
shipMobile = p.shipMobile,
weight = p.weight,
taxType = p.taxType,
taxCode = p.taxCode,
taxTitle = p.taxTitle,
point = p.point,
pointMoney = p.pointMoney,
orderDiscountAmount = p.orderDiscountAmount,
goodsDiscountAmount = p.goodsDiscountAmount,
couponDiscountAmount = p.couponDiscountAmount,
coupon = p.coupon,
promotionList = p.promotionList,
memo = p.memo,
ip = p.ip,
mark = p.mark,
source = p.source,
isComment = p.isComment,
isdel = p.isdel,
createTime = p.createTime,
updateTime = p.updateTime,
}).With(SqlWith.NoLock).ToPageListAsync(pageIndex, pageSize, totalCount);
}
else
{
page = await DbClient.Queryable()
.OrderByIF(orderByExpression != null, orderByExpression, orderByType)
.WhereIF(predicate != null, predicate).Select(p => new CoreCmsOrder
{
orderId = p.orderId,
goodsAmount = p.goodsAmount,
payedAmount = p.payedAmount,
orderAmount = p.orderAmount,
payStatus = p.payStatus,
shipStatus = p.shipStatus,
status = p.status,
orderType = p.orderType,
receiptType = p.receiptType,
paymentCode = p.paymentCode,
paymentTime = p.paymentTime,
logisticsId = p.logisticsId,
logisticsName = p.logisticsName,
costFreight = p.costFreight,
userId = p.userId,
sellerId = p.sellerId,
confirmStatus = p.confirmStatus,
confirmTime = p.confirmTime,
storeId = p.storeId,
shipAreaId = p.shipAreaId,
shipAddress = p.shipAddress,
shipName = p.shipName,
shipMobile = p.shipMobile,
weight = p.weight,
taxType = p.taxType,
taxCode = p.taxCode,
taxTitle = p.taxTitle,
point = p.point,
pointMoney = p.pointMoney,
orderDiscountAmount = p.orderDiscountAmount,
goodsDiscountAmount = p.goodsDiscountAmount,
couponDiscountAmount = p.couponDiscountAmount,
coupon = p.coupon,
promotionList = p.promotionList,
memo = p.memo,
ip = p.ip,
mark = p.mark,
source = p.source,
isComment = p.isComment,
isdel = p.isdel,
createTime = p.createTime,
updateTime = p.updateTime,
}).ToPageListAsync(pageIndex, pageSize, totalCount);
}
var list = new PageList(page, pageIndex, pageSize, totalCount);
return list;
}
#endregion
}
}