FuelTransactionReport.razor.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. using AntDesign;
  2. using AI.Platform.Page.Pages.SiteConfiguration;
  3. using AI.Platform.Core;
  4. using AI.Platform.Core.Entity.System.VehicleTerminal.CardInfo;
  5. using Masuit.Tools;
  6. using Microsoft.AspNetCore.Components;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Globalization;
  10. using System.Linq;
  11. using System.Threading.Tasks;
  12. using ZhonTai.Admin.Contracts.Domain.VehicleTerminal.Device;
  13. using ZhonTai.Admin.Contracts.Domain.VehicleTerminal.Driver;
  14. using ZhonTai.Admin.Contracts.Domain.VehicleTerminal.Payment;
  15. using ZhonTai.Admin.Contracts.Domain.VehicleTerminal.Transaction;
  16. using ZhonTai.Admin.Contracts.Domain.VehicleTerminal.UserInfo;
  17. namespace AI.Platform.Page.Pages.Report
  18. {
  19. public partial class FuelTransactionReport : ComponentBase
  20. {
  21. [Inject] private SqlSugarRepository<TransactionEntity> _TransactionPository { get; set; }
  22. // ========== 数据模型 ==========
  23. // 筛选条件模型
  24. public class FilterModel
  25. {
  26. public string DeviceId { get; set; } = "";
  27. public string PlateNumber { get; set; } = "";
  28. public string OilType { get; set; } = "";
  29. public string PaymentMethod { get; set; } = "";
  30. public string PaymentStatus { get; set; } = "";
  31. public string OrderStatus { get; set; } = "";
  32. public string Driver { get; set; } = "";
  33. public string OrderNo { get; set; } = "";
  34. public string Mobile { get; set; } = "";
  35. public DateTime? StartTime { get; set; }
  36. public DateTime? EndTime { get; set; }
  37. }
  38. // 交易数据模型
  39. public class TransactionItem
  40. {
  41. public string Id { get; set; } = "";
  42. public string DeviceId { get; set; } = "";
  43. public string PlateNumber { get; set; } = "";
  44. public DateTime TransactionTime { get; set; }
  45. public string OilProductName { get; set; } = "";
  46. public decimal OilPrice { get; set; }
  47. public decimal OilVolume { get; set; }
  48. public string PaymentMethod { get; set; } = "";
  49. public string DriverName { get; set; } = "";
  50. public string OrderNo { get; set; } = "";
  51. public decimal PayableAmount { get; set; }
  52. public string Mobile { get; set; } = "";
  53. public string UserName { get; set; } = "";
  54. public string WxName { get; set; } = "";
  55. public string PaymentStatus { get; set; }
  56. public string OrderStatus { get; set; } = "";
  57. }
  58. // ========== 公共属性 ==========
  59. protected FilterModel Filter { get; set; } = new();
  60. protected List<TransactionItem> TransactionData { get; set; } = new();
  61. protected bool Loading { get; set; }
  62. protected int TotalCount { get; set; }
  63. protected int CurrentPage { get; set; } = 1;
  64. protected int PageSize { get; set; } = 20;
  65. // ========== 选项数据 ==========
  66. protected List<string> DeviceOptions { get; set; } = new();
  67. protected List<string> PlateNumberOptions { get; set; } = new();
  68. protected List<string> OilTypeOptions { get; set; } = new();
  69. protected List<string> PaymentMethodOptions { get; set; } = new();
  70. protected List<string> PaymentStatusOptions { get; set; } = new();
  71. protected List<string> OrderStatusOptions { get; set; } = new();
  72. protected List<string> DriverOptions { get; set; } = new();
  73. public string DeviceId { get; set; } = "";
  74. public string PlateNumber { get; set; } = "";
  75. public string OilType { get; set; } = "";
  76. public string PaymentMethod { get; set; } = "";
  77. public string PaymentStatus { get; set; } = "";
  78. public string OrderStatus { get; set; } = "";
  79. public string Driver { get; set; } = "";
  80. public string OrderNo { get; set; } = "";
  81. public string Mobile { get; set; } = "";
  82. public DateTime? StartTime { get; set; }
  83. public DateTime? EndTime { get; set; }
  84. // ========== 生命周期方法 ==========
  85. protected override void OnInitialized()
  86. {
  87. base.OnInitialized();
  88. InitializeData();
  89. _ = LoadDataAsync();
  90. }
  91. // ========== 初始化方法 ==========
  92. private void InitializeData()
  93. {
  94. // 初始化选项数据
  95. DeviceOptions = new List<string> { "粤B67890" };
  96. PlateNumberOptions = new List<string> { "粤ACD0045", "粤ACD0046", "粤ACD0047", "粤ACD0048" };
  97. OilTypeOptions = new List<string> { "92#", "95#", "0#" };
  98. PaymentMethodOptions = new List<string> { "微信支付", "支付宝支付", "现金", "银联" };
  99. PaymentStatusOptions = new List<string> { "待支付", "支付成功", "支付失败" };
  100. OrderStatusOptions = new List<string> { "未支付", "已完成", "已取消" };
  101. DriverOptions = new List<string> { "张三", "李四", "王五" };
  102. // 设置默认时间范围(最近7天)
  103. Filter.StartTime = DateTime.Today.AddDays(-7);
  104. Filter.EndTime = DateTime.Today;
  105. }
  106. // ========== 数据操作 ==========
  107. // 重置筛选条件
  108. protected void ResetFilter()
  109. {
  110. Filter = new FilterModel
  111. {
  112. StartTime = DateTime.Today.AddDays(-7),
  113. EndTime = DateTime.Today
  114. };
  115. CurrentPage = 1;
  116. }
  117. // 加载数据
  118. protected async Task LoadDataAsync()
  119. {
  120. Loading = true;
  121. try
  122. {
  123. // 生成模拟数据
  124. TransactionData = await GenerateMockData();
  125. //TotalCount = TransactionData.Count(); // 模拟总记录数
  126. }
  127. finally
  128. {
  129. Loading = false;
  130. StateHasChanged();
  131. }
  132. }
  133. // 生成模拟数据
  134. private async Task<List<TransactionItem>> GenerateMockData()
  135. {
  136. try
  137. {
  138. var payStatus = PaymentStatus == "待支付" ? 0 :
  139. PaymentStatus == "支付成功" ? 1 :
  140. PaymentStatus == "支付失败" ? 2 : 3;
  141. var OStatus = OrderStatus == "未支付" ? 0 :
  142. OrderStatus == "已完成" ? 1 :
  143. OrderStatus == "已取消" ? 2 : 3;
  144. var query = _TransactionPository.AsQueryable()
  145. .LeftJoin<DeviceEntity>((a, b) => a.DeviceId == b.DeviceId)
  146. .LeftJoin<PayTypeEntity>((a, b, c) => a.PaymentMethod == c.Id)
  147. .LeftJoin<DriverEntity>((a, b, c, e) => a.EmployeeId == e.Id)
  148. .LeftJoin<UserInfoEntity>((a, b, c, e, f) => a.UserId == f.Id);
  149. // 使用条件判断代替三元运算符
  150. if (!string.IsNullOrEmpty(DeviceId))
  151. query = query.Where((a, b, c, e, f) => b.DeviceId == DeviceId);
  152. if (!string.IsNullOrEmpty(PlateNumber))
  153. query = query.Where((a, b, c, e, f) => a.LicencePlate == PlateNumber);
  154. if (!string.IsNullOrEmpty(OilType))
  155. query = query.Where((a, b, c, e, f) => a.OilProduct == OilType);
  156. if (!string.IsNullOrEmpty(PaymentMethod))
  157. query = query.Where((a, b, c, e, f) => c.Name == PaymentMethod);
  158. if (payStatus != 3)
  159. query = query.Where((a, b, c, e, f) => a.PaymentStatus == payStatus);
  160. if (OStatus != 3)
  161. query = query.Where((a, b, c, e, f) => a.OrderStatus == OStatus);
  162. if (!string.IsNullOrEmpty(Driver))
  163. query = query.Where((a, b, c, e, f) => e.Name == Driver);
  164. if (!string.IsNullOrEmpty(OrderNo))
  165. query = query.Where((a, b, c, e, f) => a.BillNumber == OrderNo);
  166. if (!string.IsNullOrEmpty(Mobile))
  167. query = query.Where((a, b, c, e, f) => a.Mobile == Mobile);
  168. if (StartTime != null)
  169. query = query.Where((a, b, c, e, f) =>
  170. a.TransactionTime > StartTime && a.TransactionTime < EndTime);
  171. var baseQuery = query
  172. .OrderByDescending((a, b, c, e, f) => a.TransactionTime)
  173. .Select((a, b, c, e, f) => new TransactionItem
  174. {
  175. Id = a.Id.ToString(),
  176. DeviceId = b.DeviceId,
  177. PlateNumber = a.LicencePlate,
  178. TransactionTime = a.TransactionTime,
  179. OilProductName = a.OilProduct,
  180. OilPrice = a.OilPrice,
  181. OilVolume = a.OilVolume,
  182. PaymentMethod = c.Name,
  183. DriverName = e.Name,
  184. OrderNo = a.BillNumber,
  185. PayableAmount = a.PayableAmount,
  186. Mobile = a.Mobile,
  187. UserName = f.UserName,
  188. WxName = f.WxName,
  189. PaymentStatus = a.PaymentStatus == 0 ? "待支付" :
  190. a.PaymentStatus == 1 ? "支付成功" :
  191. a.PaymentStatus == 2 ? "支付失败" : "",
  192. OrderStatus = a.OrderStatus == 0 ? "未支付" :
  193. a.OrderStatus == 1 ? "已完成" : ""
  194. });
  195. TotalCount = await baseQuery.CountAsync();
  196. return await baseQuery
  197. .Skip((CurrentPage - 1) * PageSize)
  198. .Take(PageSize)
  199. .ToListAsync(); ;
  200. }
  201. catch (Exception ex)
  202. {
  203. }
  204. return null;
  205. }
  206. // ========== 格式化方法 ==========
  207. // 格式化货币显示
  208. protected string FormatCurrency(decimal? value)
  209. {
  210. if (value == null) return "-";
  211. return value.Value.ToString("C", CultureInfo.CreateSpecificCulture("zh-CN"));
  212. }
  213. // 格式化数字显示
  214. protected string FormatNumber(decimal? value)
  215. {
  216. if (value == null) return "-";
  217. return value.Value.ToString("N2", CultureInfo.CreateSpecificCulture("zh-CN"));
  218. }
  219. // 格式化日期时间
  220. protected string FormatDateTime(DateTime? value)
  221. {
  222. if (value == null) return "-";
  223. return value.Value.ToString("yyyy-MM-dd HH:mm:ss");
  224. }
  225. // 格式化支付状态
  226. protected string FormatPaymentStatus(bool? status)
  227. {
  228. if (status == null) return "-";
  229. return status.Value ? "成功" : "失败";
  230. }
  231. // 格式化订单状态
  232. protected string FormatOrderStatus(string status)
  233. {
  234. return string.IsNullOrEmpty(status) ? "-" : status;
  235. }
  236. // ========== 事件处理方法 ==========
  237. // 查询处理
  238. protected async Task HandleQuery()
  239. {
  240. CurrentPage = 1;
  241. await LoadDataAsync();
  242. }
  243. // 重置处理
  244. protected async Task HandleReset()
  245. {
  246. ResetFilter();
  247. await LoadDataAsync();
  248. }
  249. // 页码变化
  250. protected async Task HandlePageChange(PaginationEventArgs args)
  251. {
  252. CurrentPage = args.Page;
  253. await LoadDataAsync();
  254. }
  255. // 每页大小变化 - 使用 PaginationEventArgs
  256. protected async Task HandlePageSizeChange(PaginationEventArgs args)
  257. {
  258. PageSize = args.PageSize;
  259. CurrentPage = 1;
  260. await LoadDataAsync();
  261. }
  262. }
  263. }