WorkOrderController.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  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. [ApiController]
  6. [Route("api/[controller]")]
  7. [AllowAnonymous]
  8. [NonUnify]
  9. public class WorkOrderController : ControllerBase
  10. {
  11. private readonly SqlSugarRepository<AdoWorkOrder> _workOrderRep;
  12. private readonly SqlSugarRepository<AdoPlan> _planRep;
  13. public WorkOrderController(
  14. SqlSugarRepository<AdoWorkOrder> workOrderRep,
  15. SqlSugarRepository<AdoPlan> planRep)
  16. {
  17. _workOrderRep = workOrderRep;
  18. _planRep = planRep;
  19. }
  20. [HttpGet]
  21. public async Task<IActionResult> GetWorkOrders([FromQuery] WorkOrderQueryDto query)
  22. {
  23. (query.Page, query.PageSize) = PagingGuard.Normalize(query.Page, query.PageSize);
  24. var q = _workOrderRep.AsQueryable();
  25. if (!string.IsNullOrWhiteSpace(query.WorkOrderNo))
  26. q = q.Where(x => x.WorkOrderNo.Contains(query.WorkOrderNo));
  27. if (!string.IsNullOrWhiteSpace(query.PlanNo))
  28. q = q.Where(x => x.PlanNo != null && x.PlanNo.Contains(query.PlanNo));
  29. if (!string.IsNullOrWhiteSpace(query.Status))
  30. q = q.Where(x => x.Status == query.Status);
  31. if (!string.IsNullOrWhiteSpace(query.WorkCenter))
  32. q = q.Where(x => x.WorkCenter == query.WorkCenter);
  33. var total = await q.CountAsync();
  34. var list = await q
  35. .OrderByDescending(x => x.CreatedTime)
  36. .Skip((query.Page - 1) * query.PageSize)
  37. .Take(query.PageSize)
  38. .ToListAsync();
  39. return Ok(new
  40. {
  41. total,
  42. page = query.Page,
  43. pageSize = query.PageSize,
  44. list = list.Select(x => new WorkOrderDetailDto
  45. {
  46. Id = x.Id,
  47. WorkOrderNo = x.WorkOrderNo,
  48. PlanNo = x.PlanNo,
  49. Product = x.Product,
  50. Quantity = x.Quantity,
  51. CompletedQuantity = x.CompletedQuantity,
  52. WorkCenter = x.WorkCenter,
  53. Team = x.Team,
  54. Owner = x.Owner,
  55. StartDate = x.StartDate,
  56. PlanEndDate = x.PlanEndDate,
  57. ActualEndDate = x.ActualEndDate,
  58. Status = x.Status,
  59. Priority = x.Priority,
  60. Remark = x.Remark,
  61. CreatedTime = x.CreatedTime,
  62. UpdatedTime = x.UpdatedTime,
  63. CreatedBy = x.CreatedBy
  64. }).ToList()
  65. });
  66. }
  67. [HttpGet("{id:long}")]
  68. public async Task<IActionResult> GetWorkOrder(long id)
  69. {
  70. var item = await _workOrderRep.GetByIdAsync(id);
  71. if (item == null)
  72. return NotFound();
  73. return Ok(new WorkOrderDetailDto
  74. {
  75. Id = item.Id,
  76. WorkOrderNo = item.WorkOrderNo,
  77. PlanNo = item.PlanNo,
  78. Product = item.Product,
  79. Quantity = item.Quantity,
  80. CompletedQuantity = item.CompletedQuantity,
  81. WorkCenter = item.WorkCenter,
  82. Team = item.Team,
  83. Owner = item.Owner,
  84. StartDate = item.StartDate,
  85. PlanEndDate = item.PlanEndDate,
  86. ActualEndDate = item.ActualEndDate,
  87. Status = item.Status,
  88. Priority = item.Priority,
  89. Remark = item.Remark,
  90. CreatedTime = item.CreatedTime,
  91. UpdatedTime = item.UpdatedTime,
  92. CreatedBy = item.CreatedBy
  93. });
  94. }
  95. [HttpPost]
  96. public async Task<IActionResult> CreateWorkOrder([FromBody] WorkOrderCreateDto dto)
  97. {
  98. string? planNo = null;
  99. if (dto.PlanId is > 0)
  100. {
  101. var plan = await _planRep.GetByIdAsync(dto.PlanId.Value);
  102. planNo = plan?.PlanNo;
  103. }
  104. var item = new AdoWorkOrder
  105. {
  106. WorkOrderNo = $"WO{DateTime.Now:yyyyMMddHHmmss}{Random.Shared.Next(1000, 9999)}",
  107. PlanId = dto.PlanId,
  108. PlanNo = planNo,
  109. Product = dto.Product,
  110. Quantity = dto.Quantity,
  111. WorkCenter = dto.WorkCenter,
  112. Team = dto.Team,
  113. Owner = dto.Owner,
  114. StartDate = dto.StartDate,
  115. PlanEndDate = dto.PlanEndDate,
  116. Priority = dto.Priority,
  117. Remark = dto.Remark,
  118. Status = "待生产",
  119. CreatedTime = DateTime.Now
  120. };
  121. await _workOrderRep.AsInsertable(item).ExecuteReturnEntityAsync();
  122. return Ok(new { id = item.Id, message = "创建成功" });
  123. }
  124. [HttpPut("{id:long}")]
  125. public async Task<IActionResult> UpdateWorkOrder(long id, [FromBody] WorkOrderUpdateDto dto)
  126. {
  127. var item = await _workOrderRep.GetByIdAsync(id);
  128. if (item == null)
  129. return NotFound();
  130. item.Product = dto.Product;
  131. item.Quantity = dto.Quantity;
  132. item.CompletedQuantity = dto.CompletedQuantity;
  133. item.WorkCenter = dto.WorkCenter;
  134. item.Team = dto.Team;
  135. item.Owner = dto.Owner;
  136. item.StartDate = dto.StartDate;
  137. item.PlanEndDate = dto.PlanEndDate;
  138. item.Priority = dto.Priority;
  139. item.Remark = dto.Remark;
  140. item.Status = dto.Status;
  141. item.UpdatedTime = DateTime.Now;
  142. if (dto.Status == "已完工" && item.ActualEndDate == null)
  143. item.ActualEndDate = DateTime.Now;
  144. await _workOrderRep.AsUpdateable(item).ExecuteCommandAsync();
  145. return Ok(new { message = "更新成功" });
  146. }
  147. [HttpDelete("{id:long}")]
  148. public async Task<IActionResult> DeleteWorkOrder(long id)
  149. {
  150. var item = await _workOrderRep.GetByIdAsync(id);
  151. if (item == null)
  152. return NotFound();
  153. await _workOrderRep.DeleteAsync(item);
  154. return Ok(new { message = "删除成功" });
  155. }
  156. [HttpPost("{id:long}/complete")]
  157. public async Task<IActionResult> CompleteWorkOrder(long id, [FromBody] object? _)
  158. {
  159. var item = await _workOrderRep.GetByIdAsync(id);
  160. if (item == null)
  161. return NotFound();
  162. item.Status = "已完工";
  163. item.ActualEndDate = DateTime.Now;
  164. item.UpdatedTime = DateTime.Now;
  165. await _workOrderRep.AsUpdateable(item).ExecuteCommandAsync();
  166. return Ok(new { message = "完工成功" });
  167. }
  168. }