public AssetExchangeCreatedEvent(Guid aggregateId, AssetExchange assetExchange, string message)
 {
     AssetName             = assetExchange.AssetName;
     RequestOrgIdentifier  = assetExchange.RequestOrgIdentifier;
     ExchangeOrgIdentifier = assetExchange.ExchangeOrgIdentifier;
     TargetOrgIdentifier   = assetExchange.TargetOrgIdentifier;
     Message     = message;
     AggregateId = aggregateId;
 }
        /// <summary>
        /// 创建一个资产调换
        /// </summary>
        /// <param name="asset"></param>
        /// <param name="user"></param>
        /// <param name="targetOrg"></param>
        /// <param name="exchangeOrg"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public async Task <AssetExchange> CreateAssetExchange(Asset asset, IUser user, Organization targetOrg,
                                                              Organization exchangeOrg, string message)
        {
            asset.StatusChanged(AssetStatus.在途);
            var assetExchange = new AssetExchange(user, targetOrg, exchangeOrg, asset.Id, asset.AssetName,
                                                  message);

            _assetRepository.Update(asset);
            return(await _assetExchangeRepository.AddAsync(assetExchange));
        }
 /// <summary>
 /// 删除资产调换
 /// </summary>
 /// <param name="asset"></param>
 /// <param name="apply"></param>
 public void RemoveAssetExchange(Asset asset, AssetExchange apply)
 {
     //如果这条申请的状态已经是完成状态,那么就直接删除,不用调整资产的状态了。
     if (apply.Status != AuditEntityStatus.已完成)
     {
         asset.StatusChanged(AssetStatus.在用);
         _assetRepository.Update(asset);
     }
     _assetExchangeRepository.Remove(apply);
 }
        /// <summary>
        /// 处理资产调换
        /// </summary>
        /// <param name="asset"></param>
        /// <param name="apply"></param>
        /// <param name="handleMessage"></param>
        /// <returns></returns>
        public async Task HandleAssetExchange(Asset asset, AssetExchange apply, string handleMessage)
        {
            //资产状态变化
            asset.StatusChanged(AssetStatus.在用);
            asset.LastModifyDateTime  = DateTime.Now;
            asset.LatestDeployRecord  = $"从【{asset.StoredOrgIdentifier}】到【{apply.ExchangeOrgIdentifier}】";
            asset.AssetLocation       = "暂无";
            asset.StoredOrgIdentifier = apply.ExchangeOrgIdentifier;
            asset.StoredOrgName       = apply.ExchangeOrgNam;
            //申请状态变化
            apply.Complete(handleMessage);
            //产生一条新的记录
            var deploy = new AssetDeploy()
            {
                Id = Guid.NewGuid(),
                AssetDeployCategory = AssetDeployCategory.资产机构间调配,
                CreateDateTime      = DateTime.Now,
                AssetTagNumber      = asset.AssetTagNumber,
                AssetName           = asset.AssetName,
                AssetId             = asset.Id,
                AssetNo             = asset.AssetNo,
                Org2          = apply.Org2,
                ExportOrgInfo = new OrganizationInfo
                {
                    OrgId         = apply.RequestOrgId,
                    OrgIdentifier = apply.RequestOrgIdentifier,
                    OrgNam        = apply.RequestOrgNam
                },
                ImportOrgInfo = new OrganizationInfo
                {
                    OrgId         = apply.ExchangeOrgId,
                    OrgIdentifier = apply.ExchangeOrgIdentifier,
                    OrgNam        = apply.ExchangeOrgNam
                },
                AuthorizeOrgInfo = new OrganizationInfo
                {
                    OrgId         = apply.TargetOrgId,
                    OrgIdentifier = apply.TargetOrgIdentifier,
                    OrgNam        = apply.TargetOrgNam
                }
            };

            //保存到数据库
            _assetRepository.Update(asset);
            _assetExchangeRepository.Update(apply);
            await _assetDeployRepository.AddAsync(deploy);
        }
 /// <summary>
 /// 撤销资产调换
 /// </summary>
 /// <param name="apply"></param>
 /// <param name="handleMessage"></param>
 public void RevokeAssetExchange(AssetExchange apply, string handleMessage)
 {
     apply.Revoke(handleMessage);
     _assetExchangeRepository.Update(apply);
 }