using LogLibrary.Log;
using Masuit.Tools;
using Newtonsoft.Json;
using WIDESEA_Common;
using WIDESEA_Core;
using WIDESEA_Core.Const;
using WIDESEA_Core.Helper;
using WIDESEA_DTO;
using WIDESEA_DTO.MOM;
using WIDESEA_IBusinessesRepository;
using WIDESEA_IServices;
using WIDESEA_IStorageBasicRepository;
using WIDESEA_IStorageTaskRepository;
using WIDESEA_IStoragIntegrationServices;
using WIDESEA_Model.Models;
namespace WIDESEA_StoragIntegrationServices;
public class ProcessApplyService : IProcessApplyService
{
private readonly LogFactory LogFactory = new LogFactory();
private readonly ISys_ConfigService _configService;
private readonly IDt_AreaInfoRepository _areaInfoRepository;
private readonly ICellStateService _cellStateService;
private readonly IStockInfoRepository _stockInfoRepository;
private readonly IAgingInOrOutInputService _gingInOrOutInputService;
public ProcessApplyService(ISys_ConfigService configRepository, IDt_AreaInfoRepository areaInfoRepository, ICellStateService cellStateService, IDt_TaskRepository taskRepository, IStockInfoRepository stockInfoRepository, IAgingInOrOutInputService gingInOrOutInputService)
{
_configService = configRepository;
_areaInfoRepository = areaInfoRepository;
_cellStateService = cellStateService;
_stockInfoRepository = stockInfoRepository;
_gingInOrOutInputService = gingInOrOutInputService;
}
///
/// 工艺路线申请
///
///
///
public async Task GetProcessApplyAsync(ProcessApplyDto input)
{
WebResponseContent content = new WebResponseContent();
try
{
input.SessionId = Guid.NewGuid().ToString();
input.EmployeeNo = "MITest";
input.RequestTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now).ToString("yyyy-MM-ddTHH:mm:ss.fffZ");
var inputJson = Masuit.Tools.ObjectExtensions.ToDictionary(input);
var configs = _configService.GetConfigsByCategory(CateGoryConst.SYS_MOMIPAddress);
var wmsBase = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.MOMBaseIP)?.ConfigValue;
var ipAddress = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.ProcessApply)?.ConfigValue;
if (wmsBase == null || ipAddress == null)
{
throw new InvalidOperationException("WMS IP 未配置");
}
var wmsIpAddress = wmsBase + ipAddress;
var result = HttpsClient.PostAsync(wmsIpAddress, inputJson).Result;
if (result != null)
{
content.OK(data: result);
//var respone = JsonConvert.DeserializeObject(result.ToString());
//if (!respone.Success)
//{
// MoMErrorMsg.AddMoMErrorMsg(0, input.WipOrderNo, respone.MOMMessage, SysConfigConst.TrayCellsStatus);
//}
//else
//{
// MoMErrorMsg.DeleteMoMErrorMsg(0, input.WipOrderNo);
//}
}
LogFactory.GetLog("工艺路线申请").Info(true, $"\r\r--------------------------------------");
LogFactory.GetLog("工艺路线申请").Info(true, result);
}
catch (Exception ex)
{
//Console.WriteLine(ex.Message);
LogFactory.GetLog("工艺路线申请").Error(true, $"\r\r--------------------------------------");
LogFactory.GetLog("工艺路线申请").Error(true, ex.StackTrace);
}
return content;
}
///
/// 补录出库数据
///
///
///
public async Task StockOutDataBackfillInterfaceAsync(string palletCode, int areaID)
{
WebResponseContent content = new WebResponseContent();
try
{
var area = _areaInfoRepository.QueryFirst(x => x.AreaID == areaID);
var trayCells = new TrayCellsStatusDto()
{
Software = area.Spare3,
TrayBarcode = palletCode,
EquipmentCode = area.Spare2,
SceneType = area.Spare4
};
content = await _cellStateService.GetTrayCellStatusAsync(trayCells);
if (!content.Status) return content;
var result = JsonConvert.DeserializeObject(content.Data.ToString());
if (result.SerialNos.Count > 0)
{
var stock = await SqlSugarHelper.DbWMS.Queryable().FirstAsync(x => x.PalletCode == palletCode);
if (stock != null)
{
var parameterInfo = JsonConvert.DeserializeObject>(stock.ParameterInfos).FirstOrDefault(y => y.Description.Contains("时间"));
if (parameterInfo == null) throw new Exception("");
var outHours = (DateTime.Now - (stock.LinedProcessFeedbackTime == null ? stock.ModifyDate.Value : stock.LinedProcessFeedbackTime.ToDateTime())).TotalHours;
var isNG = outHours > parameterInfo.LowerSpecificationsLimit.ToDouble() && outHours < parameterInfo.UpperSpecificationsLimit.ToDouble();
var defectCode = string.Empty;
if (!isNG) defectCode = "TQCK";
var outputDto = new AgingOutputDto
{
OpFlag = 1,
Software = area.Spare3,
EquipmentCode = area.Spare2,
TrayBarcode = palletCode,
SerialNos = result.SerialNos.Select(x => new SerialNoOutDto
{
SlotNo = x.PositionNo,
SerialNo = x.SerialNo,
SerialNoResult = true, //isNG,
ParameterInfo = new List {
new ParameterInfoOutput() {
Value = outHours.ToString(),
ParameterCode =parameterInfo.ParameterCode,
ParameterDesc = parameterInfo.Description,
ParameterResult = "OK", //isNG.ToString(),
TargetValue = parameterInfo.TargetValue,
LowerLimit = parameterInfo.LowerSpecificationsLimit,
UpperLimit = parameterInfo.UpperSpecificationsLimit,
DefectCode = defectCode,
UOMCode = parameterInfo.UOMCode,
}
}
}).ToList()
};
content = await _gingInOrOutInputService.GetOCVOutputAsync(outputDto);
}
else
{
var stockHty = await SqlSugarHelper.DbWMS.Queryable().Where(x => x.PalletCode == palletCode).OrderByDescending(x => x.CreateDate).FirstAsync();
if (stockHty != null)
{
var parameterInfo = JsonConvert.DeserializeObject>(stockHty.ParameterInfos).FirstOrDefault(y => y.Description.Contains("时间"));
if (parameterInfo == null) throw new Exception("");
var outHours = (DateTime.Now - (stockHty.LinedProcessFeedbackTime == null ? "2025-01-08 15:59:34.310".ToDateTime() : stockHty.LinedProcessFeedbackTime.ToDateTime())).TotalHours;
var isNG = outHours > parameterInfo.LowerSpecificationsLimit.ToDouble() && outHours < parameterInfo.UpperSpecificationsLimit.ToDouble();
var defectCode = string.Empty;
if (!isNG) defectCode = "TQCK";
var outputDto = new AgingOutputDto
{
OpFlag = 1,
Software = area.Spare3,
EquipmentCode = area.Spare2,
TrayBarcode = palletCode,
SerialNos = result.SerialNos.Select(x => new SerialNoOutDto
{
SlotNo = x.PositionNo,
SerialNo = x.SerialNo,
SerialNoResult = true, //isNG,
ParameterInfo = new List {
new ParameterInfoOutput() {
Value = outHours.ToString(),
ParameterCode =parameterInfo.ParameterCode,
ParameterDesc = parameterInfo.Description,
ParameterResult = "OK", //isNG.ToString(),
TargetValue = parameterInfo.TargetValue,
LowerLimit = parameterInfo.LowerSpecificationsLimit,
UpperLimit = parameterInfo.UpperSpecificationsLimit,
DefectCode = defectCode,
UOMCode = parameterInfo.UOMCode,
}
}
}).ToList()
};
content = await _gingInOrOutInputService.GetOCVOutputAsync(outputDto);
}
else
{
content.Error("杀杀杀");
}
}
}
else
{
content.Error("电芯数据为空");
}
}
catch (Exception ex)
{
}
return content;
}
///
/// 补录入库数据
///
///
///
///
public async Task StockInDataBackfillInterfaceAsync(string palletCode, int areaID)
{
WebResponseContent content = new WebResponseContent();
try
{
var area = _areaInfoRepository.QueryFirst(x => x.AreaID == areaID);
var trayCells = new TrayCellsStatusDto()
{
Software = area.Spare3,
TrayBarcode = palletCode,
EquipmentCode = area.Spare2,
SceneType = area.Spare4
};
content = await _cellStateService.GetTrayCellStatusAsync(trayCells);
if (!content.Status) return content;
var result = JsonConvert.DeserializeObject(content.Data.ToString());
if (result.SerialNos.Count > 0 && result.Success)
{
var stockInfo = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == palletCode);
if (stockInfo != null)
{
stockInfo.IsFull = true;
stockInfo.StockInfoDetails = result.SerialNos.Select(serialNoObj => new DtStockInfoDetail
{
SerialNumber = serialNoObj.SerialNo,
OrderNo = serialNoObj.PositionNo.ToString(),
Status = serialNoObj.SerialNoStatus,
MaterielCode = result.BindCode,
Remark = result.TrayBarcodePropertys.ToJsonString(),
}).ToList();
stockInfo.Remark = stockInfo.StockInfoDetails.Count().ToString();
// 处理请求参数
AgingInputDto agingInputDto = new AgingInputDto()
{
SerialNos = stockInfo.StockInfoDetails
.Select(item => new SerialNoInDto { SerialNo = item.SerialNumber, PositionNo = item.OrderNo })
.ToList(),
TrayBarcode = palletCode,
OpFlag = 1,
EquipmentCode = area.Spare2,
Software = area.Spare3
};
content = _gingInOrOutInputService.GetOCVInputAsync(agingInputDto).Result;
var respone = JsonConvert.DeserializeObject(content.Data.ToString());
stockInfo.LinedProcessFeedbackTime = respone.LinedProcessFeedbackTime;
stockInfo.SpecialParameterDuration = respone.SpecialParameterDuration;
//2024年11月16日:新增字段计算应出库时间
stockInfo.OutboundTime = Convert.ToDateTime(respone.LinedProcessFeedbackTime == null ? DateTime.Now : respone.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(respone.SpecialParameterDuration));
stockInfo.ProductionLine = respone.ProductionLine;
stockInfo.ParameterInfos = respone.ParameterInfos.ToJsonString();
stockInfo.StockStatus = 1;
var isResult = await _stockInfoRepository.UpdateDataNavAsync(stockInfo);
if (isResult)
content.OK("更新数据成功");
else
content.Error("更新数据失败");
}
else
{
content.Error("未找到库存");
}
}
else
{
return content;
}
}
catch (Exception ex)
{
content.Error(ex.Message);
}
return content;
}
}