/*********************************************************************** * 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 } }