public async Task <Result> Post([FromBody] ProductAttributeTemplateParam model)
        {
            var template = new ProductAttributeTemplate
            {
                Name = model.Name
            };
            var attributeIds = model.AttributeIds.Distinct();

            if (attributeIds.Count() > 0)
            {
                var attrIds = await _productAttrRepo
                              .Query(c => attributeIds.Contains(c.Id))
                              .Select(c => c.Id)
                              .ToListAsync();

                foreach (var attrId in attrIds)
                {
                    template.AddAttribute(attrId);
                }
            }
            _productAttrTempRepo.Add(template);
            await _productAttrTempRepo.SaveChangesAsync();

            return(Result.Ok());
        }
        public async Task <Result> Put(int id, [FromBody] ProductAttributeTemplateParam model)
        {
            var productTemplate = await _productAttrTempRepo
                                  .Query()
                                  .Include(x => x.ProductAttributes)
                                  .FirstOrDefaultAsync(x => x.Id == id);

            if (productTemplate == null)
            {
                return(Result.Fail("单据不存在"));
            }

            productTemplate.Name      = model.Name;
            productTemplate.UpdatedOn = DateTime.Now;

            var attributeIds = model.AttributeIds.Distinct();
            var attrIds      = new List <int>();

            if (attributeIds.Count() > 0)
            {
                attrIds = await _productAttrRepo
                          .Query(c => attributeIds.Contains(c.Id))
                          .Select(c => c.Id)
                          .ToListAsync();

                foreach (var attrId in attrIds)
                {
                    if (productTemplate.ProductAttributes.Any(x => x.AttributeId == attrId))
                    {
                        continue;
                    }
                    productTemplate.AddAttribute(attrId);
                }
            }

            var deletedAttributes = productTemplate.ProductAttributes.Where(attr => !attrIds.Contains(attr.AttributeId));

            foreach (var deletedAttribute in deletedAttributes)
            {
                deletedAttribute.IsDeleted = true;
                deletedAttribute.UpdatedOn = DateTime.Now;
            }
            _productAttrTempRepo.SaveChanges();
            return(Result.Ok());
        }