/*********************************************************************** * 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.Threading.Tasks; using CoreCms.Net.Configuration; using CoreCms.Net.DTO; 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.DTO; using CoreCms.Net.Model.ViewModels.UI; using Essensoft.Paylink.Alipay.Domain; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using SqlSugar; namespace CoreCms.Net.Services { /// /// 拼团规则表 接口实现 /// public class CoreCmsPinTuanRuleServices : BaseServices, 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; } /// /// 取购物车数据的时候,更新价格 /// /// /// 规则序列 /// public WebApiCallBack PinTuanInfo(List list, int ruleId) { return _dal.PinTuanInfo(list,ruleId); } /// /// 接口上获取拼团所有商品 /// /// public async Task GetPinTuanList(int userId = 0, int pageIndex = 1, int pageSize = 20) { var jm = new WebApiCallBack(); using var container = _serviceProvider.CreateScope(); var pinTuanGoodsServices = container.ServiceProvider.GetService(); var pinTuanRuleServices = container.ServiceProvider.GetService(); var goodsServices = container.ServiceProvider.GetService(); //从缓存中获取有效的数据 var dt = DateTime.Now; var pinTuanRules = await pinTuanRuleServices.QueryListByClauseAsync(p => p.isStatusOpen == true && p.startTime < dt && p.endTime > dt, p => p.sort, OrderByType.Asc, true, true, 24 * 60); if (pinTuanRules == null && !pinTuanRules.Any()) { jm.status = true; jm.data = null; return jm; } //获取开启的规则集序列 var pinTuanRuleIds = pinTuanRules.Select(p => p.id).ToArray(); var dtoData = await _dal.GetPinTuanInfos(pinTuanRuleIds, p => p.sortId, OrderByType.Asc, pageIndex, pageSize); foreach (var item in dtoData) { //判断拼团状态 var dtNow = DateTime.Now; if (item.startTime > dt) { item.startStatus = (int)GlobalEnumVars.PinTuanRuleStatus.notBegun; var ts = item.startTime.Subtract(dt); item.timestamp = (int)ts.TotalSeconds; } else if (item.startTime <= dt && item.endTime > dt) { item.startStatus = (int)GlobalEnumVars.PinTuanRuleStatus.begin; var ts = item.endTime.Subtract(dt); item.timestamp = (int)ts.TotalSeconds; } else { item.startStatus = (int)GlobalEnumVars.PinTuanRuleStatus.haveExpired; } item.pinTuanPrice -= item.discountAmount; } jm.data = dtoData; jm.status = true; return jm; } /// /// 根据条件查询分页数据 /// /// 判断集合 /// 排序方式 /// 当前页面索引 /// 分布大小 /// /// public async Task> QueryTagPinTuanPageAsync(Expression> predicate, Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, int pageSize = 20) { return await _dal.QueryTagPinTuanPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize); } /// /// 根据规则Id获取拼团相关信息 /// /// 规则序列 /// public async Task GetPinTuanInfo(int ruleId) { return await _dal.GetPinTuanInfo(ruleId); } /// /// 根据规则ID数组获取拼团相关信息 /// /// 规则序列 /// /// /// /// /// public async Task> GetPinTuanInfos(int[] ruleIds, Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, int pageSize = 20) { return await _dal.GetPinTuanInfos(ruleIds, orderByExpression, orderByType, pageIndex, pageSize); } } }