using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
using Abp.Auditing;
using Abp.Domain.Repositories;
using Abp.Runtime.Caching;
using WeEngine.CommonDto.WeInfo;
using WePlatform.Configuration;
using WePlatform.WeLib;
using WePlatform.WeLib.Package;
namespace WePlatform.DataCenter.Package
{
///
/// 方案包API
///
[DisableAuditing]
public class WePackageAppService:DataCenterAppServiceBase, IWePackageAppService
{
public WePackageAppService(IRepository xmlRepository, IRepository packageRepository, PackageAppService packageApp,ICacheManager cacheManager, IRepository flowRepository, IRepository sceneRepository)
{
XmlRepository = xmlRepository;
PackageRepository = packageRepository;
PackageApp = packageApp;
FlowRepository = flowRepository;
SceneRepository = sceneRepository;
CacheManager = cacheManager;
}
protected IRepository XmlRepository { get; }
protected IRepository PackageRepository { get; }
protected IRepository FlowRepository { get; }
protected IRepository SceneRepository { get; }
protected PackageAppService PackageApp { get; }
///
/// 获取全部方案包
///
///
public async Task> GetPackageInfos()
{
var list = await PackageRepository
.GetAllIncluding(a => a.SceneCategoryInfo, a => a.EngineModelInfo,
a => a.EngineModelInfo.EngineInfo).Where(a => a.PackageState == PackageStateDefinition.Solidified)
.Select(a => new WePackageDto()
{
Id = a.Id,
PackageName = a.PackageName,
SceneCategory = a.SceneCategory,
SceneCategoryName = a.SceneCategoryInfo.CategoryName,
Variable = a.Variable,
EngineModelNo = a.EngineModelNo,
EngineModelName = a.EngineModelInfo.ModelName,
EngineModelType = a.EngineModelInfo.ModelType,
AssessRoleNames = a.AssessRoleNames,
AssessAuto = a.AssessAuto
}).ToListAsync();
return list;
}
///
/// 查询方案包信息
///
/// 方案包编号
///
public async Task GetPackageInfo(string no)
{
var result = await CacheManager.GetCache(IwbCacheNames.PackageCache).GetAsync($"P{no}", async () =>
{
var dto = await PackageRepository
.GetAllIncluding(a => a.SceneCategoryInfo, a => a.EngineModelInfo,
a => a.EngineModelInfo.EngineInfo).Where(a=>a.PackageState==PackageStateDefinition.Solidified)
.Select(a => new WePackageDto()
{
Id = a.Id,
PackageName = a.PackageName,
SceneCategory = a.SceneCategory,
SceneCategoryName = a.SceneCategoryInfo.CategoryName,
Variable = a.Variable,
EngineModelNo = a.EngineModelNo,
EngineModelName = a.EngineModelInfo.ModelName,
EngineModelType = a.EngineModelInfo.ModelType,
AssessRoleNames = a.AssessRoleNames,
AssessAuto = a.AssessAuto
})
.FirstOrDefaultAsync(a => a.Id == no);
if (dto == null)
{
CheckErrors($"未查询到编号为【{no}】的方案包信息!");
return null;
}
dto.AllRoles = await PackageApp.GetPackageRoleLists(no);
return dto;
});
return result;
}
///
/// 查询方案包XML信息
///
/// 方案包编号
///
public async Task GetPackageXml(string no)
{
var result = await CacheManager.GetCache(IwbCacheNames.PackageCache).GetAsync($"PX{no}", async () =>
{
var xmlEntity = await XmlRepository.FirstOrDefaultAsync(a => a.PackageNo == no);
if (xmlEntity == null)
{
CheckErrors($"未查询到编号为【{no}】的方案包详情,请确认方案包已固化!");
return null;
}
var dto = new WePackageXmlDto()
{
PackageNo = xmlEntity.PackageNo,
PackageXml = xmlEntity.PackageXml,
FlowXml = xmlEntity.FlowXml,
SceneXml = xmlEntity.SceneXml,
BehaviorXml = xmlEntity.BehaviorXml,
ComponentXml = xmlEntity.ComponentXml,
EnvironResourceXml = xmlEntity.EnvironResourceXml,
GuideXml = xmlEntity.GuideXml,
AllRoles = xmlEntity.AllRoles
};
return dto;
});
return result;
}
///
/// 查询方案包详情
///
/// 方案包编号
///
public async Task GetPackageDetail(string no)
{
var detail = await PackageApp.GetSolidifiedPackageDetail(no);
if (detail == null)
{
return null;
}
var dto= new WePackageDetailDto()
{
PackageNo = detail.PackageNo,
AssessRoleNames = detail.AssessRoleNames,
AllRoleNames = string.Join(",", detail.AllRoles.Select(a => a.ToString()).ToArray()),
Detail = new WePackageDto()
{
Id = detail.Detail.Id,
PackageName = detail.Detail.PackageName,
SceneCategory = detail.Detail.SceneCategory,
SceneCategoryName = detail.Detail.SceneCategoryName,
EngineModelNo = detail.Detail.EngineModelNo,
EngineModelType = detail.Detail.EngineModelType,
EngineModelName = detail.Detail.EngineModelName,
AllRoles = detail.AllRoles,
AssessAuto = detail.Detail.AssessAuto,
AssessRoleNames = detail.Detail.AssessRoleNames,
Variable= detail.Detail.Variable
},
Scenes = detail.Scenes,
Behaviors = detail.Behaviors,
Guides = detail.Guides,
EnvironResources = detail.EnvironResources,
};
return dto;
}
}
}