/// <inheritdoc/>
        public WorkType UpdateWorkType(WorkTypeUpdateDto dto)
        {
            var now    = DateUtil.Now;
            var entity = _workTypeRepository.Read(new WorkTypeTableEntity {
                WorkTypeId = dto.WorkTypeId
            });

            if (dto.WorkTypeCode != null)
            {
                entity.WorkTypeCode = dto.WorkTypeCode;
            }

            if (dto.WorkTypeTree != null)
            {
                entity.WorkTypeTree = dto.WorkTypeTree;
            }

            if (dto.Name != null)
            {
                entity.Name = dto.Name;
            }

            if (dto.Description != null)
            {
                entity.Description = dto.Description;
            }

            if (dto.Status != null)
            {
                entity.Status = dto.Status;
            }

            if (dto.SortNo != null)
            {
                entity.SortNo = dto.SortNo.Value;
            }

            entity.UpdateTime = now;

            using (var tran = new TransactionScope())
            {
                _workTypeRepository.Update(entity);

                if (dto.Tags != null)
                {
                    _tagRepository.DeleteByTargetId(dto.WorkTypeId);
                    foreach (var tag in dto.Tags)
                    {
                        _tagRepository.Create(new TagTableEntity
                        {
                            TagId       = Guid.NewGuid(),
                            TargetId    = entity.WorkTypeId,
                            Value       = tag,
                            TargetTable = "WorkType",
                            CreateTime  = now,
                        });
                    }
                }

                tran.Complete();
            }
            return(_workTypeQueryService.GetWorkType(entity.WorkTypeId));
        }