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);
}
}
}