Ejemplo n.º 1
0
        /// <summary>
        /// 删除内容项的标签
        /// </summary>
        /// <param name="itemId">内容项Id</param>
        /// <param name="tagInOwnerId">标签与拥有者关联</param>
        public int DeleteTagFromItem(long itemId, long tagInOwnerId)
        {
            PetaPocoDatabase dao = CreateDAO();

            dao.OpenSharedConnection();

            var sql = Sql.Builder;

            sql.Select("TagName,")
            .From("tn_ItemsInTags")
            .Where("tagInOwnerId = @0", tagInOwnerId)
            .Where("ItemId = @0", itemId);

            dynamic tagInfo     = dao.First <dynamic>(sql);
            int     affectCount = 0;

            if (tagInfo != null)
            {
                sql = Sql.Builder.Append("delete from tn_ItemsInTags where itemId = @0 and TagInOwnerId = @1", itemId, tagInOwnerId);

                affectCount = dao.Execute(sql);

                if (affectCount > 0)
                {
                    List <Sql> sqls = new List <Sql>();
                    sqls.Add(Sql.Builder.Append("update tn_TagsInOwners set ItemCount = ItemCount - 1")
                             .Where("ItemCount > 0 and Id = @0", tagInOwnerId));
                    sqls.Add(Sql.Builder.Append("update tn_Tags set ItemCount = ItemCount - 1")
                             .Where("ItemCount > 0 and TagName = @0 and TenantTypeId = @1", tagInfo.TagName, tagInfo.TenantTypeId));

                    affectCount = dao.Execute(sqls);

                    RealTimeCacheHelper.IncreaseAreaVersion("TagName", tagInfo.TagName);
                    RealTimeCacheHelper.IncreaseAreaVersion("ItemId", itemId);
                }
            }

            dao.CloseSharedConnection();

            return(affectCount);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 为多个内容项添加相同标签
        /// </summary>
        /// <param name="itemIds">内容项Id</param>
        /// <param name="tenantTypeId">租户类型Id</param>
        /// <param name="ownerId">拥有者Id</param>
        /// <param name="tagName">标签名</param>
        public int AddItemsToTag(IEnumerable <long> itemIds, string tenantTypeId, long ownerId, string tagName)
        {
            PetaPocoDatabase dao = CreateDAO();

            IList <Sql> sqls = new List <Sql>();
            var         sql  = Sql.Builder;

            dao.OpenSharedConnection();
            //创建标签
            sql.From("tn_Tags")
            .Where("TenantTypeId = @0", tenantTypeId)
            .Where("TagName = @0", tagName);
            var tag = dao.FirstOrDefault <Tag>(sql);

            if (tag == null)
            {
                sqls.Add(Sql.Builder.Append("insert into tn_Tags (TenantTypeId,TagName,DateCreated) values(@0,@1,@2)", tenantTypeId, tagName, DateTime.UtcNow));
            }
            //创建标签与用户的关联
            sql = Sql.Builder;
            sql.From("tn_TagsInOwners")
            .Where("TenantTypeId = @0", tenantTypeId)
            .Where("TagName = @0", tagName)
            .Where("OwnerId = @0", ownerId);
            var tagInOwner = dao.FirstOrDefault <TagInOwner>(sql);

            if (tagInOwner == null)
            {
                sqls.Add(Sql.Builder.Append("insert into tn_TagsInOwners (TenantTypeId,TagName,OwnerId) values(@0,@1,@2)", tenantTypeId, tagName, ownerId));
            }

            int affectCount = 0, itemCount = 0;

            foreach (var itemId in itemIds)
            {
                if (itemId <= 0)
                {
                    continue;
                }

                //创建标签与内容项的关联
                sqls.Add(Sql.Builder.Append("insert into tn_ItemsInTags (TagName,TagInOwnerId,ItemId,TenantTypeId) select @0,Id,@1,@2 from tn_TagsInOwners", tagName, itemId, tenantTypeId)
                         .Where("TenantTypeId = @0", tenantTypeId)
                         .Where("OwnerId = @0", ownerId)
                         .Where("TagName = @0", tagName));

                itemCount++;
            }
            //增加标签相关统计
            sqls.Add(Sql.Builder.Append("update tn_Tags Set ItemCount = ItemCount + @2,OwnerCount = OwnerCount + 1 where TenantTypeId = @0 and TagName = @1", tenantTypeId, tagName, itemCount));
            //增加拥有者标签内容项统计
            sqls.Add(Sql.Builder.Append("update tn_TagsInOwners set ItemCount = ItemCount + @3 where TenantTypeId = @0 and TagName = @1 and OwnerId = @2", tenantTypeId, tagName, ownerId, itemCount));

            //通过事务来控制多条语句执行时的一致性
            using (var transaction = dao.GetTransaction())
            {
                dao.Execute(sqls);
                transaction.Complete();
            }

            if (affectCount > 0)
            {
                foreach (var itemId in itemIds)
                {
                    if (itemId <= 0)
                    {
                        continue;
                    }

                    RealTimeCacheHelper.IncreaseAreaVersion("ItemId", itemId);
                }

                sql = Sql.Builder;
                sql.Select("*")
                .From("tn_TagsInOwners")
                .Where("TenantTypeId = @0", tenantTypeId)
                .Where("TagName = @0", tagName)
                .Where("OwnerId = @0", ownerId);

                tagInOwner = dao.First <TagInOwner>(sql);

                EntityData entityData = EntityData.ForType(typeof(TagInOwner));
                if (tagInOwner != null)
                {
                    entityData.RealTimeCacheHelper.IncreaseEntityCacheVersion(tagInOwner.Id);
                }

                entityData.RealTimeCacheHelper.IncreaseAreaVersion("OwnerId", ownerId);
            }

            dao.CloseSharedConnection();

            return(affectCount);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 为内容项批量设置标签
        /// </summary>
        /// <param name="tagNames">标签名称集合</param>
        /// <param name="tenantTypeId">租户类型Id</param>
        /// <param name="ownerId">拥有者Id</param>
        /// <param name="itemId">内容项Id</param>
        public int AddTagsToItem(string[] tagNames, string tenantTypeId, long ownerId, long itemId)
        {
            int affectCount = 0;

            PetaPocoDatabase dao = CreateDAO();

            dao.OpenSharedConnection();

            foreach (string tagName in tagNames)
            {
                if (string.IsNullOrEmpty(tagName))
                {
                    continue;
                }

                IList <Sql> sqls = new List <Sql>();

                //创建标签
                var sql = Sql.Builder;
                sql.From("tn_Tags")
                .Where("TenantTypeId = @0", tenantTypeId)
                .Where("TagName = @0", tagName);
                var tag = dao.FirstOrDefault <Tag>(sql);
                if (tag == null)
                {
                    sqls.Add(Sql.Builder.Append("insert into tn_Tags (TenantTypeId,TagName,DateCreated) values (@0,@1,@2)", tenantTypeId, tagName, DateTime.UtcNow));
                }
                //增加标签相关统计
                sqls.Add(Sql.Builder.Append("update tn_Tags Set ItemCount = ItemCount + 1 where TenantTypeId = @0 and TagName = @1", tenantTypeId, tagName));
                //创建标签与用户的关联
                sql = Sql.Builder;
                sql.From("tn_TagsInOwners")
                .Where("TenantTypeId = @0", tenantTypeId)
                .Where("TagName = @0", tagName)
                .Where("OwnerId = @0", ownerId);
                var tagInOwner = dao.FirstOrDefault <TagInOwner>(sql);
                if (tagInOwner == null)
                {
                    sqls.Add(Sql.Builder.Append("update tn_Tags Set OwnerCount = OwnerCount + 1 where TenantTypeId = @0 and TagName = @1", tenantTypeId, tagName));
                    dao.Execute(Sql.Builder.Append("insert into tn_TagsInOwners (TenantTypeId,TagName,OwnerId) values (@0,@1,@2)", tenantTypeId, tagName, ownerId));
                    tagInOwner = dao.FirstOrDefault <TagInOwner>(sql);
                }
                else
                {
                    //增加拥有者标签内容项统计
                    sqls.Add(Sql.Builder.Append("update tn_TagsInOwners set ItemCount = ItemCount + 1 where TenantTypeId = @0 and TagName = @1 and OwnerId = @2", tenantTypeId, tagName, ownerId));
                }

                sql = Sql.Builder;
                sql.From("tn_ItemsInTags")
                .Where("TagName = @0", tagName)
                .Where("TagInOwnerId = @0", tagInOwner.Id)
                .Where("ItemId = @0", itemId);

                var itemInTag = dao.FirstOrDefault <ItemInTag>(sql);
                if (itemInTag == null)
                {
                    //创建标签与内容项的关联
                    sqls.Add(Sql.Builder.Append("insert into tn_ItemsInTags (TagName,TagInOwnerId,ItemId,tenantTypeId) select @0,Id,@1,@2 from tn_TagsInOwners", tagName, itemId, tenantTypeId)
                             .Where("TenantTypeId = @0", tenantTypeId)
                             .Where("TagName = @0", tagName)
                             .Where("OwnerId = @0", ownerId));
                }

                //通过事务来控制多条语句执行时的一致性
                using (var transaction = dao.GetTransaction())
                {
                    affectCount = dao.Execute(sqls);
                    transaction.Complete();
                }

                if (affectCount > 0)
                {
                    sql = Sql.Builder;
                    sql.From("tn_TagsInOwners")
                    .Where("TenantTypeId = @0", tenantTypeId)
                    .Where("TagName = @0", tagName)
                    .Where("OwnerId = @0", ownerId);

                    tagInOwner = dao.First <TagInOwner>(sql);
                    if (tagInOwner != null)
                    {
                        EntityData.ForType(typeof(TagInOwner)).RealTimeCacheHelper.IncreaseEntityCacheVersion(tagInOwner.Id);
                    }
                }
            }

            if (tagNames.Length > 0)
            {
                EntityData.ForType(typeof(TagInOwner)).RealTimeCacheHelper.IncreaseAreaVersion("OwnerId", ownerId);
                RealTimeCacheHelper.IncreaseAreaVersion("ItemId", itemId);
                foreach (var tagName in tagNames)
                {
                    if (string.IsNullOrEmpty(tagName))
                    {
                        continue;
                    }
                    RealTimeCacheHelper.IncreaseAreaVersion("TagName", tagName);
                }
            }

            dao.CloseSharedConnection();

            return(affectCount);
        }