| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- using Admin.NET.Plugin.AiDOP.FinishedWarehouse.Dto;
- namespace Admin.NET.Plugin.AiDOP.FinishedWarehouse;
- /// <summary>
- /// S7 生产入库单列表 只读 list 服务。
- ///
- /// 数据源:aidopdev.NbrMaster ⋈ NbrDetail(Type='WOI' 生产入库、IsActive=1),忠实复刻证据 sql.txt:
- /// LEFT JOIN DepartmentMaster(部门)、ItemMaster(名称/规格/单位),明细粒度(一行一 NbrDetail)。
- /// 口径由 SQL 内定义:单据号=Nbr;入库日期=Date;状态=Status;入库类型=Remark;入库数量=QtyRec;
- /// ERP工单号=Address;相关单号=OrdNbr。排序 Nbr DESC, Line。
- /// Domain 由 GeneralizedCodeMaster(SystemConfig/CompanyCode) 解析,默认 8010。
- ///
- /// 本服务仅 SELECT:无新增/编辑/删除/入库写入/库存事务/状态流转;NbrMaster 无 tenant_id,不做租户过滤。
- /// </summary>
- [ApiDescriptionSettings(Order = 310, Description = "生产入库单列表")]
- [Route("api/S7ProductionInbound")]
- [AllowAnonymous]
- [NonUnify]
- public class ProductionInboundService : IDynamicApiController, ITransient
- {
- private readonly ISqlSugarClient _db;
- public ProductionInboundService(ISqlSugarClient db)
- {
- _db = db;
- }
- /// <summary>解析公司域(GeneralizedCodeMaster SystemConfig/CompanyCode,默认 8010)。</summary>
- private async Task<string> ResolveDomainAsync()
- {
- var list = await _db.Ado.SqlQueryAsync<string>(
- "SELECT Domain FROM GeneralizedCodeMaster WHERE FldName='SystemConfig' AND Val='CompanyCode' ORDER BY RecID LIMIT 1");
- var domain = list.FirstOrDefault();
- return string.IsNullOrWhiteSpace(domain) ? "8010" : domain;
- }
- /// <summary>
- /// 生产入库单列表(只读分页查询)。
- /// </summary>
- [DisplayName("生产入库单列表")]
- [HttpGet("list")]
- public async Task<object> GetList([FromQuery] ProductionInboundListInput input)
- {
- var page = input.Page <= 0 ? 1 : input.Page;
- var pageSize = input.PageSize <= 0 ? 10 : input.PageSize;
- var offset = (page - 1) * pageSize;
- var domain = await ResolveDomainAsync();
- var where = new List<string> { "n.Domain = @Domain", "n.Type = 'WOI'", "n.IsActive = 1" };
- var pars = new List<SugarParameter> { new("@Domain", domain) };
- if (!string.IsNullOrWhiteSpace(input.InboundNo))
- {
- where.Add("n.Nbr LIKE @InboundNo");
- pars.Add(new SugarParameter("@InboundNo", $"%{input.InboundNo.Trim()}%"));
- }
- if (!string.IsNullOrWhiteSpace(input.WorkOrderNo))
- {
- where.Add("d.WorkOrd LIKE @WorkOrderNo");
- pars.Add(new SugarParameter("@WorkOrderNo", $"%{input.WorkOrderNo.Trim()}%"));
- }
- if (!string.IsNullOrWhiteSpace(input.ErpWorkOrderNo))
- {
- where.Add("d.Address LIKE @ErpWorkOrderNo");
- pars.Add(new SugarParameter("@ErpWorkOrderNo", $"%{input.ErpWorkOrderNo.Trim()}%"));
- }
- if (!string.IsNullOrWhiteSpace(input.Batch))
- {
- where.Add("d.LotSerial LIKE @Batch");
- pars.Add(new SugarParameter("@Batch", $"%{input.Batch.Trim()}%"));
- }
- if (!string.IsNullOrWhiteSpace(input.InboundDateStart))
- {
- where.Add("n.Date >= @InboundDateStart");
- pars.Add(new SugarParameter("@InboundDateStart", $"{input.InboundDateStart.Trim()} 00:00:00"));
- }
- if (!string.IsNullOrWhiteSpace(input.InboundDateEnd))
- {
- where.Add("n.Date <= @InboundDateEnd");
- pars.Add(new SugarParameter("@InboundDateEnd", $"{input.InboundDateEnd.Trim()} 23:59:59"));
- }
- var whereSql = string.Join(" AND ", where);
- var total = await _db.Ado.GetIntAsync(
- $"SELECT COUNT(1) FROM NbrMaster n LEFT JOIN NbrDetail d ON n.Domain = d.Domain AND n.Nbr = d.Nbr WHERE {whereSql}",
- pars);
- var list = await _db.Ado.SqlQueryAsync<ProductionInboundListRow>(
- $"""
- SELECT
- n.Nbr AS InboundNo,
- d.Line AS LineNo,
- n.Date AS InboundDate,
- n.Status AS Status,
- n.Remark AS InboundType,
- d.ProdLine AS ProductionLine,
- d.WorkOrd AS WorkOrderNo,
- d.Address AS ErpWorkOrderNo,
- d.ItemNum AS MaterialCode,
- i.Descr AS MaterialName,
- i.Descr1 AS Spec,
- d.LocationTo AS InboundLocation,
- d.LotSerial AS Batch,
- d.QtyRec AS Qty,
- i.UM AS Unit,
- d.OrdNbr AS RelatedBillNo,
- d.CreateTime AS CreateTime
- FROM NbrMaster n
- LEFT JOIN NbrDetail d ON n.Domain = d.Domain AND n.Nbr = d.Nbr
- LEFT JOIN ItemMaster i ON d.Domain = i.Domain AND d.ItemNum = i.ItemNum
- WHERE {whereSql}
- ORDER BY n.Nbr DESC, d.Line
- LIMIT {pageSize} OFFSET {offset}
- """,
- pars);
- return new { total, page, pageSize, list };
- }
- }
|