/*********************************************************************** * 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.IRepository; using CoreCms.Net.IRepository.UnitOfWork; using CoreCms.Net.IServices; 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.Utility.Extensions; using CoreCms.Net.Utility.Helper; using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; using SqlSugar; namespace CoreCms.Net.Services { /// /// 服务购买表 接口实现 /// public class CoreCmsUserServicesOrderServices : BaseServices, ICoreCmsUserServicesOrderServices { private readonly ICoreCmsUserServicesOrderRepository _dal; private readonly IServiceProvider _serviceProvider; private readonly ICoreCmsSettingServices _settingServices; private readonly ISysTaskLogServices _taskLogServices; private readonly IUnitOfWork _unitOfWork; public CoreCmsUserServicesOrderServices(IUnitOfWork unitOfWork, ICoreCmsUserServicesOrderRepository dal, IServiceProvider serviceProvider, ICoreCmsSettingServices settingServices, ISysTaskLogServices taskLogServices) { this._dal = dal; _serviceProvider = serviceProvider; _settingServices = settingServices; _taskLogServices = taskLogServices; base.BaseDal = dal; _unitOfWork = unitOfWork; } /// /// 完成服务订单后生成兑换券 /// /// /// /// public async Task CreateUserServicesTickets(string serviceOrderId, string paymentId) { using var container = _serviceProvider.CreateScope(); var servicesServices = container.ServiceProvider.GetService(); var userServicesTicketServices = container.ServiceProvider.GetService(); var jm = new WebApiCallBack(); var model = await _dal.QueryByClauseAsync(p => p.serviceOrderId == serviceOrderId); if (model == null) { jm.msg = "订单获取失败"; return jm; } var servicesModel = await servicesServices.QueryByClauseAsync(p => p.id == model.servicesId); if (servicesModel == null) { jm.msg = "服务信息获取失败"; return jm; } model.isPay = true; model.payTime = DateTime.Now; model.paymentId = paymentId; model.servicesEndTime = servicesModel.validityEndTime; var up = await _dal.UpdateAsync(model); var bl = false; if (up) { var tickets = new List(); for (int i = 0; i < servicesModel.ticketNumber; i++) { var tk = new CoreCmsUserServicesTicket(); tk.serviceOrderId = serviceOrderId; tk.securityCode = Guid.NewGuid(); tk.redeemCode = CommonHelper.GetSerialNumberType((int)GlobalEnumVars.SerialNumberType.服务券兑换码); tk.serviceId = model.servicesId; tk.userId = model.userId; tk.status = (int)GlobalEnumVars.ServicesTicketStatus.正常; tk.validityType = servicesModel.validityType; tk.validityStartTime = servicesModel.validityStartTime; tk.validityEndTime = servicesModel.validityEndTime; tk.createTime = DateTime.Now; tk.isVerification = false; tickets.Add(tk); } bl = await userServicesTicketServices.InsertAsync(tickets) > 0; } jm.status = bl && up; jm.msg = bl && up ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure; return jm; } #region 重写根据条件查询分页数据 /// /// 重写根据条件查询分页数据 /// /// 判断集合 /// 排序方式 /// 当前页面索引 /// 分布大小 /// /// 是否使用WITH(NOLOCK) /// public async Task> QueryPageAsync(Expression> predicate, Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, int pageSize = 20, bool blUseNoLock = false) { return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock); } #endregion #region 自动取消订单(定时任务使用) /// /// 自动取消订单(定时任务使用) /// /// public async Task AutoCancelOrder() { var jm = new WebApiCallBack(); var allConfigs = await _settingServices.GetConfigDictionaries(); var time = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ServiceOrderCancelTime).ObjectToInt(30); var endTime = DateTime.Now.AddMinutes(-time); var where = PredicateBuilder.True(); where = where.And(p => p.isPay == false); where = where.And(p => p.status == (int)GlobalEnumVars.ServicesOrderStatus.正常); where = where.And(p => p.createTime <= endTime); var orderInfos = await _dal.QueryListByClauseAsync(where); jm.status = true; jm.msg = "取消成功"; if (orderInfos.Any()) { orderInfos.ForEach(p => p.status = (int)GlobalEnumVars.ServicesOrderStatus.作废); await _dal.UpdateAsync(orderInfos); } //插入日志 var model = new SysTaskLog { createTime = DateTime.Now, isSuccess = jm.status, name = "自动取消服务订单", parameters = JsonConvert.SerializeObject(jm) }; await _taskLogServices.InsertAsync(model); return jm; } #endregion } }