You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
402 lines
14 KiB
402 lines
14 KiB
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<cats>, IcatsBusiness, ITransientDependency
|
|
{
|
|
readonly IOperator _operator;
|
|
public catsBusiness(IDbAccessor db, IOperator @operator)
|
|
: base(db)
|
|
{
|
|
|
|
_operator = @operator;
|
|
}
|
|
|
|
#region 外部接口
|
|
|
|
public async Task<List<CatTreeDTO>> GetTreeDataListAsync(CatsTreeInputDTO input)
|
|
{
|
|
var where = LinqHelper.True<cats>().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<PageResult<cats>> GetDataByParentAsync(PageInput<ConditionDTO> input, string key)
|
|
{
|
|
var q = GetIQueryable();
|
|
var where = LinqHelper.True<cats>();
|
|
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<cats>();
|
|
|
|
var hasKeys= Db.GetIQueryable<cats>().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<PageResult<cats>> GetDataListAsync(PageInput<ConditionDTO> input)
|
|
{
|
|
var q = GetIQueryable();
|
|
var where = LinqHelper.True<cats>();
|
|
var search = input.Search;
|
|
|
|
//筛选
|
|
if (!search.Condition.IsNullOrEmpty() && !search.Keyword.IsNullOrEmpty())
|
|
{
|
|
var newWhere = DynamicExpressionParser.ParseLambda<cats, bool>(
|
|
ParsingConfig.Default, false, $@"{search.Condition}.Contains(@0)", search.Keyword);
|
|
where = where.And(newWhere);
|
|
}
|
|
|
|
return await q.Where(where).GetPageResultAsync(input);
|
|
}
|
|
|
|
public async Task<cats> 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<string> ids)
|
|
{
|
|
await DeleteAsync(ids);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 私有成员
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
public async Task<List<CatTreeDTO>> GetTreeDataListAsync()
|
|
{
|
|
var where = LinqHelper.True<TeamCatTimeDto>().And(c => c.Type == 0 || c.TeamId == _operator.TeamId);
|
|
|
|
|
|
Expression<Func<cats, teamcattime, TeamCatTimeDto>> 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<teamcattime>() 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<cats>().FirstOrDefault(c => c.Id == id);
|
|
|
|
if (cat.Type == 0)
|
|
{
|
|
var time= Db.GetIQueryable<teamcattime>().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<teamcattime>(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<cats>(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<cats>(cat);
|
|
|
|
if (row > 0)
|
|
{
|
|
return Success(cat.Id);
|
|
}
|
|
else
|
|
{
|
|
return Error();
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|