OrderController.cs 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc;
  3. using MiniExcelLibs;
  4. using ZR.Common;
  5. using ZR.Mall.Model;
  6. using ZR.Mall.Model.Dto;
  7. using ZR.Mall.Service.IService;
  8. //创建时间:2025-05-30
  9. namespace ZR.Mall.Controllers
  10. {
  11. /// <summary>
  12. /// 订单管理
  13. /// </summary>
  14. [Route("shopping/Order")]
  15. [ApiExplorerSettings(GroupName = "shopping")]
  16. public class OrderController : BaseController
  17. {
  18. private NLog.Logger _logger = NLog.LogManager.GetCurrentClassLogger();
  19. /// <summary>
  20. /// 订单管理接口
  21. /// </summary>
  22. private readonly IOMSOrderService _OMSOrderService;
  23. public OrderController(IOMSOrderService OMSOrderService)
  24. {
  25. _OMSOrderService = OMSOrderService;
  26. }
  27. /// <summary>
  28. /// 查询订单管理列表
  29. /// </summary>
  30. /// <param name="parm"></param>
  31. /// <returns></returns>
  32. [HttpGet("list")]
  33. [ActionPermissionFilter(Permission = "oms:order:list")]
  34. public IActionResult QueryOMSOrder([FromQuery] OMSOrderQueryDto parm)
  35. {
  36. var response = _OMSOrderService.GetList(parm);
  37. response.Extra.Add("NotDelivereOrder", _OMSOrderService.NotDelivereOrder());
  38. return SUCCESS(response);
  39. }
  40. /// <summary>
  41. /// 查询订单管理详情
  42. /// </summary>
  43. /// <param name="Id"></param>
  44. /// <returns></returns>
  45. [HttpGet("{Id}")]
  46. [ActionPermissionFilter(Permission = "oms:order:query")]
  47. public IActionResult GetOMSOrder(long Id)
  48. {
  49. var response = _OMSOrderService.GetInfo(Id);
  50. var info = response.Adapt<OMSOrderDto>();
  51. return SUCCESS(info);
  52. }
  53. /// <summary>
  54. /// 更新订单管理
  55. /// </summary>
  56. /// <returns></returns>
  57. [HttpPut]
  58. [Log(Title = "订单管理", BusinessType = BusinessType.UPDATE)]
  59. public IActionResult UpdateOMSOrder([FromBody] OMSOrderDto parm)
  60. {
  61. var modal = parm.Adapt<OMSOrder>().ToUpdate(HttpContext);
  62. var response = _OMSOrderService.UpdateOMSOrder(parm.OperType, modal);
  63. return ToResponse(response);
  64. }
  65. /// <summary>
  66. /// 删除订单管理
  67. /// </summary>
  68. /// <returns></returns>
  69. [HttpPost("delete/{ids}")]
  70. [ActionPermissionFilter(Permission = "oms:order:delete")]
  71. [Log(Title = "订单管理", BusinessType = BusinessType.DELETE)]
  72. public IActionResult DeleteOMSOrder([FromRoute] string ids)
  73. {
  74. var idArr = Tools.SplitAndConvert<long>(ids);
  75. return ToResponse(_OMSOrderService.Deleteable()
  76. .Where(f => f.IsDelete == 0)
  77. .In(idArr)
  78. .IsLogic()
  79. .ExecuteCommand());
  80. }
  81. /// <summary>
  82. /// 订单退款
  83. /// </summary>
  84. /// <returns></returns>
  85. [HttpPost("refund")]
  86. [Log(Title = "订单退款", BusinessType = BusinessType.UPDATE)]
  87. public IActionResult RefundOrder([FromBody] OMSOrderDto parm)
  88. {
  89. var modal = parm.Adapt<OMSOrder>().ToUpdate(HttpContext);
  90. var response = _OMSOrderService.UpdateOMSOrder(4, modal);
  91. return ToResponse(response);
  92. }
  93. /// <summary>
  94. /// 导出订单管理
  95. /// </summary>
  96. /// <returns></returns>
  97. [Log(Title = "订单管理", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
  98. [HttpGet("export")]
  99. [ActionPermissionFilter(Permission = "oms:order:export")]
  100. public IActionResult Export([FromQuery] OMSOrderQueryDto parm)
  101. {
  102. var list = _OMSOrderService.ExportList(parm).Result;
  103. if (list == null || list.Count <= 0)
  104. {
  105. return ToResponse(ResultCode.FAIL, "没有要导出的数据");
  106. }
  107. var result = ExportExcelMini(list, "订单管理", "订单管理");
  108. return ExportExcel(result.Item2, result.Item1);
  109. }
  110. /// <summary>
  111. /// 订单发货
  112. /// </summary>
  113. /// <returns></returns>
  114. [HttpPut("delivery")]
  115. [Log(Title = "订单发货", BusinessType = BusinessType.UPDATE)]
  116. public async Task<IActionResult> Delivery([FromBody] OMSOrderDto parm)
  117. {
  118. var modal = parm.Adapt<OMSOrder>().ToUpdate(HttpContext);
  119. var response = await _OMSOrderService.OrderDelivery(modal);
  120. return ToResponse(response);
  121. }
  122. /// <summary>
  123. /// 导出待发货订单
  124. /// </summary>
  125. /// <returns></returns>
  126. [Log(Title = "导出待发货订单", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
  127. [HttpGet("exportDelivery")]
  128. [ActionPermissionFilter(Permission = "oms:order:ship")]
  129. public async Task<IActionResult> ExportExpress([FromQuery] OMSOrderQueryDto parm)
  130. {
  131. if (parm == null || parm.BeginCreateTime == null)
  132. {
  133. return ToResponse(ResultCode.CUSTOM_ERROR, "请选择时间");
  134. }
  135. var list = await _OMSOrderService.ExportWaitDeliveryList(parm);
  136. var result = await ExportExcelMiniAsync(list, "待发货", "待发货订单");
  137. return ExportExcel(result.Item2, result.Item1);
  138. }
  139. /// <summary>
  140. /// 批量发货
  141. /// </summary>
  142. /// <param name="formFile"></param>
  143. /// <returns></returns>
  144. [HttpPost("importData")]
  145. [Log(Title = "批量发货", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false, IsSaveResponseData = true)]
  146. [ActionPermissionFilter(Permission = "oms:order:ship")]
  147. public async Task<IActionResult> ImportData([FromForm(Name = "file")] IFormFile formFile)
  148. {
  149. if (formFile == null || formFile.Length <= 0)
  150. {
  151. return ToResponse(ResultCode.FAIL, "请选择要导入的文件");
  152. }
  153. var resultList = new List<DeliveryExpressDto>();
  154. using var stream = formFile.OpenReadStream();
  155. var rows = await stream.QueryAsync<DeliveryExpressDto>(startCell: "A1");
  156. var orderNos = rows.Select(x => x.OrderNo).Distinct().ToList();
  157. var allOrders = await _OMSOrderService.Queryable().In(x => x.OrderNo, orderNos).ToListAsync();
  158. foreach (var item in rows)
  159. {
  160. if (string.IsNullOrWhiteSpace(item.DeliveryCompany) || string.IsNullOrWhiteSpace(item.DeliveryNo))
  161. {
  162. item.Status = "缺少快递信息";
  163. resultList.Add(item);
  164. continue;
  165. }
  166. var orderInfo = allOrders.FirstOrDefault(f => f.OrderNo == item.OrderNo);
  167. if (orderInfo == null)
  168. {
  169. item.Status = "订单号不存在";
  170. resultList.Add(item);
  171. continue;
  172. }
  173. if (orderInfo.DeliveryStatus != Enum.DeliveryStatusEnum.NotDelivered)
  174. {
  175. item.Status = "已发货";
  176. resultList.Add(item);
  177. continue;
  178. }
  179. var order = item.Adapt<OMSOrder>();
  180. var result = await _OMSOrderService.OrderDelivery(order);
  181. item.Status = result > 0 ? "发货成功" : "发货失败";
  182. resultList.Add(item);
  183. }
  184. return SUCCESS(new
  185. {
  186. total = resultList.Count,
  187. successCount = resultList.Count(x => x.Status == "发货成功"),
  188. failCount = resultList.Count(x => x.Status != "发货成功"),
  189. result = resultList
  190. });
  191. }
  192. /// <summary>
  193. /// 查询销售总
  194. /// </summary>
  195. /// <returns></returns>
  196. [HttpGet("getSales")]
  197. [ActionPermissionFilter(Permission = "oms:sale:query")]
  198. public async Task<IActionResult> GetSales(OMSOrderQueryDto dto)
  199. {
  200. var response = await _OMSOrderService.GetTotalSales(dto);
  201. return SUCCESS(response);
  202. }
  203. /// <summary>
  204. /// 查询销售趋势
  205. /// </summary>
  206. /// <returns></returns>
  207. [HttpGet("getSalesTrade")]
  208. [ActionPermissionFilter(Permission = "oms:sale:query")]
  209. public async Task<IActionResult> GetSalesTrade(OMSOrderQueryDto dto)
  210. {
  211. var response = await _OMSOrderService.GetSaleTreandByDay(dto);
  212. return SUCCESS(response);
  213. }
  214. /// <summary>
  215. /// 查询销售前10的商品
  216. /// </summary>
  217. /// <returns></returns>
  218. [HttpGet("getSaleTopProduct")]
  219. [ActionPermissionFilter(Permission = "oms:sale:query")]
  220. public async Task<IActionResult> GetSaleTopProduct(OMSOrderQueryDto dto)
  221. {
  222. var response = await _OMSOrderService.GetSaleTopProduct(dto);
  223. return SUCCESS(response);
  224. }
  225. }
  226. }