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