OrderInfoService.cs 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. using Edge.Core.Domain.FccOrderInfo.Input;
  2. using Edge.Core.Domain.FccOrderInfo.Output;
  3. using FccLite.Web.Repositories.FccOrderInfo;
  4. using FccLite.Web.Repositories.FccStationInfo;
  5. using Microsoft.AspNetCore.Mvc;
  6. using OfficeOpenXml;
  7. namespace FccLite.Web.Services.FccOrderInfo
  8. {
  9. public class OrderInfoService : IOrderInfoService
  10. {
  11. static NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
  12. private readonly IOrderInfoReposity _orderInfoReposity;
  13. private readonly IStationRepository _stationRepository;
  14. private readonly string[] tableTitle = { "流水号", "油站", "油机号", "油枪", "油品", "单价", "升数", "金额", "挂枪时间", "交易时间", "支付方式", "支付状态", "支付用户" };
  15. private readonly string[] prepaytTableTitle = { "订单id","云端订单id","流水号","油站", "油机号", "油枪", "油品", "单价", "升数", "金额", "实付金额","实加升数","退款金额",
  16. "挂枪时间", "交易时间", "支付方式","授权状态","支付状态", "支付用户","手机号", };
  17. private readonly Dictionary<int, string> _afterPayType = new Dictionary<int, string>
  18. {
  19. {0,"未支付" },
  20. {1,"已支付" }
  21. };
  22. public OrderInfoService(IOrderInfoReposity orderInfoReposity,IStationRepository stationRepository)
  23. {
  24. _orderInfoReposity = orderInfoReposity;
  25. _stationRepository = stationRepository;
  26. }
  27. public async Task<OrderInfoOutput> GetPage(OrderInfoPageInput orderInfoPageInput)
  28. {
  29. IEnumerable<OrderInfo> enumerable = await _orderInfoReposity.GetPage(orderInfoPageInput);
  30. List<OrderInfo> orderInfos = enumerable.ToList();
  31. return new OrderInfoOutput()
  32. {
  33. Total = orderInfos.Count,
  34. List = orderInfos
  35. };
  36. }
  37. /// <summary>
  38. /// 后支付订单下载excel
  39. /// </summary>
  40. /// <param name="orderInfoPageInput"></param>
  41. /// <returns></returns>
  42. public async Task<byte[]> DownloadAfterPayOrderExcel(OrderInfoPageInput orderInfoPageInput)
  43. {
  44. IEnumerable<OrderInfo> enumerable = await _orderInfoReposity.GetOrderFilter(orderInfoPageInput);
  45. try
  46. {
  47. var package = new ExcelPackage();
  48. ExcelWorksheet excelWorksheet = package.Workbook.Worksheets.Add("Sheet1");
  49. for (int index = 0; index < tableTitle.Length; index++)
  50. {
  51. excelWorksheet.Cells[1, index+1].Value = tableTitle[index];
  52. }
  53. using (var range = excelWorksheet.Cells[1, 1, 1, tableTitle.Length])
  54. {
  55. range.Style.Font.Bold = true;
  56. }
  57. int row = 2;
  58. decimal allVolume = 0;
  59. decimal allAmount = 0;
  60. foreach (var order in enumerable)
  61. {
  62. excelWorksheet.Cells[row, 1].Value = order.Ttc;
  63. excelWorksheet.Cells[row, 2].Value = order.StationName;
  64. excelWorksheet.Cells[row, 3].Value = order.MachineName;
  65. excelWorksheet.Cells[row, 4].Value = order.NozzleNum;
  66. excelWorksheet.Cells[row, 5].Value = order.OilName;
  67. excelWorksheet.Cells[row, 6].Value = order.Price;
  68. excelWorksheet.Cells[row, 7].Value = order.Volume;
  69. excelWorksheet.Cells[row, 8].Value = order.Amount;
  70. excelWorksheet.Cells[row, 9].Value = order.EndTime != null ? order.EndTime?.ToString("yyyy-MM-dd HH:mm:ss") : "";
  71. excelWorksheet.Cells[row, 10].Value = order.PaymentTime != null ? order.PaymentTime?.ToString("yyyy-MM-dd HH:mm:ss") : "";
  72. excelWorksheet.Cells[row, 11].Value = order.PaymentName;
  73. string payTypeStr = "未知状态";
  74. _afterPayType.TryGetValue(order.PaymentStatus, out payTypeStr);
  75. excelWorksheet.Cells[row, 12].Value = payTypeStr;
  76. excelWorksheet.Cells[row, 13].Value = order.UserName;
  77. allVolume += order.Volume;
  78. allAmount += order.Amount;
  79. row++;
  80. }
  81. excelWorksheet.Cells[row, 7].Value = allVolume;
  82. excelWorksheet.Cells[row, 8].Value = allAmount;
  83. return package.GetAsByteArray();
  84. } catch(Exception e)
  85. {
  86. Console.WriteLine(e);
  87. Logger.Error(e.Message);
  88. }
  89. return new byte[0];
  90. }
  91. /// <summary>
  92. /// 预支付获取订单页
  93. /// </summary>
  94. /// <param name="orderInfoPageInput"></param>
  95. /// <returns></returns>
  96. public async Task<PrepayOrderInfoOutput> GetPrepayPage(OrderInfoPageInput orderInfoPageInput)
  97. {
  98. IEnumerable<OrderInfo> enumerable = await _orderInfoReposity.GetPage(orderInfoPageInput);
  99. List<PrepayOrderInfo> prepayOrderInfos = enumerable.Select(order => new PrepayOrderInfo(order)).ToList();
  100. return new PrepayOrderInfoOutput()
  101. {
  102. Total = prepayOrderInfos.Count,
  103. List = prepayOrderInfos
  104. };
  105. }
  106. /// <summary>
  107. /// 预支付下载订单excel
  108. /// </summary>
  109. /// <param name="orderInfoPageInput"></param>
  110. /// <returns></returns>
  111. public async Task<byte[]> DownloadPrepayOrderExcel(OrderInfoPageInput orderInfoPageInput)
  112. {
  113. IEnumerable<OrderInfo> enumerable = await _orderInfoReposity.GetOrderFilter(orderInfoPageInput);
  114. List<PrepayOrderInfo> prepayOrderInfos = enumerable.Select(order => new PrepayOrderInfo(order)).ToList();
  115. try
  116. {
  117. var package = new ExcelPackage();
  118. ExcelWorksheet excelWorksheet = package.Workbook.Worksheets.Add("Sheet1");
  119. for (int index = 0; index < prepaytTableTitle.Length; index++)
  120. {
  121. excelWorksheet.Cells[1, index + 1].Value = prepaytTableTitle[index];
  122. }
  123. using (var range = excelWorksheet.Cells[1, 1, 1, prepaytTableTitle.Length])
  124. {
  125. range.Style.Font.Bold = true;
  126. }
  127. int row = 2;
  128. decimal allVolume = 0;
  129. decimal allAmount = 0;
  130. decimal allAmountPayable = 0;
  131. decimal allVolumePayable = 0;
  132. decimal allRefundAmount = 0;
  133. foreach (var order in prepayOrderInfos)
  134. {
  135. excelWorksheet.Cells[row, 1].Value = order.Id;
  136. excelWorksheet.Cells[row, 2].Value = order.CloundOrderId;
  137. excelWorksheet.Cells[row, 3].Value = order.Ttc;
  138. excelWorksheet.Cells[row, 4].Value = order.StationName;
  139. excelWorksheet.Cells[row, 5].Value = order.MachineName;
  140. excelWorksheet.Cells[row, 6].Value = order.NozzleNum;
  141. excelWorksheet.Cells[row, 7].Value = order.OilName;
  142. excelWorksheet.Cells[row, 8].Value = order.Price;
  143. excelWorksheet.Cells[row, 9].Value = order.Volume;
  144. excelWorksheet.Cells[row, 10].Value = order.Amount;
  145. excelWorksheet.Cells[row, 11].Value = order.AmountPayable;
  146. excelWorksheet.Cells[row, 12].Value = order.VolumePayable;
  147. excelWorksheet.Cells[row, 13].Value = order.RefundAmount;
  148. excelWorksheet.Cells[row, 14].Value = order.EndTime != null ? order.EndTime?.ToString("yyyy-MM-dd HH:mm:ss") : "";
  149. excelWorksheet.Cells[row, 15].Value = order.PaymentTime != null ? order.PaymentTime?.ToString("yyyy-MM-dd HH:mm:ss") : "";
  150. excelWorksheet.Cells[row, 16].Value = order.PaymentName;
  151. excelWorksheet.Cells[row, 17].Value = order.AuthorizationStatus;
  152. excelWorksheet.Cells[row, 18].Value = order.PaymentStatus;
  153. excelWorksheet.Cells[row, 19].Value = order.UserName;
  154. excelWorksheet.Cells[row, 20].Value = order.PhoneNumber;
  155. allVolume += order.Volume;
  156. allAmount += order.Amount;
  157. allAmountPayable += order.AmountPayable ?? 0;
  158. allVolumePayable += order.VolumePayable ?? 0;
  159. allRefundAmount += order.RefundAmount ?? 0;
  160. row++;
  161. }
  162. excelWorksheet.Cells[row, 9].Value = allVolume;
  163. excelWorksheet.Cells[row, 10].Value = allAmount;
  164. excelWorksheet.Cells[row, 11].Value = allAmount;
  165. excelWorksheet.Cells[row, 12].Value = allAmount;
  166. excelWorksheet.Cells[row, 13].Value = allAmount;
  167. return package.GetAsByteArray();
  168. }
  169. catch (Exception e)
  170. {
  171. Console.WriteLine(e);
  172. Logger.Error(e.Message);
  173. }
  174. return new byte[0];
  175. }
  176. }
  177. }