wanshenmean
2024-11-11 f328874c833ffa8e52d9486842039d6ead1a4bd5
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -34,6 +34,7 @@
    private readonly IProcessApplyService _processApplyService; //工艺路线
    private readonly IDt_AreaInfoRepository _areaInfoRepository; //区域
    private readonly IAgingInOrOutInputService _agingInOrOutInputService; //静置\陈化
    private readonly IProductionRepository _productionRepository; //生产
    public Dt_TaskService(IDt_TaskRepository BaseDal,
                                IUnitOfWorkManage unitOfWorkManage,
@@ -54,7 +55,8 @@
                                IProcessApplyService processApplyService,
                                IDt_AreaInfoRepository areaInfoRepository,
                                IAgingInOrOutInputService agingInOrOutInputService,
                                IStockInfoDetailRepository stockInfoDetailRepository) : base(BaseDal)
                                IStockInfoDetailRepository stockInfoDetailRepository,
                                IProductionRepository productionRepository) : base(BaseDal)
    {
        _unitOfWorkManage = unitOfWorkManage;
        _outOrderRepository = outOrderRepository;
@@ -75,6 +77,7 @@
        _areaInfoRepository = areaInfoRepository;
        _agingInOrOutInputService = agingInOrOutInputService;
        _stockInfoDetailRepository = stockInfoDetailRepository;
        _productionRepository = productionRepository;
    }
    #region 外部接口方法
@@ -121,6 +124,7 @@
    private AgingOutputDto MapToAgingOutputDto(DtStockInfo stock, ResponseEqptRunDto info)
    {
        // TODO Value值根据MOM下发的静置时间到当前时间的分钟数
        return new AgingOutputDto
        {
            OpFlag = 1,
@@ -132,16 +136,16 @@
                SlotNo = x.OrderNo.ToInt32(),
                SerialNo = x.SerialNumber,
                SerialNoResult = true,
                ParameterInfo = info.ParameterInfo.Select(x => new ParameterInfo()
                ParameterInfo = info.ParameterInfo.Select(y => new ParameterInfo()
                {
                    LowerLomit = x.LowerControlLimit,
                    UpperLimit = x.UpperControlLimit,
                    ParameterResult = x.EquipmentAvailabilityFlag,
                    ParameterCode = x.ParameterCode,
                    ParameterDesc = x.Description,
                    TargetValue = x.TargetValue,
                    Value = (DateTime.Now - stock.CreateDate).TotalMinutes.ToString(),
                    DefectCode = x.UOMCode
                    LowerLomit = y.LowerControlLimit,
                    UpperLimit = y.UpperControlLimit,
                    ParameterResult = y.EquipmentAvailabilityFlag,
                    ParameterCode = y.ParameterCode,
                    ParameterDesc = y.Description,
                    TargetValue = y.TargetValue,
                    Value = ( DateTime.Parse(stock.LinedProcessFeedbackTime, null, System.Globalization.DateTimeStyles.RoundtripKind).ToLocalTime() - stock.CreateDate).TotalMinutes.ToString(),
                    DefectCode = y.UOMCode
                }).ToList()
            }).ToList()
        };
@@ -342,7 +346,8 @@
        };
        var result = _agingInOrOutInputService.GetOCVInputAsync(agingInputDto).Result;
        var respone = JsonConvert.DeserializeObject<ResponeAgingInputDto>(result.Data.ToString());
        stock.Remark = respone.LinedProcessFeedbackTime;
        stock.LinedProcessFeedbackTime = respone.LinedProcessFeedbackTime;
        stock.SpecialParameterDuration = respone.SpecialParameterDuration;
        // 记录日志
        LogFactory.GetLog("任务完成").InfoFormat(true, "入库任务完成", $"货位地址:{task.TargetAddress},修改后货位数据:{locationInf}");
@@ -452,7 +457,16 @@
            var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
            if (result.SerialNos.Count <= 0)
                return content.Error(result.MOMMessage);
            // TODO 获取本地料框属性与整盘电芯属性获取的值进行对比,如果一致则继续,否则返回错误信息
            var productions = await _productionRepository.QueryDataAsync(x => result.TrayBarcodePropertys.Select(x => x.TrayBarcodeProperty).ToList().Contains(x.TrayBarcodeProperty));
            if (productions.Count <= 0)
                return content.Error("料框属性不存在");
            // 调用CreateBoxingInfo方法,创建组盘信息
            var boxing = await CreateBoxingInfo(result, input.PalletCode);
            if (boxing == null) return content.Error("组盘失败");
            // 调用GetProcessApplyAsync方法,获取工艺路线
            ProcessApplyDto process = await GetProcessApplyAsync(result);
@@ -460,11 +474,18 @@
            // 如果process为null,则返回content
            if (process == null) return content;
            // 调用GetProcessResponseAsync方法,获取工艺响应
            var processResponse = await GetProcessResponseAsync(process, input.Position);
            // 调用_processApplyService.GetProcessApplyAsync方法,获取工艺申请
            content = await _processApplyService.GetProcessApplyAsync(process);
            // 如果状态为false,则返回null
            if (!content.Status) return content.Error("工艺申请失败");
            //// 调用GetProcessResponseAsync方法,获取工艺响应
            //var processResponse = await GetProcessResponseAsync(process, input.Position);
            List<string> strings = input.Position == "1088" ? new List<string>() { "CHSC01" } : new List<string>() { "JZSC01" };
            // 调用CreateNewTask方法,创建新任务
            content =  await CreateNewTask(input, processResponse);
            content =  await CreateNewTask(input, strings);
            if (content.Status)
            {
                var isBox = await _boxingInfoRepository.AddDataNavAsync(boxing);
@@ -564,7 +585,7 @@
                SerialNumber = serialNoObj.SerialNo,
                OrderNo = serialNoObj.PositionNo.ToString(),
                Status = serialNoObj.SerialNoStatus,
                MaterielCode = serialNoObj.BindCode,
                MaterielCode = result.BindCode,
                Remark = result.TrayBarcodePropertys.ToJsonString(),
            }).ToList()
        };
@@ -679,7 +700,8 @@
    /// </summary>
    private DtStockInfo QueryStockInfoForRealTray(string areaCode, List<string> roadways)
    {
        return _stockInfoRepository.Db.Queryable<DtStockInfo>().Where(x => x.AreaCode == areaCode && Convert.ToDateTime(x.Remark) < DateTime.Now && x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && roadways.Contains(x.LocationInfo.RoadwayNo))
        // TODO时间根据MOM系统配置的出库时间来获取,暂时不知道MOM返回的时间是什么所以这里测试时候在改
        return _stockInfoRepository.Db.Queryable<DtStockInfo>().Where(x => x.AreaCode == areaCode && Convert.ToDateTime(x.LinedProcessFeedbackTime) < DateTime.Now && x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && roadways.Contains(x.LocationInfo.RoadwayNo))
                                   .Includes(x => x.LocationInfo)
                                   .Includes(x => x.StockInfoDetails)
                                   .OrderBy(x => x.CreateDate)
@@ -1184,20 +1206,12 @@
    /// <param name="areaId">区域ID</param>
    /// <param name="content">响应内容</param>
    /// <returns></returns>
    private async Task<WebResponseContent> CreateNewTask(RequestTaskDto input, List<Dt_EquipmentProcess> process = null, int flag = 0)
    private async Task<WebResponseContent> CreateNewTask(RequestTaskDto input, List<string> process = null, int flag = 0)
    {
        WebResponseContent content = new WebResponseContent();
        List<string> strings = new List<string>();
        if (process != null)
        {
            strings = process.Select(x => x.EquipmentName).ToList();
        }
        else
        {
            strings = input.Position.Split(',').ToList();
        }
        // 获取目标地址
        string ToAddress = await GetRoadWayAsync(strings);
        string ToAddress = await GetRoadWayAsync(process);
        // 创建新任务实例
        var task = new Dt_Task