using Coldairarrow.Entity.DTO; using Coldairarrow.Entity.HuiYan; using Coldairarrow.IBusiness; using Coldairarrow.Util; using EFCore.Sharding; using LinqKit; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic.Core; using System.Linq.Expressions; using System.Threading.Tasks; namespace Coldairarrow.Business.HuiYan { public class catsBusiness : BaseBusiness, IcatsBusiness, ITransientDependency { readonly IOperator _operator; public catsBusiness(IDbAccessor db, IOperator @operator) : base(db) { _operator = @operator; } #region 外部接口 public async Task> GetTreeDataListAsync(CatsTreeInputDTO input) { var where = LinqHelper.True().And(c => c.Type == 0); if (!input.parentId.IsNullOrEmpty()) where = where.And(x => x.ParentId == input.parentId); var list = await GetIQueryable().Where(where).ToListAsync(); var treeList = list .Select(x => new CatTreeDTO { Id = x.Id, ParentId = x.ParentId, Text = x.Name, Value = x.Id, Type = x.Type }).ToList(); return TreeHelper.BuildTree(treeList); } public async Task> GetDataByParentAsync(PageInput input, string key) { var q = GetIQueryable(); var where = LinqHelper.True(); var search = input.Search; //筛选 if (!search.Keyword.IsNullOrEmpty()) { where = where.And(c => c.ParentId == search.Keyword); } else { where = where.And(c => string.IsNullOrEmpty(c.ParentId)); } if (!string.IsNullOrEmpty(key)) { where = where.And(c => c.Name.Contains(key)); } return await q.Where(where).GetPageResultAsync(input); } public AjaxResult GetParentCatList() { var list = GetIQueryable().Where(c => string.IsNullOrEmpty(c.ParentId)).ToList(); return Success(list); } public AjaxResult AddKeyWord(CatDto model) { var result= Db.RunTransaction(() => { /* ///判断是否需要添加一级类目 */ cats oneCat = null; if (!string.IsNullOrEmpty(model.OneCat.Id)) { oneCat = GetIQueryable().FirstOrDefault(c => c.Id == model.OneCat.Id); } if (oneCat == null) { oneCat = new cats() { Id = IdHelper.GetId(), CreateTime = DateTime.Now, CreatorId = "admin", Deleted = false, Name = model.OneCat.Text, ParentId = null, LastShowJDTime = DateTime.MinValue, LastShowPddTime = DateTime.MinValue, LastShowTBTime = DateTime.MinValue }; int row = Db.Insert(oneCat); if (row <= 0) { throw new Exception("一级类目添加失败!"); } } /* ///判断是否需要添加二级类目 */ cats twoCat = null; if (!string.IsNullOrEmpty(model.TwoCat.Id)) { twoCat = GetIQueryable().FirstOrDefault(c => c.Id == model.TwoCat.Id); } if (twoCat == null) { twoCat = new cats() { Id = IdHelper.GetId(), CreateTime = DateTime.Now, CreatorId = "admin", Deleted = false, Name = model.TwoCat.Text, ParentId = oneCat.Id, LastShowJDTime = DateTime.MinValue, LastShowPddTime = DateTime.MinValue, LastShowTBTime = DateTime.MinValue }; int row= Db.Insert(twoCat); if (row <= 0) { throw new Exception("二级类目添加失败!"); } } /* ///判断是否需要添加三级类目 */ cats lastCat = null; if (!string.IsNullOrEmpty(model.LastCat.Id)) { lastCat = GetIQueryable().FirstOrDefault(c => c.Id == model.LastCat.Id); } if (lastCat == null) { lastCat = new cats() { Id = IdHelper.GetId(), CreateTime = DateTime.Now, CreatorId = "admin", Deleted = false, Name = model.LastCat.Text, ParentId = twoCat.Id, LastShowJDTime = DateTime.MinValue, LastShowPddTime = DateTime.MinValue, LastShowTBTime = DateTime.MinValue }; int row = Db.Insert(lastCat); if (row <= 0) { throw new Exception("三级类目添加失败!"); } } var list = new List(); var hasKeys= Db.GetIQueryable().Where(c =>c.Type==0 &&c.ParentId == lastCat.Id && model.KeyWords.Contains(c.Name)).Select(c=>c.Name).ToList(); model.KeyWords.Where(c => !hasKeys.Contains(c)).ForEach(key => { list.Add(new cats() { Id = IdHelper.GetId(), CreateTime = DateTime.Now, CreatorId = "admin", Deleted = false, Name = key, ParentId = lastCat.Id, LastShowJDTime = DateTime.MinValue, LastShowPddTime = DateTime.MinValue, LastShowTBTime = DateTime.MinValue, Type = 0 }); }); Db.BulkInsert(list); }); if(result.Success) { return Success(); } return Error(); } public async Task> GetDataListAsync(PageInput input) { var q = GetIQueryable(); var where = LinqHelper.True(); var search = input.Search; //筛选 if (!search.Condition.IsNullOrEmpty() && !search.Keyword.IsNullOrEmpty()) { var newWhere = DynamicExpressionParser.ParseLambda( ParsingConfig.Default, false, $@"{search.Condition}.Contains(@0)", search.Keyword); where = where.And(newWhere); } return await q.Where(where).GetPageResultAsync(input); } public async Task GetTheDataAsync(string id) { return await GetEntityAsync(id); } public async Task AddDataAsync(cats data) { await InsertAsync(data); } public async Task UpdateDataAsync(cats data) { await UpdateAsync(data); } public async Task DeleteDataAsync(List ids) { await DeleteAsync(ids); } #endregion #region 私有成员 #endregion public async Task> GetTreeDataListAsync() { var where = LinqHelper.True().And(c => c.Type == 0 || c.TeamId == _operator.TeamId); Expression> select = (a, b) => new TeamCatTimeDto { LastTeamShowJDTime = b.LastShowJDTime, LastTeamShowPddTime = b.LastShowPddTime, LastTeamShowTBTime = b.LastShowTBTime }; select = select.BuildExtendSelectExpre(); var q_Cat = GetIQueryable(); var q = from a in q_Cat.AsExpandable() join b in Db.GetIQueryable() on new { Id = a.Id, TeamId=_operator.TeamId } equals new { Id = b.CatId, b.TeamId } into ab from b in ab.DefaultIfEmpty() select @select.Invoke(a, b); var list = await q.Where(where).ToListAsync(); var treeList = list .Select(x => new CatTreeDTO { Id = x.Id, ParentId = x.ParentId, Text = x.Name, Value = x.Id, Type = x.Type, IsShowJDTime = x.LastShowJDTime == null ? true : (DateTime.Now - x.LastShowJDTime.Value).TotalDays > 45, IsShowPddTime = x.LastShowPddTime == null ? true : (DateTime.Now - x.LastShowPddTime.Value).TotalDays > 45, IsShowTBTime = x.LastShowTBTime == null ? true : (DateTime.Now - x.LastShowTBTime.Value).TotalDays > 45, IsTeamShowJDTime = x.LastTeamShowJDTime == null ? true : (DateTime.Now - x.LastTeamShowJDTime.Value).TotalDays > 45, IsTeamShowPddTime = x.LastTeamShowPddTime == null ? true : (DateTime.Now - x.LastTeamShowPddTime.Value).TotalDays > 45, IsTeamShowTBTime = x.LastTeamShowTBTime == null ? true : (DateTime.Now - x.LastTeamShowTBTime.Value).TotalDays > 45 }).ToList(); return TreeHelper.BuildTree(treeList); } public AjaxResult SetKeyOpenTime(string id, ItemPlatform platform) { var cat = Db.GetIQueryable().FirstOrDefault(c => c.Id == id); if (cat.Type == 0) { var time= Db.GetIQueryable().FirstOrDefault(c => c.CatId == id && c.TeamId == _operator.TeamId); if (time == null) { if (Db.Insert(new teamcattime() { Id = IdHelper.GetId(), CatId = id, CreateTime = DateTime.Now, CreatorId = _operator.UserId, Deleted = false, TeamId = _operator.TeamId, LastShowJDTime = platform == ItemPlatform.Jd?DateTime.Now: null, LastShowPddTime = platform == ItemPlatform.ALBB ? DateTime.Now : null, LastShowTBTime = platform == ItemPlatform.Taobao ? DateTime.Now : null }) > 0) return Success(); } else { if (Db.Update(c => c.Id == time.Id, (item) => { if (platform == ItemPlatform.Taobao) { item.LastShowTBTime = DateTime.Now; } if (platform == ItemPlatform.ALBB) { item.LastShowPddTime = DateTime.Now; } if (platform == ItemPlatform.Jd) { item.LastShowJDTime = DateTime.Now; } }) > 0) return Success(); } } else { if (Db.Update(c => c.Id == id, (item) => { if (platform == ItemPlatform.Taobao) { item.LastShowTBTime = DateTime.Now; } if (platform == ItemPlatform.ALBB) { item.LastShowPddTime = DateTime.Now; } if (platform == ItemPlatform.Jd) { item.LastShowJDTime = DateTime.Now; } }) > 0) return Success(); } return Error(); } public AjaxResult AddKeyWord(KeyWordDto model) { var has = GetIQueryable().Count(c => c.Name == model.KeyWord && c.TeamId == _operator.TeamId && c.Type == model.Type)>0; if (has) { return Error("该品类词已存在!"); } var cat = new cats() { Id = IdHelper.GetId(), CreateTime = DateTime.Now, CreatorId = "admin", Deleted = false, Name = model.KeyWord, ParentId = model.LastCat, //设置为团队库 Type = model.Type, //暂时没有登录信息 TeamId = _operator.TeamId, LastShowJDTime = DateTime.MinValue, LastShowPddTime = DateTime.MinValue, LastShowTBTime = DateTime.MinValue }; int row = Db.Insert(cat); if (row > 0) { return Success(cat.Id); } else { return Error(); } } } }