132 lines
7.0 KiB
C#
132 lines
7.0 KiB
C#
namespace LaaProductionWeb.Services
|
|
{
|
|
using FluentSQLClient.Interfaces;
|
|
|
|
using LaaProductionWeb.Services.Models;
|
|
using LaaProductionWeb.Services.Interfaces;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
public class SearchService : ISearchService
|
|
{
|
|
private readonly IFluentSQLConnection fluentSQLClient;
|
|
|
|
public SearchService(IFluentSQLConnection fluentSQLClient)
|
|
=> this.fluentSQLClient = fluentSQLClient;
|
|
|
|
public IEnumerable<WildcardResult> Find(WildcardInputModel model)
|
|
{
|
|
var requiredFields = model.GetRequiredFields(this.Options());
|
|
var ordersFound = fluentSQLClient
|
|
.CreateCommand($@"
|
|
DECLARE @serienNr TABLE([Nr] VARCHAR(50));
|
|
-----------------------------------------------------------------------------
|
|
-- 1. LOOK FOR SERIAL NUMBER ------------------------------------------------
|
|
-----------------------------------------------------------------------------
|
|
INSERT INTO @serienNr
|
|
SELECT [APS].[SerienNr]
|
|
FROM [AuftragPositionSerienNr] AS [APS]
|
|
WHERE [APS].[SerienNr] LIKE @{nameof(model.Token)}
|
|
OR [APS].[KundeneigeneSerienNr] LIKE @{nameof(model.Token)}
|
|
OR REPLACE([APS].[KundeneigeneSerienNr], ' ', '') LIKE @{nameof(model.Token)};
|
|
-----------------------------------------------------------------------------
|
|
-- 2. LOOK FOR PCB NUMBER ---------------------------------------------------
|
|
-----------------------------------------------------------------------------
|
|
INSERT INTO @serienNr
|
|
SELECT [PCBS].[MapPcbIdToSerialNumber_SerialNumber]
|
|
FROM [MapPcbIdToSerialNumber] AS [PCBS]
|
|
WHERE [PCBS].[MapPcbIdToSerialNumber_PcbId] LIKE @{nameof(model.Token)};
|
|
-----------------------------------------------------------------------------
|
|
-- 3. LOOK FOR FUNK ADDRESS E-REGISTER --------------------------------------
|
|
-----------------------------------------------------------------------------
|
|
INSERT INTO @serienNr
|
|
SELECT [ER].[Seriennummer]
|
|
FROM [eRegister] AS [ER]
|
|
WHERE [ER].[Adresse] LIKE @{nameof(model.Token)};
|
|
-----------------------------------------------------------------------------
|
|
-- 4. LOOK FOR FUNK ADDRESS GENESIS -----------------------------------------
|
|
-----------------------------------------------------------------------------
|
|
INSERT INTO @serienNr
|
|
SELECT [GM].[Seriennummer]
|
|
FROM [Genesis_Meter] AS [GM]
|
|
WHERE [GM].[Adresse] LIKE @{nameof(model.Token)};
|
|
-----------------------------------------------------------------------------
|
|
-- 5. TAKE ORDERS INFO ------------------------------------------------------
|
|
-----------------------------------------------------------------------------
|
|
SELECT DISTINCT
|
|
[KN].[KundenNr] AS [CustomerNo]
|
|
, [KN].[Name] AS [Customer]
|
|
, [AP].[FertigungsauftragNr] AS [ProductionOrderNo]
|
|
, [APS].[AuftragNr] AS [CustomerOrderNo]
|
|
, [APS].[PositionNr] AS [PosNo]
|
|
, [APS].[SerienNr] AS [SerialNo]
|
|
, [APS].[KundeneigeneSerienNr] AS [CustomerSerialNo]
|
|
, [IDN].[KurzBez] AS [KurzBez]
|
|
, [IDN].[Typ] AS [Typ]
|
|
, [IDN].[Nennweite] AS [Nennweite]
|
|
, [IDN].[Baulaenge] AS [Baulaenge]
|
|
, [AP].[Menge] AS [Quantity]
|
|
, [APS].[FabNr] AS [FabricNo]
|
|
, [IDN].[IdentNr] AS [IdentNr]
|
|
, [PCBS].[MapPcbIdToSerialNumber_PcbId] AS [PcbId]
|
|
, [ER].[Adresse] AS [ErRadioAddress]
|
|
, [GM].[Adresse] AS [GmRadioAddress]
|
|
FROM [AuftragPositionSerienNr] AS [APS]
|
|
LEFT JOIN [AuftragPosition_Gesamt] AS [AP]
|
|
ON [AP].[AuftragNr] = [APS].[AuftragNr]
|
|
AND [AP].[PositionNr] = [APS].[PositionNr]
|
|
LEFT JOIN [Auftrag_Gesamt] AS [AG]
|
|
ON [AG].[AuftragNr] = [APS].[AuftragNr]
|
|
LEFT JOIN [Kunde] AS [KN]
|
|
ON [KN].[KundenNr] = [AG].[KundenNr]
|
|
LEFT JOIN [Identnr] AS [IDN]
|
|
ON [IDN].[IdentNr] = [AP].[Identnr]
|
|
LEFT JOIN [MapPcbIdToSerialNumber] AS [PCBS]
|
|
ON [PCBS].[MapPcbIdToSerialNumber_SerialNumber] = [APS].[SerienNr]
|
|
LEFT JOIN [eRegister] AS [ER]
|
|
ON [ER].[Seriennummer] = [APS].[SerienNr]
|
|
LEFT JOIN [Genesis_Meter] AS [GM]
|
|
ON [GM].[Seriennummer] = [APS].[SerienNr]
|
|
WHERE [APS].[SerienNr] IN (SELECT [Nr] FROM @serienNr)")
|
|
.SetParameter(nameof(model.Token), model.Token)
|
|
.ExecuteReader(reader => this.ToWildcardResult(reader, requiredFields));
|
|
|
|
return ordersFound;
|
|
}
|
|
|
|
public IEnumerable<string> Options()
|
|
=> new string[]
|
|
{
|
|
"CustomerNo",
|
|
"Customer",
|
|
"ProductionOrderNo",
|
|
"CustomerOrderNo",
|
|
"PosNo",
|
|
"SerialNo",
|
|
"CustomerSerialNo",
|
|
"KurzBez",
|
|
"Typ",
|
|
"Nennweite",
|
|
"Baulaenge",
|
|
"Quantity",
|
|
"FabricNo",
|
|
"IdentNr",
|
|
"PcbId",
|
|
"ErRadioAddress",
|
|
"GmRadioAddress",
|
|
};
|
|
|
|
internal WildcardResult ToWildcardResult(IFluentSQLReader reader, IEnumerable<string> fields)
|
|
{
|
|
var wildcardResult = new WildcardResult();
|
|
|
|
foreach (var field in fields)
|
|
{
|
|
wildcardResult[field] = reader.GetValue(field);
|
|
}
|
|
|
|
return wildcardResult;
|
|
}
|
|
}
|
|
}
|