722 lines
45 KiB
C#
722 lines
45 KiB
C#
using Logic.ProductionToProductMapper.Cordonel;
|
|
using Service.Core;
|
|
using System;
|
|
using System.Data;
|
|
using System.Net;
|
|
using System.Net.Http;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Web.Http;
|
|
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
|
|
|
|
namespace Xylem.Common.Service.MeterProcessState.Controllers
|
|
{
|
|
|
|
[RoutePrefix("api/Marriage")]
|
|
public class MarriageController : ApiController
|
|
{
|
|
public static class GlobalConfig
|
|
{
|
|
public static Lazy<string> connectionString = new Lazy<string>(()
|
|
=>
|
|
System.Configuration.ConfigurationManager.ConnectionStrings["default"].ConnectionString
|
|
);
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// Get PcbID from SerialNumber
|
|
/// </summary>
|
|
/// <param name="SerialNumber">can be Customer or internal serial number</param>
|
|
/// <returns></returns>
|
|
[Route("GetPcbId"), HttpGet]
|
|
public async Task<HttpResponseMessage> GetPcbID(string SerialNumber)
|
|
{
|
|
try
|
|
{
|
|
return await Task.Run(() =>
|
|
{
|
|
int internalSerialNumber = 0;
|
|
|
|
int.TryParse(SerialNumber, out internalSerialNumber);
|
|
int? fromOrderData = null;
|
|
if (internalSerialNumber == 0)
|
|
{
|
|
fromOrderData = getSerialNumberFromOrderData(SerialNumber);
|
|
if (fromOrderData.HasValue)
|
|
{
|
|
internalSerialNumber = fromOrderData.Value;
|
|
}
|
|
}
|
|
using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value))
|
|
{
|
|
var sb = new StringBuilder();
|
|
sb.AppendLine($" SELECT distinct [MapPcbIdToSerialNumber_PcbId]");
|
|
sb.AppendLine($" FROM [Auftrag].[dbo].[MapPcbIdToSerialNumber]");
|
|
sb.AppendLine($" where [MapPcbIdToSerialNumber_SerialNumber] = {internalSerialNumber}");
|
|
|
|
var MapData = dataacces.ExecuteQuery(sb.ToString());
|
|
if (MapData.Rows.Count != 1)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.InternalServerError, "Can not find unique PcbId for your request");
|
|
}
|
|
return Request.CreateResponse(HttpStatusCode.OK, MapData.Rows[0]["MapPcbIdToSerialNumber_PcbId"].ToString());
|
|
}
|
|
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.InternalServerError, ex);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Get SerialNumber from PcbID
|
|
/// </summary>
|
|
/// <param name="PcbID">PcbID from Meter</param>
|
|
/// <returns></returns>
|
|
[Route("GetSerialNumber"), HttpGet]
|
|
public async Task<HttpResponseMessage> GetSerialNumber(string PcbID)
|
|
{
|
|
try
|
|
{
|
|
return await Task.Run(() =>
|
|
{
|
|
using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value))
|
|
{
|
|
var sb = new StringBuilder();
|
|
sb.AppendLine($" SELECT distinct [MapPcbIdToSerialNumber_SerialNumber] ");
|
|
sb.AppendLine($" FROM [Auftrag].[dbo].[MapPcbIdToSerialNumber]");
|
|
sb.AppendLine($" where [MapPcbIdToSerialNumber_PcbId] = '{PcbID}'");
|
|
|
|
var MapData = dataacces.ExecuteQuery(sb.ToString());
|
|
if (MapData.Rows.Count != 1)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.InternalServerError, "Can not find unique serial number for your request");
|
|
}
|
|
return Request.CreateResponse(HttpStatusCode.OK, MapData.Rows[0]["MapPcbIdToSerialNumber_SerialNumber"].ToString());
|
|
}
|
|
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.InternalServerError, ex);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// Get SerialNumber from PcbID
|
|
/// </summary>
|
|
/// <param name="PcbID">PcbID from Meter</param>
|
|
/// <returns></returns>
|
|
[Route("GetSerialNumberAndOrderNumber"), HttpGet]
|
|
public async Task<HttpResponseMessage> GetSerialNumberAndOrderNumber(string PcbID, bool withRadioAdress = false)
|
|
{
|
|
try
|
|
{
|
|
return await Task.Run(() =>
|
|
{
|
|
using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value))
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
sb.AppendLine($" SELECT distinct [MapPcbIdToSerialNumber_SerialNumber], mapOrder.CordonelAssignedPicking_FertigungsAuftragsNr ,KundeneigeneSerienNr as CustomerSerialNr ");
|
|
|
|
if (withRadioAdress)
|
|
{
|
|
sb.AppendLine($" , meter.[Adresse] ");
|
|
}
|
|
|
|
|
|
sb.AppendLine($" FROM Auftrag.dbo.Cordonel_AssignedPicking mapOrder ");
|
|
sb.AppendLine($" left outer join [Auftrag].[dbo].[MapPcbIdToSerialNumber] map on mapOrder.CordonelAssignedPicking_PcbId = map.MapPcbIdToSerialNumber_PcbId and MapPcbIdToSerialNumber_Deleted = 0 ");
|
|
sb.AppendLine($" left outer join Auftrag.dbo.AuftragPositionSerienNr mapSrn on map.[MapPcbIdToSerialNumber_SerialNumber] = mapSrn.SerienNr and mapSrn.Pruefgangnr = 0 ");
|
|
sb.AppendLine($" left outer join Auftrag.dbo.AuftragPosition_gesamt auftraginfo on auftraginfo.AuftragNr = mapSrn.AuftragNr and auftraginfo.PositionNr = mapSrn.PositionNr ");
|
|
if (withRadioAdress)
|
|
{
|
|
sb.AppendLine($" left outer join [Auftrag].[dbo].[Genesis_Meter] meter on meter.Seriennummer = MapPcbIdToSerialNumber_SerialNumber ");
|
|
}
|
|
|
|
sb.AppendLine($" where mapOrder.CordonelAssignedPicking_IsDeleted = 0 and mapOrder.CordonelAssignedPicking_PcbId = '{PcbID}'");
|
|
|
|
var MapData = dataacces.ExecuteQuery(sb.ToString());
|
|
if (MapData.Rows.Count != 1)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.OK, new String[] { string.Empty, string.Empty, string.Empty });
|
|
//return Request.CreateResponse(HttpStatusCode.InternalServerError, "Can not find unique serial number for your request");
|
|
}
|
|
|
|
var ret = new String[] { MapData.Rows[0]["MapPcbIdToSerialNumber_SerialNumber"].ToString(), MapData.Rows[0]["CordonelAssignedPicking_FertigungsAuftragsNr"].ToString() };
|
|
if (withRadioAdress)
|
|
{
|
|
ret = new String[] { MapData.Rows[0]["MapPcbIdToSerialNumber_SerialNumber"].ToString(), MapData.Rows[0]["CordonelAssignedPicking_FertigungsAuftragsNr"].ToString(), MapData.Rows[0]["Adresse"].ToString(), MapData.Rows[0]["CustomerSerialNr"].ToString(), };
|
|
}
|
|
return Request.CreateResponse(HttpStatusCode.OK, ret);
|
|
}
|
|
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.InternalServerError, ex);
|
|
}
|
|
|
|
}
|
|
|
|
private int? getSerialNumberFromOrderData(string CustomerSerialNumber = null, int? SerialNumber = null, int? OrderNumber = null)
|
|
{
|
|
using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value))
|
|
{
|
|
var sb = new StringBuilder();
|
|
|
|
sb.AppendLine($" Declare @CustomerSerialNumber Nvarchar(50) ");
|
|
sb.AppendLine($" Declare @SerialNumber int ");
|
|
sb.AppendLine($" Declare @OrderNumber int ");
|
|
|
|
if (SerialNumber.HasValue)
|
|
{
|
|
sb.AppendLine($" set @SerialNumber = {SerialNumber} ");
|
|
}
|
|
|
|
if (OrderNumber.HasValue)
|
|
{
|
|
sb.AppendLine($" set @OrderNumber = {OrderNumber} ");
|
|
}
|
|
|
|
sb.AppendLine($" set @CustomerSerialNumber = '{CustomerSerialNumber}' ");
|
|
|
|
sb.AppendLine($"SELECT DISTINCT ");
|
|
sb.AppendLine($" [SerienNr] ");
|
|
sb.AppendLine($" ,[AuftragNr] ");
|
|
sb.AppendLine($" ,[PositionNr] ");
|
|
sb.AppendLine($" ,[KundeneigeneSerienNr] ");
|
|
sb.AppendLine($"FROM [Auftrag].[dbo].[AuftragPositionSerienNr] ");
|
|
sb.AppendLine($"WHERE (@SerialNumber IS NULL OR[SerienNr] = @SerialNumber) ");
|
|
sb.AppendLine($"AND (@CustomerSerialNumber IS NULL OR REPLACE(KundeneigeneSerienNr, ' ', '') like '%{CustomerSerialNumber}%' ) ");
|
|
sb.AppendLine($"AND (@OrderNumber IS NULL OR[AuftragNr] = @OrderNumber) ");
|
|
|
|
var OrderData = dataacces.ExecuteQuery(sb.ToString());
|
|
if (OrderData.Rows.Count != 1)
|
|
{
|
|
return null;
|
|
}
|
|
var tmpInt = 0;
|
|
int.TryParse(OrderData.Rows[0]["SerienNr"].ToString(), out tmpInt);
|
|
return tmpInt;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Route("GetSerialNumberFromOrderDataUnMapped"), HttpGet]
|
|
public async Task<HttpResponseMessage> GetSerialNumberFromOrderDataUnMapped(int OrderNumber)
|
|
{
|
|
|
|
using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value))
|
|
{
|
|
var sb = new StringBuilder();
|
|
|
|
|
|
sb.AppendLine($" Declare @OrderNumber int ");
|
|
|
|
sb.AppendLine($" set @OrderNumber = {OrderNumber} ");
|
|
|
|
sb.AppendLine($" SELECT top 1 ");
|
|
sb.AppendLine($" [SerienNr] ");
|
|
sb.AppendLine($" ,aps.[AuftragNr] ");
|
|
sb.AppendLine($" ,aps.[PositionNr] ");
|
|
sb.AppendLine($" ,[KundeneigeneSerienNr] ");
|
|
sb.AppendLine($" ,MapPcbIdToSerialNumber_PcbId ");
|
|
sb.AppendLine($" FROM[Auftrag].[dbo].[AuftragPositionSerienNr] ");
|
|
sb.AppendLine($" aps ");
|
|
sb.AppendLine($" inner join AuftragPosition_Gesamt a on aps.AuftragNr = a.AuftragNr and aps.PositionNr = a.PositionNr ");
|
|
sb.AppendLine($" left outer join MapPcbIdToSerialNumber on[SerienNr] = MapPcbIdToSerialNumber_SerialNumber ");
|
|
sb.AppendLine($" Where(a.FertigungsauftragNr = @OrderNumber) ");
|
|
sb.AppendLine($" and MapPcbIdToSerialNumber_PcbId is null ");
|
|
sb.AppendLine($" order by[SerienNr] desc ");
|
|
|
|
|
|
|
|
|
|
var OrderData = dataacces.ExecuteQuery(sb.ToString());
|
|
if (OrderData.Rows.Count != 1)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return Request.CreateResponse(HttpStatusCode.OK, OrderData.Rows[0]["SerienNr"].ToString());
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
[Route("GetPreMarriageStateMSG"), HttpGet]
|
|
public async Task<HttpResponseMessage> GetPreMarriageState(string PcbId)
|
|
{
|
|
try
|
|
{
|
|
return await Task.Run(() =>
|
|
{
|
|
try
|
|
{
|
|
var retSerial = "";
|
|
var retOrder = "";
|
|
var retFreeSrn = "";
|
|
var internalSerialNr = -1;
|
|
|
|
using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value))
|
|
{
|
|
var sb = new StringBuilder();
|
|
|
|
sb = new StringBuilder();
|
|
|
|
sb.AppendLine($" Declare @SerialNumber int ");
|
|
sb.AppendLine($" Declare @PcbId Nvarchar(50) ");
|
|
sb.AppendLine($" Declare @PcbIsPartOfOrder int ");
|
|
sb.AppendLine($" Declare @LastHeTest int ");
|
|
sb.AppendLine($" Declare @LastPressureTest int ");
|
|
|
|
sb.AppendLine($" set @SerialNumber = {internalSerialNr} ");
|
|
sb.AppendLine($" set @PcbId = '{PcbId}' ");
|
|
|
|
sb.AppendLine($" select @PcbIsPartOfOrder = picking.CordonelAssignedPicking_FertigungsAuftragsNr, @SerialNumber = srn.SerienNr from ");
|
|
sb.AppendLine($" Cordonel_AssignedPicking picking ");
|
|
|
|
sb.AppendLine($" inner join AuftragPosition_gesamt apos on apos.FertigungsauftragNr=picking.CordonelAssignedPicking_FertigungsAuftragsNr ");
|
|
sb.AppendLine($" inner join AuftragPositionSerienNr srn on apos.AuftragNr=srn.AuftragNr and apos.PositionNr=srn.PositionNr ");
|
|
|
|
|
|
|
|
sb.AppendLine($" where picking.CordonelAssignedPicking_IsDeleted=0 and picking.CordonelAssignedPicking_PcbId=@PcbId ");
|
|
|
|
|
|
sb.AppendLine($" select top 1 @LastHeTest = CordonelPressureTest_Id from Cordonel_PressureTest ");
|
|
sb.AppendLine($" where CordonelPressureTest_PcbId = @PcbId and CordonelPressureTest_FertigungsAuftragsNr = @PcbIsPartOfOrder ");
|
|
sb.AppendLine($" and CordonelPressureTest_Valid = 1 and CordonelPressureTest_IsDeleted = 0 ");
|
|
sb.AppendLine($" ");
|
|
sb.AppendLine($" select top 1 @LastPressureTest = [Pruefgang] from [Druckpruefung] ");
|
|
sb.AppendLine($" where [FabNr] = @PcbId and [FertigungsauftragNr] = @PcbIsPartOfOrder ");
|
|
sb.AppendLine($" and [Dicht] = 1 ");
|
|
sb.AppendLine($" order by [Pruefgang] desc ");
|
|
|
|
|
|
|
|
sb.AppendLine($" DECLARE @FreeSrnList varchar(max) ");
|
|
sb.AppendLine($" SELECT @FreeSrnList = COALESCE(@FreeSrnList + ', ', '') + ");
|
|
sb.AppendLine($" CAST(FreeSrn AS varchar(10)) ");
|
|
sb.AppendLine($" FROM(select distinct SerienNr as FreeSrn from ");
|
|
sb.AppendLine($" AuftragPosition_gesamt apos ");
|
|
sb.AppendLine($" inner join AuftragPositionSerienNr srn on apos.AuftragNr = srn.AuftragNr and apos.PositionNr = srn.PositionNr ");
|
|
sb.AppendLine($" left outer join MapPcbIdToSerialNumber map on map.MapPcbIdToSerialNumber_SerialNumber = SerienNr and map.MapPcbIdToSerialNumber_Deleted = 0 ");
|
|
sb.AppendLine($" where apos.FertigungsauftragNr = @PcbIsPartOfOrder ");
|
|
sb.AppendLine($" and map.MapPcbIdToSerialNumber_SerialNumber is null) ");
|
|
sb.AppendLine($" as Free ");
|
|
|
|
|
|
|
|
|
|
sb.AppendLine($" select @PcbId as PcbId, @SerialNumber as SerialNumber,0 as AlreadyMarried ,0 as SerialNumberBlocked ,0 as PcbBlocked ,@PcbIsPartOfOrder as PcbIsPartOfOrder, @LastHeTest as LastHeTest, @LastPressureTest as LastPressureTest, @FreeSrnList as FreeSrn ");
|
|
sb.AppendLine($" union ");
|
|
sb.AppendLine($" SELECT distinct ");
|
|
sb.AppendLine($" [MapPcbIdToSerialNumber_PcbId] as PcbId ");
|
|
sb.AppendLine($" ,[MapPcbIdToSerialNumber_SerialNumber] as SerialNumber ");
|
|
sb.AppendLine($" ,CASE WHEN [MapPcbIdToSerialNumber_PcbId] = @PcbId and [MapPcbIdToSerialNumber_SerialNumber] = @SerialNumber ");
|
|
sb.AppendLine($" THEN 1 else 0 END as AlreadyMarried ");
|
|
sb.AppendLine($" ,CASE WHEN [MapPcbIdToSerialNumber_PcbId] <> @PcbId and [MapPcbIdToSerialNumber_SerialNumber] = @SerialNumber ");
|
|
sb.AppendLine($" THEN 1 else 0 END as SerialNumberBlocked ");
|
|
sb.AppendLine($" ,CASE WHEN [MapPcbIdToSerialNumber_PcbId] = @PcbId and [MapPcbIdToSerialNumber_SerialNumber] <> @SerialNumber ");
|
|
sb.AppendLine($" THEN 1 else 0 END as PcbBlocked , ");
|
|
sb.AppendLine($" @PcbIsPartOfOrder as PcbIsPartOfOrder , ");
|
|
sb.AppendLine($" @LastHeTest as LastHeTest , ");
|
|
sb.AppendLine($" @LastPressureTest as LastPressureTest, null as FreeSrn ");
|
|
sb.AppendLine($" FROM [Auftrag].[dbo].[MapPcbIdToSerialNumber] ");
|
|
sb.AppendLine($" where MapPcbIdToSerialNumber_Deleted = 0 ");
|
|
sb.AppendLine($" and ([MapPcbIdToSerialNumber_PcbId] = @PcbId or [MapPcbIdToSerialNumber_SerialNumber] = @SerialNumber) ");
|
|
|
|
|
|
|
|
|
|
var dtRet = dataacces.ExecuteQuery(sb.ToString());
|
|
var ret = MarriagePossibleEnum.None;
|
|
if (dtRet.Rows.Count == 0)
|
|
{
|
|
ret = ret | MarriagePossibleEnum.Error;
|
|
}
|
|
foreach (var item in dtRet.Rows)
|
|
{
|
|
if (item is DataRow dr)
|
|
{
|
|
|
|
if (!string.IsNullOrEmpty(dr["SerialNumber"].ToString()) && dr["SerialNumber"].ToString() != "-1")
|
|
{
|
|
retSerial = retSerial + dr["SerialNumber"].ToString() + ";";
|
|
}
|
|
|
|
if (string.IsNullOrEmpty(dr["PcbIsPartOfOrder"].ToString()))
|
|
{
|
|
ret = ret | MarriagePossibleEnum.PcbNotMatchingOrder;
|
|
}
|
|
else
|
|
{
|
|
retOrder = retOrder + dr["PcbIsPartOfOrder"].ToString() + ";";
|
|
}
|
|
if (!string.IsNullOrEmpty(dr["FreeSrn"].ToString()))
|
|
{
|
|
retFreeSrn = retFreeSrn + dr["FreeSrn"].ToString() + ";";
|
|
}
|
|
|
|
if (dr["AlreadyMarried"].ToString() == "1")
|
|
{
|
|
ret = ret | MarriagePossibleEnum.NotPossibleDueAlredayMatch;
|
|
}
|
|
|
|
if (dr["SerialNumberBlocked"].ToString() == "1")
|
|
{
|
|
ret = ret | MarriagePossibleEnum.NotPossibleDueSerialNumberBlocked;
|
|
}
|
|
if (dr["PcbBlocked"].ToString() == "1")
|
|
{
|
|
ret = ret | MarriagePossibleEnum.NotPossibleDuePcblocked;
|
|
}
|
|
|
|
if (dr["PcbBlocked"].ToString() == "1")
|
|
{
|
|
ret = ret | MarriagePossibleEnum.NotPossibleDuePcblocked;
|
|
}
|
|
|
|
if (dr["LastHeTest"] == DBNull.Value)
|
|
{
|
|
ret = ret | MarriagePossibleEnum.NotPossibleDueNoHeTestFound;
|
|
}
|
|
if (dr["LastPressureTest"] == DBNull.Value)
|
|
{
|
|
ret = ret | MarriagePossibleEnum.NotPossibleDueNoPressureTestFound;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (ret == MarriagePossibleEnum.None)
|
|
{
|
|
|
|
ret = MarriagePossibleEnum.Possible;
|
|
}
|
|
return Request.CreateResponse(HttpStatusCode.OK, new object[] { ret , retOrder, retSerial, retFreeSrn });
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.OK, new object[] { MarriagePossibleEnum.Error, null, null, null } );
|
|
}
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.InternalServerError, ex);
|
|
}
|
|
}
|
|
|
|
|
|
[Route("GetPreMarriageState"), HttpGet]
|
|
public async Task<HttpResponseMessage> GetPreMarriageState(string PcbId, string SerialNumber)
|
|
{
|
|
try
|
|
{
|
|
return await Task.Run(() =>
|
|
{
|
|
try
|
|
{
|
|
var internalSerialNr = -1;
|
|
var cust = "";
|
|
if (!ScanToSerialNr.ConvertScanToSerialNr(SerialNumber, out internalSerialNr, out cust))
|
|
{
|
|
|
|
}
|
|
|
|
|
|
using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value))
|
|
{
|
|
var sb = new StringBuilder();
|
|
|
|
sb = new StringBuilder();
|
|
|
|
sb.AppendLine($" Declare @SerialNumber int ");
|
|
sb.AppendLine($" Declare @PcbId Nvarchar(50) ");
|
|
sb.AppendLine($" Declare @PcbIsPartOfOrder int ");
|
|
sb.AppendLine($" Declare @LastHeTest int ");
|
|
sb.AppendLine($" Declare @LastPressureTest int ");
|
|
|
|
sb.AppendLine($" set @SerialNumber = {internalSerialNr} ");
|
|
sb.AppendLine($" set @PcbId = '{PcbId}' ");
|
|
|
|
sb.AppendLine($" select @PcbIsPartOfOrder = picking.CordonelAssignedPicking_FertigungsAuftragsNr, @SerialNumber = srn.SerienNr from ");
|
|
sb.AppendLine($" Cordonel_AssignedPicking picking ");
|
|
|
|
sb.AppendLine($" inner join AuftragPosition_gesamt apos on apos.FertigungsauftragNr=picking.CordonelAssignedPicking_FertigungsAuftragsNr ");
|
|
sb.AppendLine($" inner join AuftragPositionSerienNr srn on apos.AuftragNr=srn.AuftragNr and apos.PositionNr=srn.PositionNr and ");
|
|
|
|
if (internalSerialNr != -1)
|
|
{
|
|
sb.AppendLine($" srn.SerienNr=@SerialNumber ");
|
|
}
|
|
else
|
|
{
|
|
sb.AppendLine($" REPLACE(srn.KundeneigeneSerienNr, ' ', '') like '%{cust}%' ");
|
|
}
|
|
|
|
sb.AppendLine($" where picking.CordonelAssignedPicking_IsDeleted=0 and picking.CordonelAssignedPicking_PcbId=@PcbId ");
|
|
|
|
|
|
sb.AppendLine($" select top 1 @LastHeTest = CordonelPressureTest_Id from Cordonel_PressureTest ");
|
|
sb.AppendLine($" where CordonelPressureTest_PcbId = @PcbId and CordonelPressureTest_FertigungsAuftragsNr = @PcbIsPartOfOrder ");
|
|
sb.AppendLine($" and CordonelPressureTest_Valid = 1 and CordonelPressureTest_IsDeleted = 0 ");
|
|
sb.AppendLine($" ");
|
|
sb.AppendLine($" select top 1 @LastPressureTest = [Pruefgang] from [Druckpruefung] ");
|
|
sb.AppendLine($" where [FabNr] = @PcbId and [FertigungsauftragNr] = @PcbIsPartOfOrder ");
|
|
sb.AppendLine($" and [Dicht] = 1 ");
|
|
sb.AppendLine($" order by [Pruefgang] desc ");
|
|
|
|
|
|
|
|
sb.AppendLine($" select @PcbId as PcbId, @SerialNumber as SerialNumber,0 as AlreadyMarried ,0 as SerialNumberBlocked ,0 as PcbBlocked ,@PcbIsPartOfOrder as PcbIsPartOfOrder, @LastHeTest as LastHeTest, @LastPressureTest as LastPressureTest ");
|
|
sb.AppendLine($" union ");
|
|
sb.AppendLine($" SELECT distinct ");
|
|
sb.AppendLine($" [MapPcbIdToSerialNumber_PcbId] as PcbId ");
|
|
sb.AppendLine($" ,[MapPcbIdToSerialNumber_SerialNumber] as SerialNumber ");
|
|
sb.AppendLine($" ,CASE WHEN [MapPcbIdToSerialNumber_PcbId] = @PcbId and [MapPcbIdToSerialNumber_SerialNumber] = @SerialNumber ");
|
|
sb.AppendLine($" THEN 1 else 0 END as AlreadyMarried ");
|
|
sb.AppendLine($" ,CASE WHEN [MapPcbIdToSerialNumber_PcbId] <> @PcbId and [MapPcbIdToSerialNumber_SerialNumber] = @SerialNumber ");
|
|
sb.AppendLine($" THEN 1 else 0 END as SerialNumberBlocked ");
|
|
sb.AppendLine($" ,CASE WHEN [MapPcbIdToSerialNumber_PcbId] = @PcbId and [MapPcbIdToSerialNumber_SerialNumber] <> @SerialNumber ");
|
|
sb.AppendLine($" THEN 1 else 0 END as PcbBlocked , ");
|
|
sb.AppendLine($" @PcbIsPartOfOrder as PcbIsPartOfOrder , ");
|
|
sb.AppendLine($" @LastHeTest as LastHeTest , ");
|
|
sb.AppendLine($" @LastPressureTest as LastPressureTest ");
|
|
sb.AppendLine($" FROM [Auftrag].[dbo].[MapPcbIdToSerialNumber] ");
|
|
sb.AppendLine($" where MapPcbIdToSerialNumber_Deleted = 0 ");
|
|
sb.AppendLine($" and ([MapPcbIdToSerialNumber_PcbId] = @PcbId or [MapPcbIdToSerialNumber_SerialNumber] = @SerialNumber) ");
|
|
|
|
|
|
|
|
|
|
var dtRet = dataacces.ExecuteQuery(sb.ToString());
|
|
var ret = MarriagePossibleEnum.None;
|
|
if (dtRet.Rows.Count == 0)
|
|
{
|
|
ret = ret | MarriagePossibleEnum.Error;
|
|
}
|
|
foreach (var item in dtRet.Rows)
|
|
{
|
|
if (item is DataRow dr)
|
|
{
|
|
if (string.IsNullOrEmpty(dr["PcbIsPartOfOrder"].ToString()))
|
|
{
|
|
ret = ret | MarriagePossibleEnum.PcbNotMatchingOrder;
|
|
}
|
|
|
|
if (dr["AlreadyMarried"].ToString() == "1")
|
|
{
|
|
ret = ret | MarriagePossibleEnum.NotPossibleDueToAlreadyMarried;
|
|
}
|
|
|
|
if (dr["SerialNumberBlocked"].ToString() == "1")
|
|
{
|
|
ret = ret | MarriagePossibleEnum.NotPossibleDueSerialNumberBlocked;
|
|
}
|
|
if (dr["PcbBlocked"].ToString() == "1")
|
|
{
|
|
ret = ret | MarriagePossibleEnum.NotPossibleDuePcbLocked;
|
|
}
|
|
|
|
if (dr["PcbBlocked"].ToString() == "1")
|
|
{
|
|
ret = ret | MarriagePossibleEnum.NotPossibleDuePcblocked;
|
|
}
|
|
|
|
if (dr["LastHeTest"] == DBNull.Value)
|
|
{
|
|
ret = ret | MarriagePossibleEnum.NotPossibleDueNoHeTestFound;
|
|
}
|
|
if (dr["LastPressureTest"] == DBNull.Value)
|
|
{
|
|
ret = ret | MarriagePossibleEnum.NotPossibleDueNoPressureTestFound;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (ret == MarriagePossibleEnum.None)
|
|
{
|
|
|
|
ret = MarriagePossibleEnum.Possible;
|
|
}
|
|
return Request.CreateResponse(HttpStatusCode.OK, ret);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.OK, MarriagePossibleEnum.Error);
|
|
}
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.InternalServerError, ex);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Set mapping to production database for PcbId and (sensus) Serial number
|
|
/// Serial number can be internal <see cref="SerialNumber"/> or Customer serial number <see cref="CustomerSerialNumber"/>
|
|
/// Checking if Serial number exists and if OrderNumer is not null, if the serial number is part of the Order
|
|
/// </summary>
|
|
/// <param name="PcbId">PcbId to map, currently it is a string</param>
|
|
/// <param name="SerialNumber"> SerialNumber to map</param>
|
|
/// <param name="OrderNumber">if not null checks if the serial number is part of the order</param>
|
|
/// <returns></returns>
|
|
|
|
[Route("SetPcbToSerial"), HttpGet]
|
|
public async Task<HttpResponseMessage> SetPcbToSerial(string PcbId, string Scan = null, string CustomerSerialNumber = null, int? SerialNumber = null, int? OrderNumber = null, bool returnMetroData = false)
|
|
{
|
|
try
|
|
{
|
|
return await Task.Run(() =>
|
|
{
|
|
try
|
|
{
|
|
if (!string.IsNullOrEmpty(Scan))
|
|
{
|
|
|
|
var internalSerialNr = -1;
|
|
string cust = null;
|
|
if (ScanToSerialNr.ConvertScanToSerialNr(Scan, out internalSerialNr, out cust))
|
|
{
|
|
if (internalSerialNr != -1)
|
|
{
|
|
SerialNumber = internalSerialNr;
|
|
}
|
|
else
|
|
{
|
|
CustomerSerialNumber = cust;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!string.IsNullOrEmpty(cust))
|
|
{
|
|
CustomerSerialNumber = cust;
|
|
}
|
|
}
|
|
|
|
}
|
|
if (CustomerSerialNumber == null && SerialNumber == null)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.InternalServerError, "Could not store mapping, because not SerialNumber and not CustomerSerialNumber is present. Please check your request");
|
|
}
|
|
using (var dataacces = new SqlDataAccess(GlobalConfig.connectionString.Value))
|
|
{
|
|
var sb = new StringBuilder();
|
|
|
|
var SerialNumberFromOrder = getSerialNumberFromOrderData(CustomerSerialNumber, SerialNumber, OrderNumber);
|
|
|
|
if (!SerialNumberFromOrder.HasValue && !SerialNumber.HasValue)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.InternalServerError, "Can not find unique serial number for your request");
|
|
}
|
|
|
|
//If SerialNumber is empty get it from order data (mapped by CustomerSerialNumber)
|
|
if (!SerialNumber.HasValue)
|
|
{
|
|
SerialNumber = SerialNumberFromOrder.Value;
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
sb = new StringBuilder();
|
|
sb.AppendLine($" Declare @SerialNumber int ");
|
|
sb.AppendLine($" Declare @PcbId Nvarchar(50) ");
|
|
sb.AppendLine($" ");
|
|
sb.AppendLine($" set @SerialNumber = {SerialNumber} ");
|
|
sb.AppendLine($" set @PcbId = '{PcbId}' ");
|
|
sb.AppendLine($" ");
|
|
sb.AppendLine($" SELECT distinct[MapPcbIdToSerialNumber_Id] ");
|
|
sb.AppendLine($" ,[MapPcbIdToSerialNumber_PcbId] ");
|
|
sb.AppendLine($" ,[MapPcbIdToSerialNumber_SerialNumber] ");
|
|
sb.AppendLine($" ,[MapPcbIdToSerialNumber_DateUtc] ");
|
|
sb.AppendLine($" ,[MapPcbIdToSerialNumber_Deleted] ");
|
|
sb.AppendLine($" FROM[Auftrag].[dbo].[MapPcbIdToSerialNumber] ");
|
|
sb.AppendLine($" where MapPcbIdToSerialNumber_Deleted = 0 ");
|
|
sb.AppendLine($" and ([MapPcbIdToSerialNumber_PcbId] = @PcbId ");
|
|
sb.AppendLine($" or [MapPcbIdToSerialNumber_SerialNumber] = @SerialNumber) ");
|
|
|
|
|
|
if (dataacces.ExecuteQuery(sb.ToString()).Rows.Count != 0)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.InternalServerError, "Mapping already exist. check your marriage request");
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
sb = new StringBuilder();
|
|
sb.AppendLine($" insert into [Auftrag].[dbo].[MapPcbIdToSerialNumber] ");
|
|
sb.AppendLine($" select ");
|
|
sb.AppendLine($" '{PcbId}'");
|
|
sb.AppendLine($" ,{SerialNumber.Value}");
|
|
sb.AppendLine($" ,GETUTCDATE()");
|
|
sb.AppendLine($" ,0");
|
|
dataacces.ExecuteQuery(sb.ToString());
|
|
|
|
if (returnMetroData)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.OK, OrderProgrammingParameters.GetProgrammingParameters(PcbId, GlobalConfig.connectionString.Value));
|
|
}
|
|
else
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.OK, "store");
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
return Request.CreateResponse(HttpStatusCode.InternalServerError, $"Can not store mapping into Db {ex.Message}");
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message);
|
|
}
|
|
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Request.CreateResponse(HttpStatusCode.InternalServerError, ex);
|
|
}
|
|
}
|
|
}
|
|
}
|