using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using MiniExcelLibs; using ZR.Common; using ZR.Mall.Model; using ZR.Mall.Model.Dto; using ZR.Mall.Service.IService; //创建时间:2025-05-30 namespace ZR.Mall.Controllers { /// /// 订单管理 /// [Route("shopping/Order")] [ApiExplorerSettings(GroupName = "shopping")] public class OrderController : BaseController { private NLog.Logger _logger = NLog.LogManager.GetCurrentClassLogger(); /// /// 订单管理接口 /// private readonly IOMSOrderService _OMSOrderService; public OrderController(IOMSOrderService OMSOrderService) { _OMSOrderService = OMSOrderService; } /// /// 查询订单管理列表 /// /// /// [HttpGet("list")] [ActionPermissionFilter(Permission = "oms:order:list")] public IActionResult QueryOMSOrder([FromQuery] OMSOrderQueryDto parm) { var response = _OMSOrderService.GetList(parm); response.Extra.Add("NotDelivereOrder", _OMSOrderService.NotDelivereOrder()); return SUCCESS(response); } /// /// 查询订单管理详情 /// /// /// [HttpGet("{Id}")] [ActionPermissionFilter(Permission = "oms:order:query")] public IActionResult GetOMSOrder(long Id) { var response = _OMSOrderService.GetInfo(Id); var info = response.Adapt(); return SUCCESS(info); } /// /// 更新订单管理 /// /// [HttpPut] [Log(Title = "订单管理", BusinessType = BusinessType.UPDATE)] public IActionResult UpdateOMSOrder([FromBody] OMSOrderDto parm) { var modal = parm.Adapt().ToUpdate(HttpContext); var response = _OMSOrderService.UpdateOMSOrder(parm.OperType, modal); return ToResponse(response); } /// /// 删除订单管理 /// /// [HttpPost("delete/{ids}")] [ActionPermissionFilter(Permission = "oms:order:delete")] [Log(Title = "订单管理", BusinessType = BusinessType.DELETE)] public IActionResult DeleteOMSOrder([FromRoute] string ids) { var idArr = Tools.SplitAndConvert(ids); return ToResponse(_OMSOrderService.Deleteable() .Where(f => f.IsDelete == 0) .In(idArr) .IsLogic() .ExecuteCommand()); } /// /// 订单退款 /// /// [HttpPost("refund")] [Log(Title = "订单退款", BusinessType = BusinessType.UPDATE)] public IActionResult RefundOrder([FromBody] OMSOrderDto parm) { var modal = parm.Adapt().ToUpdate(HttpContext); var response = _OMSOrderService.UpdateOMSOrder(4, modal); return ToResponse(response); } /// /// 导出订单管理 /// /// [Log(Title = "订单管理", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)] [HttpGet("export")] [ActionPermissionFilter(Permission = "oms:order:export")] public IActionResult Export([FromQuery] OMSOrderQueryDto parm) { var list = _OMSOrderService.ExportList(parm).Result; if (list == null || list.Count <= 0) { return ToResponse(ResultCode.FAIL, "没有要导出的数据"); } var result = ExportExcelMini(list, "订单管理", "订单管理"); return ExportExcel(result.Item2, result.Item1); } /// /// 订单发货 /// /// [HttpPut("delivery")] [Log(Title = "订单发货", BusinessType = BusinessType.UPDATE)] public async Task Delivery([FromBody] OMSOrderDto parm) { var modal = parm.Adapt().ToUpdate(HttpContext); var response = await _OMSOrderService.OrderDelivery(modal); return ToResponse(response); } /// /// 导出待发货订单 /// /// [Log(Title = "导出待发货订单", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)] [HttpGet("exportDelivery")] [ActionPermissionFilter(Permission = "oms:order:ship")] public async Task ExportExpress([FromQuery] OMSOrderQueryDto parm) { if (parm == null || parm.BeginCreateTime == null) { return ToResponse(ResultCode.CUSTOM_ERROR, "请选择时间"); } var list = await _OMSOrderService.ExportWaitDeliveryList(parm); var result = await ExportExcelMiniAsync(list, "待发货", "待发货订单"); return ExportExcel(result.Item2, result.Item1); } /// /// 批量发货 /// /// /// [HttpPost("importData")] [Log(Title = "批量发货", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false, IsSaveResponseData = true)] [ActionPermissionFilter(Permission = "oms:order:ship")] public async Task ImportData([FromForm(Name = "file")] IFormFile formFile) { if (formFile == null || formFile.Length <= 0) { return ToResponse(ResultCode.FAIL, "请选择要导入的文件"); } var resultList = new List(); using var stream = formFile.OpenReadStream(); var rows = await stream.QueryAsync(startCell: "A1"); var orderNos = rows.Select(x => x.OrderNo).Distinct().ToList(); var allOrders = await _OMSOrderService.Queryable().In(x => x.OrderNo, orderNos).ToListAsync(); foreach (var item in rows) { if (string.IsNullOrWhiteSpace(item.DeliveryCompany) || string.IsNullOrWhiteSpace(item.DeliveryNo)) { item.Status = "缺少快递信息"; resultList.Add(item); continue; } var orderInfo = allOrders.FirstOrDefault(f => f.OrderNo == item.OrderNo); if (orderInfo == null) { item.Status = "订单号不存在"; resultList.Add(item); continue; } if (orderInfo.DeliveryStatus != Enum.DeliveryStatusEnum.NotDelivered) { item.Status = "已发货"; resultList.Add(item); continue; } var order = item.Adapt(); var result = await _OMSOrderService.OrderDelivery(order); item.Status = result > 0 ? "发货成功" : "发货失败"; resultList.Add(item); } return SUCCESS(new { total = resultList.Count, successCount = resultList.Count(x => x.Status == "发货成功"), failCount = resultList.Count(x => x.Status != "发货成功"), result = resultList }); } /// /// 查询销售总 /// /// [HttpGet("getSales")] [ActionPermissionFilter(Permission = "oms:sale:query")] public async Task GetSales(OMSOrderQueryDto dto) { var response = await _OMSOrderService.GetTotalSales(dto); return SUCCESS(response); } /// /// 查询销售趋势 /// /// [HttpGet("getSalesTrade")] [ActionPermissionFilter(Permission = "oms:sale:query")] public async Task GetSalesTrade(OMSOrderQueryDto dto) { var response = await _OMSOrderService.GetSaleTreandByDay(dto); return SUCCESS(response); } /// /// 查询销售前10的商品 /// /// [HttpGet("getSaleTopProduct")] [ActionPermissionFilter(Permission = "oms:sale:query")] public async Task GetSaleTopProduct(OMSOrderQueryDto dto) { var response = await _OMSOrderService.GetSaleTopProduct(dto); return SUCCESS(response); } } }