xxyy
2025-03-02 e376a1f56a3fcd133afc5fead8a2fbc1a499e865
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/MOM/ProcessApply/ProcessApplyService.cs
@@ -1,34 +1,80 @@
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;
    }
    /// <summary>
    /// 工艺路线申请
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<dynamic> ProcessApplyAsync(ProcessApplyDto input)
    public async Task<WebResponseContent> GetProcessApplyAsync(ProcessApplyDto input)
    {
        // TODO: Implement the logic to process the apply request
        WebResponseContent content = new WebResponseContent();
        try
        {
            input.SessionId = Guid.NewGuid().ToString();
            input.Software = "陈化机";
            input.EquipmentCode = "P1K10040";
            input.EmployeeNo = "T00001";
            input.EmployeeNo = "MITest";
            input.RequestTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now).ToString("yyyy-MM-ddTHH:mm:ss.fffZ");
            var inputIson = input.ToDictionary();
            var x = await HttpsClient.PostAsync("http://ts-momapp01:12020/api/MachineIntegration/ProcessApply", inputIson);
            var inputJson = input.ToDictionary();
            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<ResultProcessApply>(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, x);
            LogFactory.GetLog("工艺路线申请").Info(true, result);
        }
        catch (Exception ex)
        {
@@ -36,6 +82,212 @@
            LogFactory.GetLog("工艺路线申请").Error(true, $"\r\r--------------------------------------");
            LogFactory.GetLog("工艺路线申请").Error(true, ex.StackTrace);
        }
        return Task.FromResult<dynamic>(null);
        return content;
    }
    /// <summary>
    /// 补录出库数据
    /// </summary>
    /// <param name="palletCode"></param>
    /// <returns></returns>
    public async Task<WebResponseContent> 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<ResultTrayCellsStatus>(content.Data.ToString());
            if (result.SerialNos.Count > 0)
            {
                var stock = await SqlSugarHelper.DbWMS.Queryable<DtStockInfo>().FirstAsync(x => x.PalletCode == palletCode);
                if (stock != null)
                {
                    var parameterInfo = JsonConvert.DeserializeObject<List<ParameterInfo>>(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<ParameterInfoOutput> {
                                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<DtStockInfo_Hty>().Where(x => x.PalletCode == palletCode).OrderByDescending(x => x.CreateDate).FirstAsync();
                    if (stockHty != null)
                    {
                        var parameterInfo = JsonConvert.DeserializeObject<List<ParameterInfo>>(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<ParameterInfoOutput> {
                                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;
    }
    /// <summary>
    /// 补录入库数据
    /// </summary>
    /// <param name="palletCode"></param>
    /// <param name="areaID"></param>
    /// <returns></returns>
    public async Task<WebResponseContent> 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<ResultTrayCellsStatus>(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<ResponeAgingInputDto>(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;
    }
}