using Coldairarrow.Entity.DTO; using Coldairarrow.Entity.HuiYan; using Coldairarrow.Util; using EFCore.Sharding; using LinqKit; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic.Core; using System; using System.Threading.Tasks; using System.Linq.Expressions; using Coldairarrow.IBusiness; namespace Coldairarrow.Business.HuiYan { public class itemlabelsBusiness : BaseBusiness, IitemlabelsBusiness, ITransientDependency { IteamitemsBusiness iteamitemsBusiness; readonly IOperator _operator; public itemlabelsBusiness(IDbAccessor db, IteamitemsBusiness _iteamitemsBusiness, IOperator @operator) : base(db) { iteamitemsBusiness = _iteamitemsBusiness; _operator = @operator; } #region 外部接口 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(itemlabels data) { await InsertAsync(data); } public async Task UpdateDataAsync(itemlabels data) { await UpdateAsync(data); } public async Task DeleteDataAsync(List ids) { await DeleteAsync(ids); } #endregion #region 私有成员 #endregion public AjaxResult GetLabelByItemIds(List ids, ItemPlatform platform) { Expression> select = (a, b) => new ItemlabelInfoDto { GoodsId = b.GoodsId, HasFilter = b.HasFilter, Platform = b.Platform }; select = select.BuildExtendSelectExpre(); var q_titem = GetIQueryable(); var q = from a in q_titem.AsExpandable() join b in Db.GetIQueryable() on a.ItemsId equals b.Id into ab from b in ab.DefaultIfEmpty() select @select.Invoke(a, b); //查询这边还需要添加 (Teamid筛选,或者HasFilter=True) 的二选一查询 var where = LinqHelper.True().And(c => c.Platform == (int)platform && ids.Contains(c.GoodsId)); where = where.And(c => c.TeamId == _operator.TeamId || c.HasFilter ==true); var list = q.Where(where).ToListAsync().Result; return Success(list); } public AjaxResult GetAlbbLabelByShopIds(Listids) { var list= Db.GetIQueryable().Where(c => ids.Contains(c.ShopId)); return Success(list); } public AjaxResult SetItemLabel(ItemLabelDto model) { bool isAddItem = false; var item= Db.GetIQueryable().FirstOrDefault(c => c.GoodsId == model.ItemId&&c.Platform==(int)model.Platform); if (item == null) { item = new items() { CreateTime = DateTime.Now, CreatorId = string.Empty, Deleted = false, GoodsId = model.ItemId, Id = IdHelper.GetId(), HasFilter = model.Status == ItemLabelStatus.Filter, Platform = (int)model.Platform }; int row = Db.Insert(item); if (row <= 0) return Error("添加失败!"); isAddItem = true; } ////判断是否阿里巴巴合作 //if (model.Status == ItemLabelStatus.Cooperation) //{ // return SetAlbbCooperation(item); //} var where = LinqHelper.True().And(c => c.ItemsId == item.Id); //团队筛选 where = where.And(c=>c.TeamId==_operator.TeamId); var label = GetIQueryable().FirstOrDefault(where); bool isCanel = false; var result = Db.RunTransaction(() => { int row = 0; bool hasAdded = false; //新增 if (label == null) { label = new itemlabels() { CreateTime = DateTime.Now, Deleted = false, Id = IdHelper.GetId(), ItemsId = item.Id, CreatorId =_operator.UserId, TeamId =_operator.TeamId, UserId = _operator.UserId }; switch (model.Status) { case ItemLabelStatus.Screening: label.IsScreening = true; break; case ItemLabelStatus.Filter: label.IsFilter = true; break; case ItemLabelStatus.Added: label.IsAdded = true; break; case ItemLabelStatus.Competing: label.IsCompeting = true; break; } row = Db.Insert(label); if (row <= 0) throw new Exception("标签设置失败!"); } //更新 else { hasAdded = label.IsAdded; //更新状态 row = Db.Update(c => c.Id == label.Id, (data) => { switch (model.Status) { case ItemLabelStatus.Screening: if (label.IsFilter) throw new Exception("该商品已被过滤!"); if (data.IsScreening) { data.IsScreening = false; isCanel = true; } else data.IsScreening = true; break; case ItemLabelStatus.Filter: if (label.IsScreening) throw new Exception("该商品已被筛选!"); if (data.IsFilter) { data.IsFilter = false; isCanel = true; } else data.IsFilter = true; break; case ItemLabelStatus.Added: //加入产品库同时也勾选筛选 if (data.IsAdded) { data.IsAdded = false; isCanel = true; } else data.IsAdded = true; break; case ItemLabelStatus.Competing: if (data.IsCompeting) { data.IsCompeting = false; isCanel = true; } else data.IsCompeting = true; break; } }); if (row <= 0) throw new Exception("标签设置失败!"); } //设置集团过滤 if (model.Status == ItemLabelStatus.Filter&& !isAddItem) { Db.Update(c => c.Id == item.Id, (i) => { i.HasFilter = true; }); } //判断是否添加产品库 if (model.Status== ItemLabelStatus.Added&&!hasAdded) { if (!iteamitemsBusiness.AddItem(new TeamitemDto() { GoodsId = model.ItemId, ItemId = item.Id, ItemImg = model.Img, Price = model.Price, Platform = item.Platform, Sales = model.Sales, Title = model.Title }).Success) { throw new Exception("添加产品库失败!"); } } //删除产品库 if (model.Status == ItemLabelStatus.Added && isCanel) { iteamitemsBusiness.RemoveItem(model.ItemId); } }); if (result.Success) return Success(new { isCanel },"操作成功!"); return Error(result.ex.Message); } /// /// 设置阿里巴巴合作 /// /// public AjaxResult SetAlbbCooperation(string shopId) { bool isCanel = false; int count= Db.GetIQueryable().Count(c => c.ShopId == shopId); if (count > 0) { isCanel = true; Db.Delete(c => c.ShopId == shopId); return Success(new { isCanel }); } int row= Db.Insert(new albbitemlabels() { CreateTime = DateTime.Now, CreatorId = _operator.UserId, Deleted = false, Id = IdHelper.GetId(), ShopId = shopId }); if (row > 0) return Success(new { isCanel }); else { return Error(); } } public AjaxResult GetItemsByJpLabels(int type) { Expression> select = (a, b) => new ItemlabelInfoDto { GoodsId = b.GoodsId, HasFilter = b.HasFilter, Platform = b.Platform }; select = select.BuildExtendSelectExpre(); var q_titem = GetIQueryable(); var q = from a in q_titem.AsExpandable() join b in Db.GetIQueryable() on a.ItemsId equals b.Id into ab from b in ab.DefaultIfEmpty() select @select.Invoke(a, b); var where = LinqHelper.True().And(c => c.Platform == (int)ItemPlatform.Jd && c.TeamId == _operator.TeamId && c.IsCompeting == true); var list = q.Where(where).ToList(); return Success(list); } } }