CampApplicationService.cs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736
  1. using System.Collections.Generic;
  2. using System.Data.Entity;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using System.Web.Mvc;
  6. using Abp.Application.Services.Dto;
  7. using Abp.Auditing;
  8. using Abp.Authorization;
  9. using Abp.Configuration;
  10. using Abp.Domain.Repositories;
  11. using Abp.Domain.Uow;
  12. using Abp.Runtime.Caching;
  13. using IwbZero.Auditing;
  14. using IwbZero.AppServiceBase;
  15. using IwbZero.ToolCommon.StringModel;
  16. using WeApp.Authorization;
  17. using WeApp.BaseInfo;
  18. using WeApp.BasicInfo;
  19. using WeApp.BasicInfo.TrainingRoleGroup.Dto;
  20. using WeApp.Configuration;
  21. using WeApp.Configuration.Cache;
  22. using WeApp.TrainingCamp.Dto;
  23. using WeApp.TrainingCamp.Dto.Package;
  24. using WeEngine.CommonDto.WeInfo;
  25. namespace WeApp.TrainingCamp
  26. {
  27. [AbpAuthorize, AuditLog("演练培训营管理")]
  28. public class CampAppService : IwbAsyncCrudAppService<CampInfo, CampDto, string, IwbPagedRequestDto, CampCreateDto, CampUpdateDto >, ICampAppService
  29. {
  30. public CampAppService(
  31. ICacheManager cacheManager,
  32. IRepository<CampInfo, string> repository, IRepository<CampGroupInfo, string> groupRepository, IRepository<SysAttachFile> attachRepository, IRepository<CampSceneMapInfo> sceneMapRepository, IRepository<TrainingRoleGroupInfo, string> groupRoleRepository, IRepository<CampRelateGroupRoleInfo> crgRepository) : base(repository, "Id")
  33. {
  34. GroupRepository = groupRepository;
  35. AttachRepository = attachRepository;
  36. SceneMapRepository = sceneMapRepository;
  37. GroupRoleRepository = groupRoleRepository;
  38. CrgRepository = crgRepository;
  39. CacheManager = cacheManager;
  40. }
  41. private string DataCenterUrl => SettingManager.GetSettingValue(IwbSettingNames.WeDataCenterIp);
  42. protected override bool KeyIsAuto { get; set; } = false;
  43. protected IRepository<CampGroupInfo,string> GroupRepository { get; }
  44. protected IRepository<TrainingRoleGroupInfo, string> GroupRoleRepository { get; }
  45. protected IRepository<CampRelateGroupRoleInfo> CrgRepository { get; }
  46. protected IRepository<SysAttachFile> AttachRepository { get; }
  47. protected IRepository<CampSceneMapInfo> SceneMapRepository { get; }
  48. #region GetSelect
  49. [DisableAuditing]
  50. public override async Task<List<SelectListItem>> GetSelectList()
  51. {
  52. var list = await Repository.GetAllListAsync();
  53. var sList = new List<SelectListItem> {new SelectListItem {Text = @"请选择...", Value = "", Selected = true}};
  54. foreach (var l in list)
  55. {
  56. sList.Add(new SelectListItem { Value = l.Id, Text = l.Name });
  57. }
  58. return sList;
  59. }
  60. [DisableAuditing]
  61. public override async Task<string> GetSelectStr()
  62. {
  63. var list = await Repository.GetAllListAsync();
  64. string str = "<option value=\"\" selected>请选择...</option>";
  65. foreach (var l in list)
  66. {
  67. str += $"<option value=\"{l.Id}\">{l.Name}</option>";
  68. }
  69. return str;
  70. }
  71. /// <summary>
  72. /// 方案包select
  73. /// </summary>
  74. /// <returns></returns>
  75. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)]
  76. public Task<string> GetPackageSelectStr()
  77. {
  78. var list = CacheManager.GetPackageInfos(DataCenterUrl);
  79. string str = "<option value=\"\" selected>请选择方案包...</option>";
  80. if (list != null && list.Any())
  81. {
  82. foreach (var l in list)
  83. {
  84. str += $"<option value=\"{l.Id}\" data-model-type=\"{l.EngineModelType}\" data-model-name=\"{l.EngineModelName}\">{l.PackageName}</option>";
  85. }
  86. }
  87. return Task.FromResult(str);
  88. }
  89. /// <summary>
  90. /// 附件select
  91. /// </summary>
  92. /// <returns></returns>
  93. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgAttach)]
  94. public async Task<string> GetAttachSelectStr(string no)
  95. {
  96. var list = await AttachRepository.GetAllListAsync(a => a.TableName == "Train" && a.ColumnName == "Camp" && a.SourceKey.StartsWith(no));
  97. string str = "<option value=\"\" selected>请选择附件...</option>";
  98. if (list != null && list.Any())
  99. {
  100. foreach (var l in list)
  101. {
  102. str += $"<option value=\"{l.AttachNo}\" >{l.FileTitle}</option>";
  103. }
  104. }
  105. return str;
  106. }
  107. #endregion
  108. #region CURD
  109. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgCreate)]
  110. public override async Task Create(CampCreateDto input)
  111. {
  112. input.Id = await AppGuidManager.GetNextRecordIdAsync(DataLibType.Camp);
  113. input.CampState = CampStateDefinition.New;
  114. if (input.AssessRoleNames.IsEmpty())
  115. {
  116. input.AssessAuto = false;
  117. }
  118. await CreateEntity(input);
  119. }
  120. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgUpdate)]
  121. public override async Task Update(CampUpdateDto input)
  122. {
  123. if (input.AssessRoleNames.IsEmpty())
  124. {
  125. input.AssessAuto = false;
  126. }
  127. var entity = await CheckEntity(input.Id);
  128. if (input.CampState == CampStateDefinition.Audit && entity.EvalBehaviorTags.IsEmpty())
  129. {
  130. CheckErrors("请先配置好行为评估标签,再通过审核!");
  131. }
  132. if((await CrgRepository.CountAsync(a => a.CampNo == entity.Id)) == 0)
  133. {
  134. CheckErrors("请先配置好角色预案,再通过审核!");
  135. }
  136. await UpdateEntity(input,entity);
  137. }
  138. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgDelete)]
  139. public override async Task Delete(EntityDto<string> input)
  140. {
  141. await CheckEntity(input.Id);
  142. await base.Delete(input);
  143. }
  144. [DisableAuditing]
  145. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)]
  146. public override async Task<PagedResultDto<CampDto>> GetAll(IwbPagedRequestDto input)
  147. {
  148. var query = CreateFilteredQuery(input);
  149. query = ApplyFilter(query, input);
  150. var totalCount = await AsyncQueryableExecuter.CountAsync(query);
  151. query = ApplySorting(query, input);
  152. query = ApplyPaging(query, input);
  153. var entities = await AsyncQueryableExecuter.ToListAsync(query);
  154. var dtoList = new PagedResultDto<CampDto>(totalCount, entities.Select(MapToEntityDto).ToList());
  155. return dtoList;
  156. }
  157. #region GetEntity/Dto
  158. /// <summary>
  159. /// 查询实体Dto
  160. /// </summary>
  161. /// <param name="input"></param>
  162. /// <returns></returns>
  163. [DisableAuditing]
  164. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)]
  165. public override async Task<CampDto> GetDto(EntityDto<string> input)
  166. {
  167. var entity = await GetEntity(input);
  168. return MapToEntityDto(entity);
  169. }
  170. /// <summary>
  171. /// 查询实体Dto
  172. /// </summary>
  173. /// <param name="id"></param>
  174. /// <returns></returns>
  175. [DisableAuditing]
  176. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)]
  177. public override async Task<CampDto> GetDtoById(string id)
  178. {
  179. var entity = await GetEntityById(id);
  180. return MapToEntityDto(entity);
  181. }
  182. /// <summary>
  183. /// 查询实体Dto(需指明自定义字段)
  184. /// </summary>
  185. /// <param name="no"></param>
  186. /// <returns></returns>
  187. [DisableAuditing]
  188. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)]
  189. public override async Task<CampDto> GetDtoByNo(string no)
  190. {
  191. var entity = await GetEntityByNo(no);
  192. return MapToEntityDto(entity);
  193. }
  194. /// <summary>
  195. /// 查询实体
  196. /// </summary>
  197. /// <param name="input"></param>
  198. /// <returns></returns>
  199. [DisableAuditing]
  200. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)]
  201. public override async Task<CampInfo> GetEntity(EntityDto<string> input)
  202. {
  203. var entity = await GetEntityById(input.Id);
  204. return entity;
  205. }
  206. /// <summary>
  207. /// 查询实体
  208. /// </summary>
  209. /// <param name="id"></param>
  210. /// <returns></returns>
  211. [DisableAuditing]
  212. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)]
  213. public override async Task<CampInfo> GetEntityById(string id)
  214. {
  215. return await Repository.FirstOrDefaultAsync(a=>a.Id==id);
  216. }
  217. /// <summary>
  218. /// 查询实体(需指明自定义字段)
  219. /// </summary>
  220. /// <param name="no"></param>
  221. /// <returns></returns>
  222. [DisableAuditing]
  223. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)]
  224. public override async Task<CampInfo> GetEntityByNo(string no)
  225. {
  226. //CheckGetPermission();
  227. if (string.IsNullOrEmpty(KeyFiledName))
  228. {
  229. ThrowError("NoKeyFieldName");
  230. }
  231. return await base.GetEntityByNo(no);
  232. }
  233. #endregion
  234. #region Hide
  235. ///// <summary>
  236. ///// 根据给定的<see cref="IwbPagedRequestDto"/>创建 <see cref="IQueryable{CampInfo}"/>过滤查询.
  237. ///// </summary>
  238. ///// <param name="input">The input.</param>
  239. //protected override IQueryable<CampInfo> CreateFilteredQuery(IwbPagedRequestDto input)
  240. //{
  241. // var query = Repository.GetAll();
  242. // var pagedInput = input as IIwbPagedRequest;
  243. // if (pagedInput == null)
  244. // {
  245. // return query;
  246. // }
  247. // if (!string.IsNullOrEmpty(pagedInput.KeyWords))
  248. // {
  249. // object keyWords = pagedInput.KeyWords;
  250. // LambdaObject obj = new LambdaObject()
  251. // {
  252. // FieldType = (LambdaFieldType)pagedInput.FieldType,
  253. // FieldName = pagedInput.KeyField,
  254. // FieldValue = keyWords,
  255. // ExpType = (LambdaExpType)pagedInput.ExpType
  256. // };
  257. // var exp = obj.GetExp<CampInfo>();
  258. // query = exp != null ? query.Where(exp) : query;
  259. // }
  260. // if (pagedInput.SearchList != null && pagedInput.SearchList.Count > 0)
  261. // {
  262. // List<LambdaObject> objList = new List<LambdaObject>();
  263. // foreach (var o in pagedInput.SearchList)
  264. // {
  265. // if (string.IsNullOrEmpty(o.KeyWords))
  266. // continue;
  267. // object keyWords = o.KeyWords;
  268. // objList.Add(new LambdaObject
  269. // {
  270. // FieldType = (LambdaFieldType)o.FieldType,
  271. // FieldName = o.KeyField,
  272. // FieldValue = keyWords,
  273. // ExpType = (LambdaExpType)o.ExpType
  274. // });
  275. // }
  276. // var exp = objList.GetExp<CampInfo>();
  277. // query = exp != null ? query.Where(exp) : query;
  278. // }
  279. // return query;
  280. //}
  281. //protected override IQueryable<CampInfo> ApplySorting(IQueryable<CampInfo> query, IwbPagedRequestDto input)
  282. //{
  283. // return query.OrderBy(a => a.No);
  284. //}
  285. //protected override IQueryable<CampInfo> ApplyPaging(IQueryable<CampInfo> query, IwbPagedRequestDto input)
  286. //{
  287. // if (input is IPagedResultRequest pagedInput)
  288. // {
  289. // return query.Skip(pagedInput.SkipCount).Take(pagedInput.MaxResultCount);
  290. // }
  291. // return query;
  292. //}
  293. #endregion
  294. #endregion
  295. #region CampGroup
  296. /// <summary>
  297. /// 检查方案包是否分组
  298. /// </summary>
  299. /// <returns></returns>
  300. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgGroup), DisableAuditing]
  301. public async Task<string> CheckCampGroup(string no)
  302. {
  303. using (CurrentUnitOfWork.DisableFilter(AbpDataFilters.SoftDelete))
  304. {
  305. if ((await GroupRepository.GetAllListAsync(a => a.CampNo == no)).Any())
  306. {
  307. return $"/Train/CampGroup/{no}";
  308. }
  309. }
  310. return "";
  311. }
  312. /// <summary>
  313. /// 方案包分组
  314. /// </summary>
  315. /// <returns></returns>
  316. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgGroup), AuditLog("方案包分组")]
  317. public async Task<string> Group(GroupCreateDto input)
  318. {
  319. var entity = await CheckEntity(input.CampNo);
  320. for (int i = 1; i <= input.Count; i++)
  321. {
  322. var group = new CampGroupInfo()
  323. {
  324. CampNo = input.CampNo,
  325. Id = $"{input.CampNo}_{i.LeftPad(3)}",
  326. Name = $"第{i}组",
  327. CampGroupState = CampGroupStateDefinition.New,
  328. };
  329. await GroupRepository.InsertAsync(group);
  330. }
  331. return $"/Train/CampGroup/{entity.Id}";
  332. }
  333. #endregion
  334. #region Attach
  335. /// <summary>
  336. /// 配置附件
  337. /// </summary>
  338. /// <returns></returns>
  339. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgAttach), DisableAuditing]
  340. public async Task<string> CheckAttach(string no)
  341. {
  342. var entity = await CheckEntity(no);
  343. return $"/Train/CampAttach/{entity.Id}";
  344. }
  345. /// <summary>
  346. /// 配置附件
  347. /// </summary>
  348. /// <returns></returns>
  349. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgAttach), AuditLog("配置附件")]
  350. public async Task AttachFile(CampSceneAttachDto input)
  351. {
  352. var entity = await CheckEntity(input.CampNo);
  353. var sceneAttach = await
  354. SceneMapRepository.FirstOrDefaultAsync(a => a.CampNo == entity.Id && a.SceneNo == input.SceneNo);
  355. if (sceneAttach == null)
  356. {
  357. sceneAttach = new CampSceneMapInfo()
  358. {
  359. CampNo = input.CampNo,
  360. SceneNo = input.SceneNo,
  361. SceneName = input.SceneName,
  362. AttachNos = input.AttachNos
  363. };
  364. await SceneMapRepository.InsertAsync(sceneAttach);
  365. }
  366. else
  367. {
  368. sceneAttach.AttachNos = input.AttachNos;
  369. await SceneMapRepository.UpdateAsync(sceneAttach);
  370. await CurrentUnitOfWork.SaveChangesAsync();
  371. await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).RemoveAsync($"{entity.Id}-{input.SceneNo}");
  372. await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).RemoveAsync($"A-{entity.Id}-{input.SceneNo}");
  373. }
  374. }
  375. /// <summary>
  376. /// 删除情景附件
  377. /// </summary>
  378. /// <returns></returns>
  379. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgAttach), AuditLog("删除情景附件")]
  380. public async Task DeleteAttach(string no)
  381. {
  382. var sceneAttach = await SceneMapRepository.FirstOrDefaultAsync(a => a.AttachNos.Contains(no));
  383. if (sceneAttach != null)
  384. {
  385. CheckErrors($"此附件已被配置,无法删除!");
  386. return;
  387. }
  388. await AttachRepository.DeleteAsync(a => a.AttachNo == no);
  389. }
  390. /// <summary>
  391. /// 获取培训营相关附件
  392. /// </summary>
  393. /// <param name="input"></param>
  394. /// <param name="no"></param>
  395. /// <returns></returns>
  396. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgAttach), DisableAuditing]
  397. public async Task<PagedResultDto<CampSceneAttachDto>> GetSceneAttaches(IwbPagedRequestDto input, string no)
  398. {
  399. //var no = input.SearchList?.FirstOrDefault(a=>a.KeyField=="CampNo")?.KeyWords??"";
  400. var entity = await CheckEntity(no);
  401. var sceneAttach = await SceneMapRepository.GetAllListAsync(a => a.CampNo == no);
  402. var package = GetPackageDetail(entity.PackageNo);
  403. var scenes = package.Scenes;
  404. var totalCount = scenes.Count;
  405. var query = scenes.AsQueryable();
  406. scenes = ApplyFilter(query, input).ToList();
  407. scenes = scenes.OrderBy(a => a.Id).Skip(input.SkipCount).Take(input.MaxResultCount).ToList();
  408. var dtoList = new List<CampSceneAttachDto>();
  409. foreach (var scene in scenes)
  410. {
  411. var dto = new CampSceneAttachDto()
  412. {
  413. SceneNo = scene.Id,
  414. SceneName = scene.Name,
  415. CampNo = no,
  416. CampName = entity.Name
  417. };
  418. var sceneMap = sceneAttach.FirstOrDefault(a => a.SceneNo == scene.Id);
  419. if (sceneMap != null)
  420. {
  421. dto.AttachNos = sceneMap.AttachNos;
  422. dto.AttachInfos = new List<CampAttachDto>();
  423. var arr = sceneMap.AttachNos?.Split(',');
  424. if (arr != null)
  425. {
  426. foreach (var aNo in arr)
  427. {
  428. var attach = await AttachRepository.FirstOrDefaultAsync(a => a.AttachNo == aNo);
  429. if (attach != null)
  430. {
  431. dto.AttachInfos.Add(new CampAttachDto()
  432. { AttachNo = aNo, CampNo = no,FileType = attach.FileType, FileTitle = attach.FileTitle, FileName = attach.FileName, FilePath = attach.FilePath });
  433. }
  434. }
  435. }
  436. }
  437. dtoList.Add(dto);
  438. }
  439. return new PagedResultDto<CampSceneAttachDto>(totalCount, dtoList);
  440. }
  441. /// <summary>
  442. /// 获取培训营相关附件
  443. /// </summary>
  444. /// <param name="input"></param>
  445. /// <param name="no"></param>
  446. /// <returns></returns>
  447. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgAttach), DisableAuditing]
  448. public async Task<PagedResultDto<CampAttachDto>> GetAttachFiles(IwbPagedRequestDto input, string no)
  449. {
  450. //var no = input.SearchList?.FirstOrDefault(a=>a.KeyField=="CampNo")?.KeyWords??"";
  451. var query = AttachRepository.GetAll()
  452. .Where(a => a.TableName == "Train" && a.ColumnName == "Camp" && a.SourceKey.StartsWith(no)).Select(a =>
  453. new CampAttachDto()
  454. {
  455. AttachNo = a.AttachNo,
  456. CampNo = no,
  457. FileName = a.FileName,
  458. FilePath = a.FilePath,
  459. FileType = a.FileType,
  460. FileTitle = a.FileTitle,
  461. FileExt = a.FileExt
  462. });
  463. query = ApplyFilter(query, input);
  464. var totalCount = await AsyncQueryableExecuter.CountAsync(query);
  465. query = query.OrderBy(a => a.CampNo);
  466. query = query.Skip(input.SkipCount).Take(input.MaxResultCount);
  467. var entities = await query.ToListAsync();
  468. return new PagedResultDto<CampAttachDto>(totalCount, entities);
  469. }
  470. #endregion
  471. #region Tag
  472. /// <summary>
  473. /// 配置标签
  474. /// </summary>
  475. /// <returns></returns>
  476. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgTag), DisableAuditing]
  477. public async Task<CampTagDto> GetBehaviorTags(string no)
  478. {
  479. var entity = await CheckEntity(no);
  480. var dto = new CampTagDto()
  481. {
  482. CampNo = no,
  483. BehaviorTagNos = entity.EvalBehaviorTags,
  484. };
  485. var package = GetPackageDetail(entity.PackageNo);
  486. dto.AllTags = package.BehaviorTags.IwbDistinct(a => a.TagNo).OrderBy(a=>a.TagNo).ToList();
  487. return dto;
  488. }
  489. /// <summary>
  490. /// 配置标签
  491. /// </summary>
  492. /// <returns></returns>
  493. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgTag), AuditLog("配置标签")]
  494. public async Task BehaviorTag(CampTagDto input)
  495. {
  496. if (input.BehaviorTagNos.IsEmpty())
  497. {
  498. CheckErrors("至少选择一个评估标签!");
  499. }
  500. var entity = await CheckEntity(input.CampNo);
  501. entity.EvalBehaviorTags = input.BehaviorTagNos;
  502. await Repository.UpdateAsync(entity);
  503. await CacheManager.GetCache(IwbCacheNames.CampInfoCache).RemoveAsync($"TAG{input.CampNo}");
  504. }
  505. #endregion
  506. #region RoleGroup
  507. /// <summary>
  508. /// 获取全部角色预案
  509. /// </summary>
  510. /// <returns></returns>
  511. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgRole),DisableAuditing]
  512. public async Task<CampRoleGroupDto> GetGroupRoles(string no)
  513. {
  514. var entity = await CheckEntity(no);
  515. var roleGroups = (await GroupRoleRepository.GetAllListAsync()).Select(ObjectMapper.Map<TrainingRoleGroupDto>).ToList();
  516. var roleGroupNos = await CrgRepository.GetAll().Where(a => a.CampNo == entity.Id).Select(a => a.RoleGroupNo)
  517. .ToListAsync();
  518. var dto= new CampRoleGroupDto()
  519. {
  520. AllGroups = roleGroups,
  521. CampNo = no,
  522. GroupNos = roleGroupNos
  523. };
  524. return dto;
  525. }
  526. /// <summary>
  527. /// 角色预案
  528. /// </summary>
  529. /// <returns></returns>
  530. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgRole), AuditLog("角色预案")]
  531. public async Task RoleGroup(CampRoleGroupDto input)
  532. {
  533. var entity = await CheckEntity(input.CampNo);
  534. if (input.GroupNos!=null&& input.GroupNos.Any())
  535. {
  536. var oldGroupNos = await CrgRepository.GetAll().Where(a => a.CampNo == entity.Id).Select(a => a.RoleGroupNo).ToListAsync();
  537. foreach (var no in input.GroupNos)
  538. {
  539. if (oldGroupNos.Contains(no))
  540. {
  541. oldGroupNos.Remove(no);
  542. }
  543. else
  544. {
  545. var cgr= new CampRelateGroupRoleInfo()
  546. {
  547. CampNo = entity.Id,
  548. RoleGroupNo = no,
  549. };
  550. await CrgRepository.InsertAsync(cgr);
  551. }
  552. }
  553. if (oldGroupNos.Any())
  554. {
  555. await CrgRepository.DeleteAsync(a => oldGroupNos.Contains(a.RoleGroupNo));
  556. }
  557. }
  558. else
  559. {
  560. CheckErrors("至少选择一个角色预案!");
  561. }
  562. }
  563. #endregion
  564. private async Task<CampInfo> CheckEntity(string no)
  565. {
  566. var entity = await Repository.FirstOrDefaultAsync(a => a.Id == no);
  567. if (entity == null)
  568. {
  569. CheckErrors($"未查询编号为【{no}】到培训营!");
  570. return null;
  571. }
  572. if (entity.CampState != CampStateDefinition.New && entity.CampState != CampStateDefinition.Audit)
  573. {
  574. CheckErrors("培训营已运行,不能操作!");
  575. }
  576. return entity;
  577. }
  578. #region Package
  579. /// <summary>
  580. /// 查询方案包配置信息
  581. /// </summary>
  582. /// <param name="id"></param>
  583. /// <param name="packageNo"></param>
  584. /// <returns></returns>
  585. public async Task<PackageSettingDto> GetPackageSetting(string id, string packageNo)
  586. {
  587. var dto = new PackageSettingDto();
  588. if (packageNo.IsEmpty())
  589. {
  590. CheckErrors($"方案包编号不能为空!");
  591. return null;
  592. }
  593. var package = CacheManager.GetPackageInfo(packageNo,DataCenterUrl);
  594. dto.AllRoles = package.AllRoles;
  595. dto.AssessAuto = package.AssessAuto;
  596. dto.AssessRoleNames = package.AssessRoleNames;
  597. dto.RoundScore = 0;
  598. dto.Variable = package.Variable;
  599. if (id.IsNotEmpty() && id != "none")
  600. {
  601. var entity = await Repository.FirstOrDefaultAsync(a => a.Id == id);
  602. if (entity == null)
  603. {
  604. CheckErrors($"未查询编号为【{id}】到培训营!");
  605. return null;
  606. }
  607. if (entity.PackageNo == packageNo)
  608. {
  609. dto.AssessAuto = entity.AssessAuto;
  610. dto.AssessRoleNames = entity.AssessRoleNames;
  611. dto.RoundScore = entity.RoundScore == 0 ? dto.RoundScore : entity.RoundScore;
  612. dto.Variable = entity.Variable.IsEmpty() ? dto.Variable : entity.Variable;
  613. }
  614. }
  615. return dto;
  616. }
  617. /// <summary>
  618. /// 方案包详情
  619. /// </summary>
  620. /// <param name="no"></param>
  621. /// <returns></returns>
  622. [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)]
  623. public WePackageDetailDto GetPackageDetail(string no)
  624. {
  625. var dto = CacheManager.GetPackageDetail(no, DataCenterUrl);
  626. return dto;
  627. //return await CacheManager.GetCache(IwbCacheNames.PackageInfoCache).GetAsync($"PD{no}", async () =>
  628. //{
  629. // var url =
  630. // $"{(await SettingManager.GetSettingValueAsync(IwbSettingNames.WeDataCenterIp)).Ew("/")}api/services/WePlatform/WePackage/GetPackageDetail?no={no}";
  631. // var result = url.RequestPost("");
  632. // var dto = result.Str2Obj<PackageDetailDto>();
  633. // return dto;
  634. //});
  635. }
  636. ///// <summary>
  637. ///// 方案包信息
  638. ///// </summary>
  639. ///// <param name="no"></param>
  640. ///// <returns></returns>
  641. //[AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)]
  642. //private async Task<PackageInfoDto> GetPackageInfo(string no)
  643. //{
  644. // return await CacheManager.GetCache(IwbCacheNames.PackageInfoCache).GetAsync($"PI{no}", async () =>
  645. // {
  646. // var url =
  647. // $"{(await SettingManager.GetSettingValueAsync(IwbSettingNames.WeDataCenterIp)).Ew("/")}api/services/WePlatform/WePackage/GetPackageInfo?no={no}";
  648. // var result = url.RequestPost("");
  649. // var dto = result.Str2Obj<PackageInfoDto>();
  650. // return dto;
  651. // });
  652. //}
  653. ///// <summary>
  654. ///// 获取全部方案包
  655. ///// </summary>
  656. ///// <returns></returns>
  657. //private async Task<List<PackageInfoDto>> GetPackageInfos()
  658. //{
  659. // return await CacheManager.GetCache(IwbCacheNames.PackageInfoCache).GetAsync("ALL", async () =>
  660. // {
  661. // var url =
  662. // $"{(await SettingManager.GetSettingValueAsync(IwbSettingNames.WeDataCenterIp)).Ew("/")}api/services/WePlatform/WePackage/GetPackageInfos";
  663. // var result = url.RequestPost("");
  664. // var list = result.Str2Obj<List<PackageInfoDto>>();
  665. // return list;
  666. // });
  667. //}
  668. #endregion
  669. }
  670. }