/*********************************************************************** * 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.Loging; using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.ViewModels.Basics; using CoreCms.Net.Model.ViewModels.DTO; using CoreCms.Net.Model.ViewModels.UI; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json.Linq; using SqlSugar; namespace CoreCms.Net.Services { /// /// 商品评价表 接口实现 /// public class CoreCmsGoodsCommentServices : BaseServices, ICoreCmsGoodsCommentServices { private readonly ICoreCmsGoodsCommentRepository _dal; private readonly IUnitOfWork _unitOfWork; private readonly IServiceProvider _serviceProvider; private readonly IToolsServices _toolsServices; public CoreCmsGoodsCommentServices(IUnitOfWork unitOfWork, ICoreCmsGoodsCommentRepository dal, IServiceProvider serviceProvider, IToolsServices toolsServices) { this._dal = dal; base.BaseDal = dal; _unitOfWork = unitOfWork; _serviceProvider = serviceProvider; _toolsServices = toolsServices; } /// /// 添加一条评论 /// /// 订单号 /// 评价数据 /// 用户序列 /// public async Task AddComment(string orderId, List items, int userId) { var jm = new WebApiCallBack(); using var container = _serviceProvider.CreateScope(); var orderServices = container.ServiceProvider.GetService(); var orderItemServices = container.ServiceProvider.GetService(); var goodsServices = container.ServiceProvider.GetService(); //判断这个订单是否可以评价 var res = await orderServices.IsOrderComment(orderId, userId); if (!res.status) { //已经评价或者存在问题 return res; } var goodComments = new List(); var gid = new List(); foreach (var item in items) { //判断此条记录是否是此订单下面的 var itemInfo = await orderItemServices.QueryByClauseAsync(p => p.id == item.orderItemId && p.orderId == orderId); if (itemInfo == null) { //说明没有此条记录,就不需要评论了 continue; } var score = 5; if (item.score >= 1 && item.score <= 5) { score = item.score; } var images = string.Empty; if (item.images.Any()) { images = string.Join(",", item.images); } //过滤违规字符串 item.textarea = await _toolsServices.IllegalWordsReplace(item.textarea); var commentModel = new CoreCmsGoodsComment { commentId = 0, score = score, userId = userId, goodsId = itemInfo.goodsId, orderId = orderId, images = images, contentBody = item.textarea, addon = itemInfo.addon, isDisplay = false, createTime = DateTime.Now }; goodComments.Add(commentModel); gid.Add(itemInfo.goodsId); } await _dal.InsertAsync(goodComments); //商品表更新评论数量 await goodsServices.UpdateAsync(p => new CoreCmsGoods() { commentsCount = p.commentsCount + 1 }, p => gid.Contains(p.id)); //修改评价状态 await orderServices.UpdateAsync(p => new CoreCmsOrder() { isComment = true }, p => p.orderId == orderId); jm.status = true; jm.msg = "评价成功"; return jm; } #region 实现重写增删改查操作========================================================== /// /// 重写异步更新方法方法 /// /// /// public async Task UpdateAsync(CoreCmsGoodsComment entity) { return await _dal.UpdateAsync(entity); } /// /// 重写删除指定ID的数据 /// /// /// public async Task DeleteByIdAsync(object id) { return await _dal.DeleteByIdAsync(id); } #endregion /// /// 商家回复评价 /// /// 序列 /// 回复内容 /// public async Task Reply(int id, string sellerContent) { return await _dal.Reply(id, sellerContent); } /// /// 获取单个详情数据 /// /// 判断集合 /// 排序方式 /// /// public async Task DetailsByIdAsync(Expression> predicate, Expression> orderByExpression, OrderByType orderByType) { return await _dal.DetailsByIdAsync(predicate, orderByExpression, orderByType); } #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 } }