shop/CoreCms.Net.Services/Pintuan/CoreCmsPintuanRuleServices.cs
2025-10-11 11:19:23 +08:00

145 lines
5.1 KiB
C#

/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2021/1/31 21:45:10
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Loging;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.Entities.Expression;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Model.ViewModels.DTO;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using SqlSugar;
namespace CoreCms.Net.Services
{
/// <summary>
/// 拼团规则表 接口实现
/// </summary>
public class CoreCmsPinTuanRuleServices : BaseServices<CoreCmsPinTuanRule>, ICoreCmsPinTuanRuleServices
{
private readonly ICoreCmsPinTuanRuleRepository _dal;
private readonly IUnitOfWork _unitOfWork;
private readonly IServiceProvider _serviceProvider;
public CoreCmsPinTuanRuleServices(IUnitOfWork unitOfWork, ICoreCmsPinTuanRuleRepository dal,
IServiceProvider serviceProvider
)
{
this._dal = dal;
base.BaseDal = dal;
_unitOfWork = unitOfWork;
_serviceProvider = serviceProvider;
}
/// <summary>
/// 取购物车数据的时候,更新价格
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public WebApiCallBack PinTuanInfo(List<CartProducts> list)
{
return _dal.PinTuanInfo(list);
}
/// <summary>
/// 接口上获取拼团所有商品
/// </summary>
/// <returns></returns>
public async Task<WebApiCallBack> GetPinTuanList(int id = 0, int userId = 0)
{
var jm = new WebApiCallBack();
using var container = _serviceProvider.CreateScope();
var pinTuanGoodsServices = container.ServiceProvider.GetService<ICoreCmsPinTuanGoodsServices>();
var pinTuanRuleServices = container.ServiceProvider.GetService<ICoreCmsPinTuanRuleServices>();
var dt = DateTime.Now;
var where = PredicateBuilder.True<CoreCmsPinTuanRule>();
@where = @where.And(p => p.startTime < dt);
@where = @where.And(p => p.endTime > dt);
if (id != 0)
{
@where = @where.And(p => p.id == id);
}
var list = await pinTuanRuleServices.QueryListByClauseAsync(@where, p => p.sort, OrderByType.Asc);
var goodIds = new List<int>();
if (list != null && list.Any())
{
var ruleIds = list.Select(p => p.id).ToList();
var goods = await pinTuanGoodsServices.QueryListByClauseAsync(p => ruleIds.Contains(p.ruleId));
if (goods != null && goods.Any())
{
goodIds = goods.Select(p => p.goodsId).ToList();
}
}
if (goodIds.Any())
{
var goods = new List<CoreCmsGoods>();
foreach (var goodId in goodIds)
{
var g = await pinTuanGoodsServices.GetGoodsInfo(goodId, userId);
if (g != null)
{
goods.Add(g);
}
}
jm.data = goods;
}
jm.status = true;
return jm;
}
/// <summary>
/// 根据条件查询分页数据
/// </summary>
/// <param name="predicate">判断集合</param>
/// <param name="orderByType">排序方式</param>
/// <param name="pageIndex">当前页面索引</param>
/// <param name="pageSize">分布大小</param>
/// <param name="orderByExpression"></param>
/// <returns></returns>
public async Task<IPageList<TagPinTuanResult>> QueryTagPinTuanPageAsync(Expression<Func<TagPinTuanResult, bool>> predicate,
Expression<Func<TagPinTuanResult, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1, int pageSize = 20)
{
return await _dal.QueryTagPinTuanPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize);
}
/// <summary>
/// 根据商品id获取拼团规则信息
/// </summary>
/// <param name="goodId"></param>
/// <returns></returns>
public async Task<TagPinTuanResult> GetPinTuanInfo(int goodId)
{
return await _dal.GetPinTuanInfo(goodId);
}
}
}