| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- using Admin.NET.Plugin.AiDOP.Manufacturing.Dto;
- namespace Admin.NET.Plugin.AiDOP.Manufacturing;
- /// <summary>
- /// S6 生产设备台账 只读 list 服务。
- ///
- /// 数据源:aidopdev.EquipmentList(设备台账主表,单表直读,无 join)。
- /// 参考本仓既有直读 + 接骨架范式:S7 FinishedWarehouse/ProductionInboundService、S5 LabelQueryService。
- ///
- /// 本服务仅 SELECT:无新增/编辑/删除/启停用/状态流转/打印/标签打印/导出/部件明细;不写 EquipmentList;不建 MDP。
- /// EquipmentList 含 tenant_id:TenantId>0 时按 tenant_id 过滤(不绕过)。当前 165 行全在 tenant 824585161322565;
- /// 默认租户 1300000000001 下 total=0 为正确隔离;真实数据渲染需切到 824585161322565。
- /// sbzt 已是中文文本 raw 展示;zyd 为 A/B/C/D 等级码 raw 展示(中文映射后置)。
- /// </summary>
- [ApiDescriptionSettings(Order = 311, Description = "生产设备台账")]
- [Route("api/S6ProductionEquipmentLedger")]
- [AllowAnonymous]
- [NonUnify]
- public class ProductionEquipmentLedgerService : IDynamicApiController, ITransient
- {
- private readonly ISqlSugarClient _db;
- public ProductionEquipmentLedgerService(ISqlSugarClient db)
- {
- _db = db;
- }
- /// <summary>
- /// 生产设备台账列表(只读分页查询)。
- /// </summary>
- [DisplayName("生产设备台账列表")]
- [HttpGet("list")]
- public async Task<object> GetList([FromQuery] ProductionEquipmentLedgerListInput input)
- {
- var page = input.Page <= 0 ? 1 : input.Page;
- var pageSize = input.PageSize <= 0 ? 10 : input.PageSize;
- if (pageSize > 200) pageSize = 200;
- var offset = (page - 1) * pageSize;
- var where = new List<string> { "1=1" };
- var pars = new List<SugarParameter>();
- if (input.TenantId is > 0)
- {
- where.Add("m.tenant_id = @TenantId");
- pars.Add(new SugarParameter("@TenantId", input.TenantId));
- }
- if (!string.IsNullOrWhiteSpace(input.EquipmentName))
- {
- where.Add("m.MachineName LIKE @EquipmentName");
- pars.Add(new SugarParameter("@EquipmentName", $"%{input.EquipmentName.Trim()}%"));
- }
- if (!string.IsNullOrWhiteSpace(input.EquipmentCode))
- {
- where.Add("m.InternalEquipmentCode LIKE @EquipmentCode");
- pars.Add(new SugarParameter("@EquipmentCode", $"%{input.EquipmentCode.Trim()}%"));
- }
- if (!string.IsNullOrWhiteSpace(input.EquipmentAssetId))
- {
- where.Add("m.EquipmentAssetID LIKE @EquipmentAssetId");
- pars.Add(new SugarParameter("@EquipmentAssetId", $"%{input.EquipmentAssetId.Trim()}%"));
- }
- var whereSql = string.Join(" AND ", where);
- var total = await _db.Ado.GetIntAsync(
- $"SELECT COUNT(1) FROM EquipmentList m WHERE {whereSql}", pars);
- var list = await _db.Ado.SqlQueryAsync<ProductionEquipmentLedgerListRow>(
- $"""
- SELECT
- m.id AS Id,
- m.MachineName AS EquipmentName,
- m.EquipmentAssetID AS EquipmentIdentCode,
- m.zyd AS Importance,
- m.ccrq AS FactoryDate,
- m.edgl AS RatedPower,
- m.zzcs AS Manufacturer,
- m.cj AS Workshop,
- m.bgr AS Keeper,
- m.StandardRepairDays AS Standard,
- m.sbczgc AS OperationProcedure,
- m.sbzt AS EquipmentStatus,
- m.yfynx AS ServedYears,
- m.bzm AS Remark,
- m.InternalEquipmentCode AS EquipmentCode,
- m.xh AS Model,
- m.fj AS Attachment,
- m.jysynx AS SuggestedUsageYears,
- m.TypeName AS EquipmentTypeName,
- m.bz AS Team,
- m.sbfl AS EquipmentCategory,
- m.IsSchedulable AS IsSchedulable,
- m.EstimatedMaintenanceReleaseTime AS EstimatedMaintenanceReleaseTime,
- m.tenant_id AS TenantId
- FROM EquipmentList m
- WHERE {whereSql}
- ORDER BY {BuildOrderBy(input.OrderBy, input.OrderDir)}
- LIMIT {pageSize} OFFSET {offset}
- """,
- pars);
- return new { total, page, pageSize, list };
- }
- /// <summary>
- /// 排序白名单:仅允许按已展示列排序,杜绝 SQL 注入;非法字段回落默认。
- /// </summary>
- private static string BuildOrderBy(string? orderBy, string? orderDir)
- {
- var column = orderBy switch
- {
- "equipmentName" => "m.MachineName",
- "equipmentCode" => "m.InternalEquipmentCode",
- "equipmentIdentCode" => "m.EquipmentAssetID",
- "importance" => "m.zyd",
- "factoryDate" => "m.ccrq",
- "ratedPower" => "m.edgl",
- "manufacturer" => "m.zzcs",
- "workshop" => "m.cj",
- "keeper" => "m.bgr",
- "standard" => "m.StandardRepairDays",
- "equipmentStatus" => "m.sbzt",
- "servedYears" => "m.yfynx",
- "suggestedUsageYears" => "m.jysynx",
- "equipmentTypeName" => "m.TypeName",
- _ => "m.id",
- };
- var direction = string.Equals(orderDir, "asc", StringComparison.OrdinalIgnoreCase) ? "ASC" : "DESC";
- return $"{column} {direction}, m.id DESC";
- }
- }
|