| | |
| | | /// <param name="stationCode"></param> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent DeviceRequestInboundTaskSimple(string stationCode) |
| | | public WebResponseContent DeviceRequestInboundTaskSimple(string stationCode, string startPoint = "") |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_Task task = Repository.QueryFirst(x => x.PalletCode == stationCode); |
| | | if (task != null) |
| | | { |
| | | PushTasksToWCS(new List<Dt_Task> { task }); |
| | | return WebResponseContent.Instance.OK($"该æçå·²çæä»»å¡", _mapper.Map<WMSTaskDTO>(task)); |
| | | return content.OK($"该æçå·²çæä»»å¡", _mapper.Map<WMSTaskDTO>(task)); |
| | | } |
| | | Dt_ProStockInfo stockInfo = BaseDal.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == stationCode).Includes(x => x.proStockInfoDetails).First(); ; |
| | | if (stockInfo == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°ç»çä¿¡æ¯"); |
| | | return content.Error($"æªæ¾å°ç»çä¿¡æ¯"); |
| | | } |
| | | if (stockInfo.StockStatus != StockStatusEmun.ç»çæå.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æçç¶æä¸æ£ç¡®,ä¸å¯ç³è¯·å
¥åº"); |
| | | return content.Error($"该æçç¶æä¸æ£ç¡®,ä¸å¯ç³è¯·å
¥åº"); |
| | | } |
| | | |
| | | Dt_Task newTask = new Dt_Task() |
| | | { |
| | | CurrentAddress = stationCode, |
| | | Grade = 0, |
| | | NextAddress = "", |
| | | PalletCode = stationCode, |
| | | Roadway = "", |
| | | SourceAddress = stationCode, |
| | | TargetAddress = "", |
| | | TaskType = TaskTypeEnum.InProduct.ObjToInt(), |
| | | TaskStatus = TaskStatusEnum.New.ObjToInt(), |
| | | WarehouseId = stockInfo.WarehouseId, |
| | | PalletType = stockInfo.PalletType, |
| | | }; |
| | | stockInfo.StockStatus = StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt(); |
| | | stockInfo.proStockInfoDetails.ForEach(x => |
| | | { |
| | | x.ProStockDetailStatus = StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt(); |
| | | }); |
| | | _unitOfWorkManage.BeginTran(); |
| | | int taskId = BaseDal.AddData(newTask); |
| | | newTask.TaskId = taskId; |
| | | _stockRepository.ProStockInfoRepository.UpdateData(stockInfo); |
| | | _stockRepository.ProStockInfoDetailRepository.UpdateData(stockInfo.proStockInfoDetails); |
| | | _unitOfWorkManage.CommitTran(); |
| | | WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask); |
| | | if (startPoint.IsNullOrEmpty()) |
| | | { |
| | | Dt_Task newTask = new Dt_Task() |
| | | { |
| | | CurrentAddress = stationCode, |
| | | Grade = 0, |
| | | NextAddress = "", |
| | | PalletCode = stationCode, |
| | | Roadway = "", |
| | | SourceAddress = stationCode, |
| | | TargetAddress = "", |
| | | TaskType = TaskTypeEnum.InProduct.ObjToInt(), |
| | | TaskStatus = TaskStatusEnum.New.ObjToInt(), |
| | | WarehouseId = stockInfo.WarehouseId, |
| | | PalletType = stockInfo.PalletType, |
| | | }; |
| | | _unitOfWorkManage.BeginTran(); |
| | | int taskId = BaseDal.AddData(newTask); |
| | | newTask.TaskId = taskId; |
| | | _stockRepository.ProStockInfoRepository.UpdateData(stockInfo); |
| | | _stockRepository.ProStockInfoDetailRepository.UpdateData(stockInfo.proStockInfoDetails); |
| | | _unitOfWorkManage.CommitTran(); |
| | | WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask); |
| | | |
| | | return WebResponseContent.Instance.OK(data: wMSTaskDTO); |
| | | return content.OK(data: wMSTaskDTO); |
| | | } |
| | | else |
| | | { |
| | | Dt_AGVStationInfo agvstation = _basicRepository.AGVStationInfoRepository.QueryFirst(x => x.AGVStationCode == startPoint); |
| | | if (agvstation == null) |
| | | { |
| | | return content.Error($"èµ·ç¹é误{startPoint}"); |
| | | } |
| | | if (agvstation.StationArea != StationAreaEnum.äºæ¥¼æååºç¼ååº.ToString()) |
| | | { |
| | | return content.Error($"èµ·ç¹ç«ç¹åºåé误{agvstation.StationArea}"); |
| | | } |
| | | //夿å½åç¹ä½æ¯å¦éå¤ |
| | | Dt_Task taskOldPoint = BaseDal.QueryFirst(x => x.SourceAddress == startPoint && (x.TaskStatus == TaskStatusEnum.New.ObjToInt() || x.TaskStatus == TaskStatusEnum.AGV_Executing.ObjToInt())); |
| | | if (taskOldPoint != null) |
| | | { |
| | | return content.Error($"ç«ç¹{startPoint}å·²åå¨ä»»å¡"); |
| | | } |
| | | //åé
å··é |
| | | string roadWay = AssignCPRoadwayNo(); |
| | | Dt_ProStockInfoDetail? proStockInfoDetail = stockInfo.proStockInfoDetails.FirstOrDefault(); |
| | | //çæä»»å¡ |
| | | Dt_Task newTask = new Dt_Task() |
| | | { |
| | | CurrentAddress = startPoint, |
| | | Grade = 0, |
| | | NextAddress = "", |
| | | PalletCode = stockInfo.PalletCode, |
| | | Roadway = roadWay, |
| | | SourceAddress = startPoint, |
| | | TargetAddress = "", |
| | | TaskType = TaskTypeEnum.Inbound2ndFloor.ObjToInt(), |
| | | TaskStatus = TaskStatusEnum.New.ObjToInt(), |
| | | WarehouseId = stockInfo.WarehouseId, |
| | | PalletType = stockInfo.PalletType, |
| | | MaterielCode = proStockInfoDetail.ProductCode, |
| | | OrderNo = stockInfo.ProInOrderNo, |
| | | Quantity = stockInfo.proStockInfoDetails.Sum(x=>x.StockQty), |
| | | }; |
| | | _unitOfWorkManage.BeginTran(); |
| | | int taskId = BaseDal.AddData(newTask); |
| | | newTask.TaskId = taskId; |
| | | _stockRepository.ProStockInfoRepository.UpdateData(stockInfo); |
| | | _stockRepository.ProStockInfoDetailRepository.UpdateData(stockInfo.proStockInfoDetails); |
| | | _unitOfWorkManage.CommitTran(); |
| | | //æ¨éä»»å¡ |
| | | PushTasksToWCS(new List<Dt_Task> { newTask }, "AGV"); |
| | | return content.OK("å建å
¥åºæå"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | //éå¶ |
| | | if (stockInfo.CheckThickness >= 800 && stockInfo.CheckThickness <= 1500 && stockInfo.MaterielWide >= 700 && stockInfo.MaterielWide <= 2500) |
| | | { |
| | | bool LayerLimit = stockInfo.CheckThickness > 1300; |
| | | bool LayerLimit1 = stockInfo.CheckThickness >= 1200; |
| | | bool LayerLimit2 = stockInfo.CheckThickness > 1300; |
| | | bool RoadwayLimit = stockInfo.MaterielWide > 2200; |
| | | bool RoadwayType = stockInfo.PalletType == LocationTypeEnum.MediumPallet.ObjToInt(); |
| | | var query = Db.Queryable<Dt_LocationInfo>() |
| | |
| | | .Select(x => new { x.RoadwayNo, x.Columns }); |
| | | |
| | | // æ ¹æ®æ¡ä»¶è¿æ»¤ |
| | | if (LayerLimit) |
| | | if (LayerLimit1) |
| | | { |
| | | query = query.Where(x => x.RoadwayNo != "SC03_YLDual"); |
| | | } |
| | | if (LayerLimit2) |
| | | { |
| | | query = query.Where(x => x.Columns >= 56 && !x.RoadwayNo.Contains("YLDual")); |
| | | } |
| | |
| | | if (count != null) |
| | | { |
| | | item.Count -= count.Count; |
| | | } |
| | | if (item.Count >= 50 && count?.Count<=1) |
| | | { |
| | | return item.RoadwayNo; |
| | | } |
| | | } |
| | | return locationCounts.Where(x => x.Count > 0).OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? ""; |
| | |
| | | } |
| | | proInUpModel.PB_INV_PRODUCT_IN= pRODUCT_INItems; |
| | | string request = _invokeERPService.ERPProInUp(proInUpModel) ?? throw new Exception("æåå
¥åºæ¥å£è¯·æ±å¤±è´¥"); |
| | | if (!request.Contains("Success")) |
| | | if (!request.Contains("success")) |
| | | { |
| | | throw new Exception($"æåå
¥åºå¤±è´¥"); |
| | | } |
| | |
| | | return WebResponseContent.Instance.OK(data: task.TargetAddress); |
| | | } |
| | | Dt_StockInfo? stockInfo = null; |
| | | Dt_ProStockInfo? proStockInfo = null; |
| | | if (roadwayNo.Contains("YL")) |
| | | { |
| | | stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x=>x.PalletCode==task.PalletCode); |
| | | } |
| | | else |
| | | { |
| | | proStockInfo = Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x=>x.proStockInfoDetails).First(); |
| | | } |
| | | //åé
è´§ä½ |
| | | Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayNo, task.PalletType, task.WarehouseId, stockInfo); |
| | | Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayNo, task.PalletType, task.WarehouseId, stockInfo, proStockInfo); |
| | | if (locationInfo == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è´§ä½åé
失败,æªæ¾å°å¯åé
è´§ä½"); |
| | |
| | | { |
| | | return content.Error("ä¼ å
¥ä¿¡æ¯ä¸ºç©º"); |
| | | } |
| | | // åªè¿åéå¤ç BarCode å表 |
| | | var repeatBarCodeList = proInDTOs |
| | | .GroupBy(x => x.BarCode) |
| | | .Where(g => g.Count() > 1) |
| | | .Select(g => g.Key) |
| | | .ToList(); |
| | | if (repeatBarCodeList.Count>0) |
| | | { |
| | | return content.Error($"ä¼ å
¥{repeatBarCodeList.FirstOrDefault()}ç®±ç æ°æ®éå¤ï¼è¯·æ£æ¥ä¼ å
¥æ°æ®"); |
| | | } |
| | | //è·åæææåï¼åæåä¿¡æ¯ |
| | | List<Dt_MESProInOrderInfo> proInOrderInfosOld = _inboundRepository.MESProInOrderInfoRepository.QueryData(); |
| | | //è·åææç©æä¿¡æ¯ |
| | |
| | | string request = _invokeERPService.ERPSemiProInUp( |
| | | new ERPProInUpModel() |
| | | { |
| | | PB_INV_PRODUCT_IN= pRODUCT_INItems |
| | | PB_INV_PRODUCT_IN = pRODUCT_INItems |
| | | }) ?? throw new Exception("åæåå
¥åºæ¥å£è¯·æ±å¤±è´¥"); |
| | | //çæåæåå
¥åº |
| | | List<Dt_MESProInOrderInfo> semiProInOrderInfos = mESProInOrderInfos.Where(x => x.MESProInStatus == InOrderStatusEnum.æªå¼å§.ObjToInt() && x.WarehouseId==WarehouseEnum.LLDYL.ObjToInt()).ToList(); |
| | |
| | | { |
| | | return content.Error("ä¼ å
¥ä¿¡æ¯ä¸ºç©º"); |
| | | } |
| | | |
| | | List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(); |
| | | List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>(); |
| | | List<Dt_Task> tasks = new List<Dt_Task>(); |
| | |
| | | NextAddress = "", |
| | | PalletCode = item.BarCode, |
| | | Roadway = "", |
| | | SourceAddress = CheckPointCode.AGVStationCode, |
| | | SourceAddress = item.PointCode.StartsWith("YS") ? CheckPointCode.AGVStationCode : CheckPointCode.MESPointCode, |
| | | TargetAddress = "", |
| | | TaskType = 0, |
| | | TaskStatus = TaskStatusEnum.New.ObjToInt(), |
| | |
| | | nameof(StationAreaEnum.䏿¥¼å°å·) => TaskTypeEnum.PrintYLInbound, |
| | | nameof(StationAreaEnum.䏿¥¼åå) => TaskTypeEnum.PartOffInbound, |
| | | nameof(StationAreaEnum.䏿¥¼çº¸å¼ æ·è) => TaskTypeEnum.PaperFilmInbound, |
| | | nameof(StationAreaEnum.䏿¥¼æ 纺æ·è) => TaskTypeEnum.WFBYLInbound, |
| | | nameof(StationAreaEnum.䏿¥¼æ 纺ç»å¸) => TaskTypeEnum.WFBYLInbound, |
| | | nameof(StationAreaEnum.䏿¥¼æ 纺æ·è) => TaskTypeEnum.WFBLMYLInbound, |
| | | _ => throw new Exception("æªæ¾å°å¯¹åºä»»å¡") |
| | | }; |
| | | if (taskTypeEnum == TaskTypeEnum.WFBYLInbound) |
| | | if (taskTypeEnum == TaskTypeEnum.WFBYLInbound || taskTypeEnum == TaskTypeEnum.WFBLMYLInbound) |
| | | { |
| | | Dt_AGVStationInfo? stationInfo = AssignWFBStation(_AGVStationInfos?.Select(x => x.AGVStationCode).ToList()) ?? throw new Exception("æªæ¾å°å¯ç¨æ çººå¸æåæ¶"); |
| | | newTask.NextAddress = stationInfo.AGVStationCode; |
| | |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | public WebResponseContent BoxingInBound(string stationCode,List<string> barCodes) |
| | | /// <summary> |
| | | /// æåç»ç |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent BoxingInBound(string stationCode, int heightNum, List<string> barCodes, int type = 0) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (stationCode.IsNullOrEmpty()) |
| | | { |
| | | return content.Error($"æçæ¡ç ä¸è½ä¸ºç©º"); |
| | | } |
| | | if (barCodes==null || barCodes.Count<=0) |
| | | { |
| | | return content.Error($"ç®±ç ä¸è½ä¸ºç©º"); |
| | | } |
| | | //è·åæååºå |
| | | Dt_ProStockInfo proStockInfoOld = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.PalletCode == stationCode); |
| | | if (proStockInfoOld != null) |
| | | { |
| | | return content.Error($"æç{stationCode}å·²åå¨"); |
| | | return content.Error($"æçæ¡ç {stationCode}å·²åå¨"); |
| | | } |
| | | //è·åæ¡ç ä¿¡æ¯ |
| | | List<Dt_MESProInOrderInfo> proInOrderInfos = _inboundRepository.MESProInOrderInfoRepository.QueryData(x=> barCodes.Contains(x.BarCode)); |
| | |
| | | }; |
| | | proStockInfoDetails.Add(proStockInfoDetail); |
| | | } |
| | | |
| | | |
| | | Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo() |
| | | { |
| | | PalletCode = stationCode, |
| | |
| | | LocationCode = "", |
| | | WarehouseId = materielInfo.WarehouseId, |
| | | StockStatus = StockStatusEmun.ç»çæå.ObjToInt(), |
| | | ProHeight = heightNum, |
| | | proStockInfoDetails = proStockInfoDetails |
| | | }; |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand(); |
| | | if (type != 0) |
| | | { |
| | | proInOrderInfos.ForEach(x => |
| | | { |
| | | x.MESProInStatus = InOrderStatusEnum.å
¥åºå®æ.ObjToInt(); |
| | | }); |
| | | _inboundRepository.MESProInOrderInfoRepository.UpdateData(proInOrderInfos); |
| | | } |
| | | _unitOfWorkManage.CommitTran(); |
| | | content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// äºæ¥¼æåPDAæ«ç æ ¡éª |
| | | /// </summary> |
| | | /// <param name="barcode"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent CodeAnalysis(string barcode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (barcode.IsNullOrEmpty()) |
| | | return content.Error("ä¼ å
¥ç®±ç ä¸è½ä¸ºç©º"); |
| | | //è·åæ¡ç ç¶æ |
| | | Dt_MESProInOrderInfo proInOrderInfo = Db.Queryable<Dt_MESProInOrderInfo>().Where(x => x.BarCode == barcode && x.MESProInStatus == (int)InOrderStatusEnum.æªå¼å§).OrderByDescending(x => x.CreateDate).First(); |
| | | if (proInOrderInfo==null) |
| | | return content.Error($"ç®±ç {barcode}ç¶æä¸å¯å
¥åºï¼è¯·æ£æ¥ç®±ç æ°æ®"); |
| | | return content.OK("æå", new { proInOrderInfo.BarCode, proInOrderInfo.ProductOrderNo, proInOrderInfo.MaterialCode, proInOrderInfo.ProQuantity }); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | } |
| | | } |