ToolingLedgerService.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using Admin.NET.Plugin.AiDOP.Manufacturing.Dto;
  2. namespace Admin.NET.Plugin.AiDOP.Manufacturing;
  3. /// <summary>
  4. /// S6 模工具台账管理 只读 list 服务。
  5. ///
  6. /// 数据源:aidopdev.MoldToolList(模工具台账),忠实复刻证据 sql.txt(select * from MoldToolList),
  7. /// 列映射见字段配置图:类型=lx / 名称=MoldName / 供应商名=gysmc / 数量=MoldCount / 功能应用名称=gnyymc /
  8. /// 模具类型编码=MoldTypeCode / 对应产品物料编码=product_material_code / 图纸号=product_drawing_number /
  9. /// 产品名称=product_name / 工序=process。lx 含 模具 / 工装 / 检具(同表同页同源,类型下拉可筛选)。
  10. /// sql.txt 无 WHERE,本服务不按 tenant_id/Domain 过滤(与旧系统全表查询一致)。排序 id DESC。
  11. ///
  12. /// 本服务仅 SELECT:无新增/编辑/删除/写入;MoldToolList 有 tenant_id 但不据其过滤(透传参数)。
  13. /// </summary>
  14. [ApiDescriptionSettings(Order = 320, Description = "模工具台账管理")]
  15. [Route("api/S6ToolingLedger")]
  16. [AllowAnonymous]
  17. [NonUnify]
  18. public class ToolingLedgerService : IDynamicApiController, ITransient
  19. {
  20. private readonly ISqlSugarClient _db;
  21. public ToolingLedgerService(ISqlSugarClient db)
  22. {
  23. _db = db;
  24. }
  25. /// <summary>
  26. /// 模工具台账列表(只读分页查询)。
  27. /// </summary>
  28. [DisplayName("模工具台账列表")]
  29. [HttpGet("list")]
  30. public async Task<object> GetList([FromQuery] ToolingLedgerListInput input)
  31. {
  32. var page = input.Page <= 0 ? 1 : input.Page;
  33. var pageSize = input.PageSize <= 0 ? 10 : input.PageSize;
  34. var offset = (page - 1) * pageSize;
  35. var where = new List<string> { "1=1" };
  36. var pars = new List<SugarParameter>();
  37. if (!string.IsNullOrWhiteSpace(input.Name))
  38. {
  39. where.Add("m.MoldName LIKE @Name");
  40. pars.Add(new SugarParameter("@Name", $"%{input.Name.Trim()}%"));
  41. }
  42. if (!string.IsNullOrWhiteSpace(input.WorkGroup))
  43. {
  44. where.Add("m.gnyymc LIKE @WorkGroup");
  45. pars.Add(new SugarParameter("@WorkGroup", $"%{input.WorkGroup.Trim()}%"));
  46. }
  47. if (!string.IsNullOrWhiteSpace(input.UsageDept))
  48. {
  49. where.Add("m.MoldUsingDepartment LIKE @UsageDept");
  50. pars.Add(new SugarParameter("@UsageDept", $"%{input.UsageDept.Trim()}%"));
  51. }
  52. if (!string.IsNullOrWhiteSpace(input.Type))
  53. {
  54. where.Add("m.lx = @Type");
  55. pars.Add(new SugarParameter("@Type", input.Type.Trim()));
  56. }
  57. if (!string.IsNullOrWhiteSpace(input.MoldTypeCode))
  58. {
  59. where.Add("m.MoldTypeCode LIKE @MoldTypeCode");
  60. pars.Add(new SugarParameter("@MoldTypeCode", $"%{input.MoldTypeCode.Trim()}%"));
  61. }
  62. var whereSql = string.Join(" AND ", where);
  63. var total = await _db.Ado.GetIntAsync($"SELECT COUNT(1) FROM MoldToolList m WHERE {whereSql}", pars);
  64. var list = await _db.Ado.SqlQueryAsync<ToolingLedgerListRow>(
  65. $"""
  66. SELECT
  67. m.id AS Id,
  68. m.lx AS Type,
  69. m.MoldName AS Name,
  70. m.gysmc AS SupplierName,
  71. m.MoldCount AS Qty,
  72. m.gnyymc AS FunctionAppName,
  73. m.MoldTypeCode AS MoldTypeCode,
  74. m.product_material_code AS ProductMaterialCode,
  75. m.product_drawing_number AS ProductDrawingNo,
  76. m.product_name AS ProductName,
  77. m.process AS Process
  78. FROM MoldToolList m
  79. WHERE {whereSql}
  80. ORDER BY m.id DESC
  81. LIMIT {pageSize} OFFSET {offset}
  82. """,
  83. pars);
  84. return new { total, page, pageSize, list };
  85. }
  86. /// <summary>
  87. /// 类型下拉选项(MoldToolList.lx distinct:模具 / 工装 / 检具,只读)。
  88. /// </summary>
  89. [DisplayName("模工具台账类型选项")]
  90. [HttpGet("type-options")]
  91. public async Task<object> GetTypeOptions()
  92. {
  93. var list = await _db.Ado.SqlQueryAsync<ToolingLedgerTypeOption>(
  94. """
  95. SELECT DISTINCT lx AS Val
  96. FROM MoldToolList
  97. WHERE IFNULL(lx,'') <> ''
  98. ORDER BY lx
  99. """);
  100. return list;
  101. }
  102. }