HolidayMasterService.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. namespace Admin.NET.Plugin.AiDOP.Production;
  2. /// <summary>
  3. /// 产线节假日(HolidayMaster)
  4. /// 路由前缀:/api/Production/holiday/...
  5. /// </summary>
  6. [ApiDescriptionSettings(Order = 269, Description = "产线节假日")]
  7. [Route("api/Production")]
  8. [AllowAnonymous]
  9. [NonUnify]
  10. public class HolidayMasterService : IDynamicApiController, ITransient
  11. {
  12. private readonly ISqlSugarClient _db;
  13. private readonly UserManager _userManager;
  14. public HolidayMasterService(ISqlSugarClient db, UserManager userManager)
  15. {
  16. _db = db;
  17. _userManager = userManager;
  18. }
  19. [DisplayName("产线节假日列表")]
  20. [HttpGet("holiday/list")]
  21. public async Task<object> GetList([FromQuery] HolidayMasterListInput input)
  22. {
  23. var tenantId = _userManager.TenantId;
  24. var pars = new List<SugarParameter> { new("@TenantId", tenantId) };
  25. var where = "h.IsActive = 1 AND h.tenant_id = @TenantId";
  26. if (!string.IsNullOrWhiteSpace(input.HolidayType))
  27. {
  28. where += " AND h.Ufld1 = @Ufld1";
  29. pars.Add(new SugarParameter("@Ufld1", input.HolidayType.Trim()));
  30. }
  31. var orderClause = ResolveOrder(input.OrderBy, input.Sort);
  32. var offset = (input.Page - 1) * input.PageSize;
  33. var baseSql = $"""
  34. SELECT
  35. h.Dated AS Dated,
  36. h.Ufld1 AS Ufld1,
  37. h.Holiday AS Holiday,
  38. h.RecID AS Id,
  39. h.`Domain` AS Domain,
  40. h.Site AS Site
  41. FROM HolidayMaster h
  42. WHERE {where}
  43. """;
  44. var total = await _db.Ado.GetIntAsync($"SELECT COUNT(*) FROM ({baseSql}) AS t", pars);
  45. var list = await _db.Ado.SqlQueryAsync<HolidayListRow>(
  46. $"SELECT * FROM ({baseSql}) AS t ORDER BY {orderClause} LIMIT {input.PageSize} OFFSET {offset}", pars);
  47. return new { total, page = input.Page, pageSize = input.PageSize, list };
  48. }
  49. [DisplayName("产线节假日详情")]
  50. [HttpGet("holiday/{id:long}")]
  51. public async Task<object> GetDetail(long id)
  52. {
  53. var tenantId = _userManager.TenantId;
  54. var row = (await _db.Ado.SqlQueryAsync<HolidayDetailRow>(
  55. """
  56. SELECT RecID AS Id, Holiday, Dated, Ufld1, `Domain`, Site
  57. FROM HolidayMaster
  58. WHERE RecID = @Id AND tenant_id = @TenantId
  59. """,
  60. new List<SugarParameter> { new("@Id", id), new("@TenantId", tenantId) })).FirstOrDefault()
  61. ?? throw Oops.Oh("记录不存在");
  62. return row;
  63. }
  64. [DisplayName("保存产线节假日")]
  65. [HttpPost("holiday/save")]
  66. public async Task<object> Save([FromBody] HolidayMasterSaveInput input)
  67. {
  68. var tenantId = _userManager.TenantId;
  69. var account = Truncate8(_userManager.Account ?? "system");
  70. var now = DateTime.Now;
  71. var holiday = Truncate(input.Holiday.Trim(), 8);
  72. var ufld1 = Truncate(input.Ufld1.Trim(), 8);
  73. var domain = Truncate(input.Domain.Trim(), 8);
  74. var site = Truncate(input.Site.Trim(), 4);
  75. var dated = input.Dated ?? throw Oops.Oh("日期不能为空");
  76. if (input.Id is null or 0)
  77. {
  78. await _db.Ado.ExecuteCommandAsync(
  79. """
  80. INSERT INTO HolidayMaster (
  81. Holiday, Dated, Ufld1, `Domain`, Site,
  82. BusinessID, IsActive, IsConfirm, IsChanged,
  83. CreateUser, CreateTime, UpdateUser, UpdateTime, tenant_id
  84. ) VALUES (
  85. @Holiday, @Dated, @Ufld1, @Domain, @Site,
  86. 0, 1, 0, 0,
  87. @User, @Now, @User, @Now, @TenantId
  88. )
  89. """,
  90. new List<SugarParameter>
  91. {
  92. new("@Holiday", holiday),
  93. new("@Dated", dated),
  94. new("@Ufld1", ufld1),
  95. new("@Domain", domain),
  96. new("@Site", site),
  97. new("@User", account),
  98. new("@Now", now),
  99. new("@TenantId", tenantId)
  100. });
  101. var newId = await _db.Ado.GetIntAsync("SELECT LAST_INSERT_ID()");
  102. return new { id = (long)newId, message = "新增成功" };
  103. }
  104. var n = await _db.Ado.ExecuteCommandAsync(
  105. """
  106. UPDATE HolidayMaster
  107. SET Holiday = @Holiday,
  108. Dated = @Dated,
  109. Ufld1 = @Ufld1,
  110. `Domain` = @Domain,
  111. Site = @Site,
  112. UpdateUser = @User,
  113. UpdateTime = @Now
  114. WHERE RecID = @Id AND tenant_id = @TenantId
  115. """,
  116. new List<SugarParameter>
  117. {
  118. new("@Id", input.Id!.Value),
  119. new("@Holiday", holiday),
  120. new("@Dated", dated),
  121. new("@Ufld1", ufld1),
  122. new("@Domain", domain),
  123. new("@Site", site),
  124. new("@User", account),
  125. new("@Now", now),
  126. new("@TenantId", tenantId)
  127. });
  128. if (n == 0)
  129. throw Oops.Oh("记录不存在或未变更");
  130. return new { id = input.Id, message = "保存成功" };
  131. }
  132. [DisplayName("删除产线节假日")]
  133. [HttpPost("holiday/delete/{id:long}")]
  134. public async Task<object> Delete(long id)
  135. {
  136. var tenantId = _userManager.TenantId;
  137. var n = await _db.Ado.ExecuteCommandAsync(
  138. "UPDATE HolidayMaster SET IsActive = 0, UpdateTime = @Now WHERE RecID = @Id AND tenant_id = @TenantId",
  139. new List<SugarParameter> { new("@Id", id), new("@Now", DateTime.Now), new("@TenantId", tenantId) });
  140. if (n == 0)
  141. throw Oops.Oh("记录不存在");
  142. return new { message = "已删除" };
  143. }
  144. private static string Truncate(string s, int maxLen) =>
  145. s.Length <= maxLen ? s : s[..maxLen];
  146. private static string Truncate8(string s) => Truncate(s, 8);
  147. private static string ResolveOrder(string? orderBy, string? sort)
  148. {
  149. var desc = string.Equals(sort?.Trim(), "desc", StringComparison.OrdinalIgnoreCase);
  150. var dir = desc ? "DESC" : "ASC";
  151. var key = orderBy?.Trim().ToLowerInvariant();
  152. var col = key switch
  153. {
  154. "holiday" => "t.Holiday",
  155. "dated" => "t.Dated",
  156. "ufld1" => "t.Ufld1",
  157. _ => "t.Dated"
  158. };
  159. return $"{col} {dir}, t.Id";
  160. }
  161. private sealed class HolidayListRow
  162. {
  163. public DateTime? Dated { get; set; }
  164. public string? Ufld1 { get; set; }
  165. public string? Holiday { get; set; }
  166. public long Id { get; set; }
  167. public string? Domain { get; set; }
  168. public string? Site { get; set; }
  169. }
  170. private sealed class HolidayDetailRow
  171. {
  172. public long Id { get; set; }
  173. public string? Holiday { get; set; }
  174. public DateTime? Dated { get; set; }
  175. public string? Ufld1 { get; set; }
  176. public string? Domain { get; set; }
  177. public string? Site { get; set; }
  178. }
  179. }