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