Media.razor.cs 11 KB

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