Media.razor.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. using AI.Platform.Core;
  2. using AI.Platform.Core.Entity.Media;
  3. using AI.Platform.Core.Entity.Site;
  4. using AI.Platform.Page.Pages.Media.Model;
  5. using AI.Platform.Page.Pages.Site.Model;
  6. using AntDesign;
  7. using AntDesign.TableModels;
  8. using Dm.util;
  9. using Microsoft.AspNetCore.Components;
  10. using Microsoft.AspNetCore.Components.Forms;
  11. using Microsoft.JSInterop;
  12. using SqlSugar;
  13. using System.Data.Common;
  14. using System.Text.Json;
  15. using System.Threading.Tasks;
  16. namespace AI.Platform.Page.Pages.Media;
  17. public partial class Media
  18. {
  19. /// <summary>
  20. ///
  21. /// </summary>
  22. [Inject] NavigationManager NavigationManager { get; set; }
  23. /// <summary>
  24. /// 数据库仓储
  25. /// </summary>
  26. [Inject] SqlSugarRepository<MediaEntity> _Repository { get; set; }
  27. [Inject] SqlSugarRepository<SiteEntity> _SiteRepository { get; set; }
  28. /// <summary>
  29. ///
  30. /// </summary>
  31. [Inject] IJSRuntime IJSRuntime { get; set; }
  32. /// <summary>
  33. ///
  34. /// </summary>
  35. private ITable _Table;
  36. /// <summary>
  37. ///
  38. /// </summary>
  39. private IEnumerable<SystemMenu> _SelectedRows = [];
  40. /// <summary>
  41. /// 广告列表信息
  42. /// </summary>
  43. private List<MediaInfoModel> _DataSource;
  44. /// <summary>
  45. ///
  46. /// </summary>
  47. private int Pi = 1;
  48. /// <summary>
  49. ///
  50. /// </summary>
  51. private int Ps = 20;
  52. /// <summary>
  53. /// 总条数
  54. /// </summary>
  55. private int Total = 0;
  56. /// <summary>
  57. /// 加载
  58. /// </summary>
  59. private bool Loading = false;
  60. /// <summary>
  61. /// 查询过滤条件
  62. /// </summary>
  63. private FilterData filterData { set; get; } = new();
  64. /// <summary>
  65. /// 编辑弹窗
  66. /// </summary>
  67. private UpdateMediaDialog updateMediaDialog { set; get; } = new();
  68. /// <summary>
  69. /// 标识弹窗是否显示
  70. /// </summary>
  71. private bool isOpen { set; get; } = false;
  72. private MediaDialogModel model = new MediaDialogModel();
  73. // <summary>
  74. /// 站点
  75. /// </summary>
  76. private List<SiteInfo> Sites;
  77. /// <summary>
  78. /// 打开编辑弹窗
  79. /// </summary>
  80. /// <param name="type">类型:1:新增;2:编辑;3:删除</param>
  81. /// <param name="media">广告信息</param>
  82. /// <returns></returns>
  83. private async Task ShowDialog(int type, MediaInfoModel? media)
  84. {
  85. model = new MediaDialogModel();
  86. model.Type = type;
  87. model.siteInfos = Sites;
  88. var siteinfo = Sites.Find(it => it.Id == Global.CurrentUser.SiteId);
  89. if (type ==1 && siteinfo != null)
  90. {
  91. model.GroupID = siteinfo.ParentId;
  92. model.BusinessUnitID = siteinfo.Id;
  93. }
  94. if (type == 2 || type == 3)
  95. {
  96. model.Id = media?.Id;
  97. model.GroupID = media?.GroupID ?? -1;
  98. model.BusinessUnitID = media?.BusinessUnitID ?? -1;
  99. model.FileName = media?.FileName ?? "";
  100. model.GuidFileName = media?.GuidFileName ?? "";
  101. model.FileExtension = media?.FileExtension ?? "";
  102. model.SavePath = media?.SavePath ?? "";
  103. model.MediaUploader = media?.MediaUploader ?? "";
  104. model.StartTime = media?.StartTime;
  105. model.EndTime = media?.EndTime;
  106. model.EffecitiveTime = media?.EffecitiveTime;
  107. model.FailureTime = media?.FailureTime;
  108. model.MediaState = media?.MediaState ?? 0;
  109. model.MachineStateList = JsonSerializer.Deserialize<List<string>>(media?.MachineStateList ?? "[]");
  110. model.Remark = media?.Remark ?? "";
  111. }
  112. isOpen = true;
  113. }
  114. /// <summary>
  115. /// 编辑弹窗信息回调
  116. /// </summary>
  117. /// <param name="model"></param>
  118. private async Task OnDialogCallback(MediaDialogModel model)
  119. {
  120. Console.WriteLine(model);
  121. switch (model.Type)
  122. {
  123. case 1:
  124. await _Repository.InsertAsync(model.ToCompany());
  125. break;
  126. case 2:
  127. MediaEntity mediaEntity = model.ToCompany();
  128. await _Repository.Context.Updateable(mediaEntity).
  129. UpdateColumns(it => new { it.GroupId,it.BusinessUnitId, it.MediaState,it.MachineState, it.StartTime, it.EndTime ,it.EffectiveTime,it.FailureTime,it.Remark })
  130. .ExecuteCommandAsync();
  131. break;
  132. case 3:
  133. await _Repository.DeleteByIdAsync(model.Id);
  134. if(model.SavePath.IsNotNullOrEmpty())
  135. {
  136. File.Delete(model.SavePath);
  137. }
  138. break;
  139. }
  140. await Query();
  141. }
  142. /// <summary>
  143. /// 编辑弹窗是否显示回调
  144. /// </summary>
  145. /// <param name="isOpen"></param>
  146. private void OnDialogVisibleCallback(bool isOpen)
  147. {
  148. this.isOpen = isOpen;
  149. }
  150. private async Task searchSitesAsync()
  151. {
  152. if (Global.CurrentUser.Account == "admin")
  153. {
  154. Sites = await _SiteRepository.AsQueryable()
  155. .Select<SiteInfo>()
  156. .ToListAsync();
  157. }
  158. else
  159. {
  160. Sites = await _SiteRepository.AsQueryable()
  161. .Where(it => it.Id == Global.CurrentUser.SiteId || it.ParentId == Global.CurrentUser.SiteId)
  162. .Select<SiteInfo>()
  163. .ToListAsync();
  164. }
  165. }
  166. /// <summary>
  167. /// 表格查询
  168. /// </summary>
  169. /// <param name="query"></param>
  170. /// <returns></returns>
  171. private async Task OnChange(QueryModel<MediaInfoModel> query)
  172. => await Query();
  173. /// <summary>
  174. /// 查
  175. /// </summary>
  176. /// <returns></returns>
  177. private async Task Query()
  178. {
  179. Loading = true;
  180. var query = _Repository.AsQueryable()
  181. .LeftJoin<SiteEntity>((media,site) => media.BusinessUnitId == site.Id)
  182. .WhereIF(filterData.searchFileName != null, media => media.FileName.Contains(filterData.searchFileName))
  183. .WhereIF(filterData.searchMediaUploader != null, media => media.Uploader.Contains(filterData.searchMediaUploader))
  184. .WhereIF(filterData.searchMediaState != null && filterData.searchMediaState != -1, media => media.MediaState == filterData.searchMediaState)
  185. .WhereIF(filterData.searchStartTime != null && filterData.searchEndTime != null, media => media.StartTime >= filterData.searchStartTime && media.EndTime <= filterData.searchEndTime)
  186. .WhereIF(filterData.searchEffecitiveTime != null && filterData.searchFailureTime != null, media => media.EffectiveTime >= filterData.searchEffecitiveTime && media.FailureTime <= filterData.searchFailureTime)
  187. .WhereIF(filterData.searchStartEditTime != null && filterData.searchEndEditTime != null, media => media.EditTime >= filterData.searchStartEditTime && media.EditTime <= filterData.searchEndEditTime);
  188. if (filterData.searchMachineStateList.IsNotNullOrEmpty())
  189. {
  190. Expressionable<MediaEntity> expressionable = Expressionable.Create<MediaEntity>();
  191. foreach (var state in filterData.searchMachineStateList)
  192. {
  193. var jsonQuoted = $"\"{state}\"";
  194. expressionable.Or(m => m.MachineState.Contains(jsonQuoted));
  195. }
  196. query = query.Where(expressionable.ToExpression());
  197. }
  198. Total = await query.CountAsync();
  199. _DataSource = await query
  200. .Select((media, site) => new MediaInfoModel()
  201. {
  202. Id = media.Id,
  203. GroupID = media.GroupId,
  204. BusinessUnitID = media.BusinessUnitId,
  205. SavePath = media.LocalPath,
  206. FileName = media.FileName,
  207. GuidFileName = media.GuidFileName,
  208. FileExtension = media.FileExtension,
  209. MediaUploader = media.Uploader,
  210. MachineStateList = media.MachineState,
  211. MediaState = media.MediaState,
  212. SiteName = site.Name,
  213. StartTime = media.StartTime,
  214. EndTime = media.EndTime,
  215. EffecitiveTime = media.EffectiveTime,
  216. FailureTime = media.FailureTime,
  217. EditTime = media.EditTime,
  218. Remark = media.Remark,
  219. })
  220. .OrderByDescending(media => media.EditTime)
  221. .Skip((filterData.currentPage - 1) * filterData.pageSize)
  222. .Take(filterData.pageSize)
  223. .ToListAsync();
  224. Loading = false;
  225. }
  226. Func<PaginationTotalContext, string> showTotal = ctx => $"总数 {ctx.Total} ";
  227. private async Task OnPageChange(PaginationEventArgs args)
  228. {
  229. filterData.pageSize = args.PageSize;
  230. filterData.currentPage = args.Page;
  231. await Query();
  232. }
  233. /// <summary>
  234. /// 清空查询条件
  235. /// </summary>
  236. private void HandleReset()
  237. {
  238. filterData = new();
  239. }
  240. /// <summary>
  241. /// 单选选择器选择事件
  242. /// </summary>
  243. /// <param name="value">选择的值</param>
  244. private void OnSelectItemChange(string value)
  245. {
  246. Console.WriteLine(value);
  247. int state = -1;
  248. int.TryParse(value, out state);
  249. filterData.searchMediaState = state;
  250. }
  251. /// <summary>
  252. /// 多选选择器选择事件
  253. /// </summary>
  254. /// <param name="values">选择的值</param>
  255. private void OnSelectItemsChange(IEnumerable<string> values)
  256. {
  257. Console.WriteLine(values);
  258. filterData.searchMachineStateList = values.ToList();
  259. }
  260. /// <summary>
  261. /// 日期选择器选择回调
  262. /// </summary>
  263. /// <param name="value">选择的日期</param>
  264. /// <param name="type">1:有效时间段;2:更新时间;3:播放时段</param>
  265. private void onDateChage(DateRangeChangedEventArgs<DateTime?[]> value,int type)
  266. {
  267. switch (type)
  268. {
  269. case 1:
  270. filterData.searchEffecitiveTime = value.Dates[0];
  271. filterData.searchFailureTime = value.Dates[1];
  272. break;
  273. case 2:
  274. filterData.searchStartEditTime = value.Dates[0];
  275. filterData.searchEndEditTime = value.Dates[1];
  276. break;
  277. case 3:
  278. DateTime? startTime = value.Dates[0];
  279. DateTime? endTime = value.Dates[1];
  280. filterData.searchStartTime = startTime?.Hour;
  281. filterData.searchEndTime = endTime?.Hour;
  282. break;
  283. }
  284. }
  285. protected override async void OnInitialized()
  286. {
  287. }
  288. protected override async Task OnAfterRenderAsync(bool firstRender)
  289. {
  290. if (firstRender)
  291. {
  292. await NavigationManager.RedirectLogin(IJSRuntime);
  293. await Query();
  294. await searchSitesAsync();
  295. }
  296. }
  297. private async Task OnChange(QueryModel<SystemMenu> query)
  298. => await Query();
  299. /// <summary>
  300. /// 查找条件
  301. /// </summary>
  302. public class FilterData
  303. {
  304. /// <summary>
  305. /// 页码
  306. /// </summary>
  307. public int currentPage { set; get; } = 1;
  308. /// <summary>
  309. /// 页数
  310. /// </summary>
  311. public int pageSize { set; get; } = 10;
  312. /// <summary>
  313. /// 要查找的文件名
  314. /// </summary>
  315. public string? searchFileName { set; get; }
  316. /// <summary>
  317. /// 要查找文件开始播放时间
  318. /// </summary>
  319. public int? searchStartTime { set; get; }
  320. /// <summary>
  321. /// 要查找文件结束播放时间
  322. /// </summary>
  323. public int? searchEndTime { set; get; }
  324. /// <summary>
  325. /// 要查找文件生效时间
  326. /// </summary>
  327. public DateTime? searchEffecitiveTime { set; get; }
  328. /// <summary>
  329. /// 要查找文件失效时间
  330. /// </summary>
  331. public DateTime? searchFailureTime { set; get; }
  332. /// <summary>
  333. /// 要查找文件油机状态
  334. /// </summary>
  335. public List<string>? searchMachineStateList { set; get; }
  336. /// <summary>
  337. /// 要查找文件广告状态 0:禁用;1:可用
  338. /// </summary>
  339. public int? searchMediaState { set; get; }
  340. /// <summary>
  341. /// 要查找文件上传人
  342. /// </summary>
  343. public string? searchMediaUploader { set; get; }
  344. /// <summary>
  345. /// 根据文件修改时间范围查找(开始时间)
  346. /// </summary>
  347. public DateTime? searchStartEditTime { set; get; }
  348. /// <summary>
  349. /// 根据文件修改时间范围查找(结束时间)
  350. /// </summary>
  351. public DateTime? searchEndEditTime { set; get; }
  352. }
  353. }