WMS商品类别管理功能CategoryService

using Infrastructure.Attribute;
using Infrastructure.Extensions;
using Model.Dto.WarehouseManagement;
using Model.Page;
using Model.WarehouseManagement;
using Service.Interface.WarehouseManagement;
using SqlSugar;

namespace GD.Service.WarehouseManagement
{
    /// <summary>
    /// 商品类别
    /// </summary>
    [AppService(ServiceType = typeof(ICategoryService), ServiceLifetime = LifeTime.Transient)]
    public class CategoryService : BaseService<Category>, ICategoryService
    {
        /// <summary>
        /// 新增商品类别
        /// </summary>
        /// <param name="category"></param>
        /// <param name="userName"></param>
        /// <returns></returns>
        public long AddCategory(Category category, string userName)
        {
            category.Create_by = userName;
            category.Create_time = DateTime.Now;
            return InsertReturnBigIdentity(category);
        }

        /// <summary>
        /// 删除商品类别
        /// </summary>
        /// <param name="categoryId"></param>
        /// <returns></returns>
        public long DeleteByCategoryId(long categoryId)
        {
            return Delete(categoryId);
        }

        /// <summary>
        /// 编辑商品类别
        /// </summary>
        /// <param name="category"></param>
        /// <param name="userName"></param>
        /// <returns></returns>
        public long EditCategory(Category category, string userName)
        {
            category.Update_by = userName;
            category.Update_time = DateTime.Now;
            return Update(category);
        }

        /// <summary>
        /// 分页获取所有商品类别
        /// </summary>
        /// <param name="categoryQueryDto"></param>
        /// <returns></returns>
        public PagedInfo<Category> GetAllCategory(CategoryQueryDto categoryQueryDto)
        {
            var expression = Expressionable.Create<Category>()
                .AndIF(!string.IsNullOrEmpty(categoryQueryDto.CreateBy), exp => exp.Create_by.Contains(categoryQueryDto.CreateBy))
                .AndIF(categoryQueryDto.ParentId != 0, exp => exp.ParentId == categoryQueryDto.ParentId)
                .AndIF(categoryQueryDto.BeginTime != DateTime.MinValue && categoryQueryDto.BeginTime != null, exp => exp.Create_time >= categoryQueryDto.BeginTime)
                .AndIF(categoryQueryDto.EndTime != DateTime.MaxValue && categoryQueryDto.EndTime != null, exp => exp.Create_time <= categoryQueryDto.EndTime);

            var queryResult = Queryable()
                .Where(expression.ToExpression())
                .ToList();

            var rootId = queryResult
                    .Where(category =>
                    {
                        if (string.IsNullOrEmpty(categoryQueryDto.CategoryName))
                        {
                            return false;
                        }
                        else
                        {
                            //return category.CategoryName.Contains(categoryQueryDto.CategoryName);
                            return category.CategoryName.FuzzyMatch(categoryQueryDto.CategoryName);
                        }
                    })
                    .FirstOrDefault()?
                    .CategoryId;


            var buildResult = BuildCategoryTree(queryResult, rootId);

            if (!string.IsNullOrEmpty(categoryQueryDto.CategoryName)&&rootId==null)
            {
                buildResult = null;
            }


            int pageSize = categoryQueryDto.PageSize,
                pageNum = categoryQueryDto.PageNum,
                totalNum = buildResult?.Count??0;
            var pagedResult = buildResult?
                .Skip((pageNum - 1) * pageSize)
                .Take(pageSize)
                .ToList();

            //var queryResult = Queryable()
            //    .Where(expression.ToExpression())
            //    .ToTree(it => it.ChildCategories, it => it.ParentId, categoryQueryDto.ParentId, it => it.CategoryId);

            //int pageSize = categoryQueryDto.PageSize,
            //    pageNum = categoryQueryDto.PageNum,
            //    totalNum = queryResult.Count;
            //var pagedResult = queryResult
            //    .Skip((pageNum - 1) * pageSize)
            //    .Take(pageSize)
            //    .ToList();

            return new PagedInfo<Category>
            {
                PageIndex = pageNum,
                PageSize = pageSize,
                TotalNum = totalNum,
                Result = pagedResult
            };
        }

        public List<Category> GetAllCategory()
        {
            var queryResult = Queryable()
                .ToList();

            //return BuildCategoryTree(queryResult);
            return queryResult;
        }

        public List<Category> GetAllCategoryTree()
        {
            var queryResult = Queryable()
                .ToList();

            return BuildCategoryTree(queryResult);
        }

        public Category GetCategoryById(long categoryId)
        {
            return Queryable()
                .Where(epx => epx.CategoryId == categoryId)
                .Single();
        }

        public bool IsExistChild(long categoryId)
        {
            return Queryable()
                .Where(category => category.ParentId == categoryId)
                .Any();
        }

        public bool IsOtherUse(long categoryId)
        {
            throw new NotImplementedException();
        }


        /// <summary>
        /// 构建商品类别树
        /// </summary>
        /// <param name="categories"></param>
        /// <returns></returns>
        private List<Category> BuildCategoryTree(List<Category> categories, long? rootId = null)
        {
            var categoryId = rootId != null ? rootId : categories.Min(category => category.ParentId);
            var rootCategories = categories
                .Where(category => category.ParentId == categoryId)
                .ToList();

            foreach (var item in rootCategories)
            {
                item.ChildCategories = RecursionSetSub(item, categories);
            }

            return rootCategories;
        }

        /// <summary>
        /// 递归构建商品类别树
        /// </summary>
        /// <param name="category">父商品类别</param>
        /// <param name="categories">商品类别列表</param>
        /// <returns></returns>
        private List<Category> RecursionSetSub(Category category, List<Category> categories)
        {
            var subCategories = categories
                .Where(predicate => predicate.ParentId == category.CategoryId)
                .ToList();

            foreach (var item in subCategories)
            {
                item.ChildCategories = RecursionSetSub(item, categories);
            }

            return subCategories;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

!chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值