OrderController.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. using Admin.NET.Plugin.AiDOP.Dto;
  2. using Admin.NET.Plugin.AiDOP.Entity;
  3. using Admin.NET.Plugin.AiDOP.Infrastructure;
  4. namespace Admin.NET.Plugin.AiDOP.Controllers;
  5. /// <summary>
  6. /// 与 Gitee Ai-DOP Demo 的 <c>api/Order</c> 路由保持一致,便于前端与脚本迁移。
  7. /// </summary>
  8. [ApiController]
  9. [Route("api/[controller]")]
  10. [AllowAnonymous]
  11. [NonUnify]
  12. public class OrderController : ControllerBase
  13. {
  14. private readonly SqlSugarRepository<AdoOrder> _orderRep;
  15. public OrderController(SqlSugarRepository<AdoOrder> orderRep)
  16. {
  17. _orderRep = orderRep;
  18. }
  19. [HttpGet]
  20. public async Task<IActionResult> GetOrders([FromQuery] OrderQueryDto query)
  21. {
  22. (query.Page, query.PageSize) = PagingGuard.Normalize(query.Page, query.PageSize);
  23. var q = _orderRep.AsQueryable();
  24. if (!string.IsNullOrWhiteSpace(query.OrderNo))
  25. q = q.Where(x => x.OrderNo.Contains(query.OrderNo));
  26. if (!string.IsNullOrWhiteSpace(query.CustomerName))
  27. q = q.Where(x => x.CustomerName.Contains(query.CustomerName));
  28. if (!string.IsNullOrWhiteSpace(query.Status))
  29. q = q.Where(x => x.Status == query.Status);
  30. var total = await q.CountAsync();
  31. var list = await q
  32. .OrderByDescending(x => x.CreatedTime)
  33. .Skip((query.Page - 1) * query.PageSize)
  34. .Take(query.PageSize)
  35. .ToListAsync();
  36. return Ok(new
  37. {
  38. total,
  39. page = query.Page,
  40. pageSize = query.PageSize,
  41. list = list.Select(x => new OrderDetailDto
  42. {
  43. Id = x.Id,
  44. OrderNo = x.OrderNo,
  45. CustomerName = x.CustomerName,
  46. Product = x.Product,
  47. Quantity = x.Quantity,
  48. UnitPrice = x.UnitPrice,
  49. Amount = x.Amount,
  50. Status = x.Status,
  51. DeliveryDate = x.DeliveryDate,
  52. Remark = x.Remark,
  53. CreatedTime = x.CreatedTime,
  54. UpdatedTime = x.UpdatedTime,
  55. CreatedBy = x.CreatedBy
  56. }).ToList()
  57. });
  58. }
  59. [HttpGet("{id:long}")]
  60. public async Task<IActionResult> GetOrder(long id)
  61. {
  62. var item = await _orderRep.GetByIdAsync(id);
  63. if (item == null)
  64. return NotFound();
  65. return Ok(new OrderDetailDto
  66. {
  67. Id = item.Id,
  68. OrderNo = item.OrderNo,
  69. CustomerName = item.CustomerName,
  70. Product = item.Product,
  71. Quantity = item.Quantity,
  72. UnitPrice = item.UnitPrice,
  73. Amount = item.Amount,
  74. Status = item.Status,
  75. DeliveryDate = item.DeliveryDate,
  76. Remark = item.Remark,
  77. CreatedTime = item.CreatedTime,
  78. UpdatedTime = item.UpdatedTime,
  79. CreatedBy = item.CreatedBy
  80. });
  81. }
  82. [HttpPost]
  83. public async Task<IActionResult> CreateOrder([FromBody] OrderCreateDto dto)
  84. {
  85. var item = new AdoOrder
  86. {
  87. OrderNo = $"SO{DateTime.Now:yyyyMMddHHmmss}{Random.Shared.Next(1000, 9999)}",
  88. CustomerName = dto.CustomerName,
  89. Product = dto.Product,
  90. Quantity = dto.Quantity,
  91. UnitPrice = dto.UnitPrice,
  92. Amount = dto.Quantity * dto.UnitPrice,
  93. DeliveryDate = dto.DeliveryDate,
  94. Remark = dto.Remark,
  95. Status = "待处理",
  96. CreatedTime = DateTime.Now
  97. };
  98. await _orderRep.AsInsertable(item).ExecuteReturnEntityAsync();
  99. return Ok(new { id = item.Id, message = "创建成功" });
  100. }
  101. [HttpPut("{id:long}")]
  102. public async Task<IActionResult> UpdateOrder(long id, [FromBody] OrderUpdateDto dto)
  103. {
  104. var item = await _orderRep.GetByIdAsync(id);
  105. if (item == null)
  106. return NotFound();
  107. item.CustomerName = dto.CustomerName;
  108. item.Product = dto.Product;
  109. item.Quantity = dto.Quantity;
  110. item.UnitPrice = dto.UnitPrice;
  111. item.Amount = dto.Quantity * dto.UnitPrice;
  112. item.DeliveryDate = dto.DeliveryDate;
  113. item.Remark = dto.Remark;
  114. item.Status = dto.Status;
  115. item.UpdatedTime = DateTime.Now;
  116. await _orderRep.AsUpdateable(item).ExecuteCommandAsync();
  117. return Ok(new { message = "更新成功" });
  118. }
  119. [HttpDelete("{id:long}")]
  120. public async Task<IActionResult> DeleteOrder(long id)
  121. {
  122. var item = await _orderRep.GetByIdAsync(id);
  123. if (item == null)
  124. return NotFound();
  125. await _orderRep.DeleteAsync(item);
  126. return Ok(new { message = "删除成功" });
  127. }
  128. }