| | |
| | | using WIDESEA_DTO.Stock; |
| | | using SqlSugar; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; |
| | | using WIDESEA_Core.CodeConfigEnum; |
| | | using WIDESEA_DTO.Basic; |
| | | using System.Globalization; |
| | | using System.Collections; |
| | | |
| | | namespace WIDESEA_TaskInfoService |
| | | { |
| | | public partial class TaskService |
| | | { |
| | | static object lock_out = new object(); |
| | | |
| | | static object solderMask_out = new object(); |
| | | |
| | | /// <summary> |
| | | /// æµè¯æ¶åºä» |
| | |
| | | (x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut)); |
| | | if (locationInfo == null) |
| | | { |
| | | return responseContent.Error($"æµè¯æ¶è´§ä½ããããããããã:{stockInfo.LocationCode}åºåºæ¡ä»¶ä¸æ»¡è¶³"); |
| | | return responseContent.Error($"æµè¯æ¶è´§ä½:{stockInfo.LocationCode}åºåºæ¡ä»¶ä¸æ»¡è¶³"); |
| | | } |
| | | //çææµè¯æ¶åºåºä»»å¡ éå®åºå æ´æ¹è´§ä½ç¶æ |
| | | Dt_Task taskOut = new() |
| | |
| | | PalletType = stockInfo.PalletType, |
| | | WarehouseId = stockInfo.WarehouseId, |
| | | }; |
| | | string MaterielCode = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode; |
| | | float Quantity = (float)stockInfo.Details.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity); |
| | | string BatchNo = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.BatchNo; |
| | | if (MaterielCode != null && Quantity != null && BatchNo != null) |
| | | { |
| | | taskOut.MaterielCode = MaterielCode; |
| | | taskOut.Quantity = Quantity; |
| | | taskOut.BatchNo = BatchNo; |
| | | } |
| | | stockInfo.StockStatus = (int)StockStatusEmun.åºåºéå®; |
| | | LocationStatusEnum locationStatus = (LocationStatusEnum)locationInfo.LocationStatus; |
| | | locationInfo.LocationStatus = (int)LocationStatusEnum.Lock; |
| | |
| | | _unitOfWorkManage.CommitTran(); |
| | | //å°ä»»å¡æ¨éå°WCS |
| | | PushTasksToWCS(new List<Dt_Task>() { taskOut }, "AGV_CSJ"); |
| | | responseContent.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | responseContent.Error(ex.Message); |
| | | } |
| | | return responseContent; |
| | | } |
| | | } |
| | | public MesResponseContent SolderMaskOutNotice(SolderMaskOutNotice model) |
| | | { |
| | | lock (solderMask_out) |
| | | { |
| | | MesResponseContent responseContent = new MesResponseContent(); |
| | | try |
| | | { |
| | | |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA154.ToString()); |
| | | //è·ååºåè®°å½ |
| | | List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => |
| | | x.WarehouseId == warehouse.WarehouseId && |
| | | x.StockStatus == (int)StockStatusEmun.å
¥åºå®æ).Includes(x => x.Details).ToList(); |
| | | Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == model.LotNo)); |
| | | if (stockInfo == null) |
| | | { |
| | | return responseContent.Error($"é²çåº:æ {model.LotNo}å¯ç¨åºå"); |
| | | } |
| | | Dt_Task exsit2 = Repository.QueryFirst(x => x.PalletCode == stockInfo.PalletCode); |
| | | if (exsit2 != null) |
| | | { |
| | | return responseContent.Error($"é²çä»»å¡{stockInfo.PalletCode}å·²åå¨"); |
| | | } |
| | | |
| | | Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode && |
| | | x.WarehouseId == stockInfo.WarehouseId && |
| | | x.LocationStatus == (int)LocationStatusEnum.InStock && |
| | | (x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut)); |
| | | if (locationInfo == null) |
| | | { |
| | | return responseContent.Error($"é²çè´§ä½:{stockInfo.LocationCode}åºåºæ¡ä»¶ä¸æ»¡è¶³"); |
| | | } |
| | | //çæé²çåºåºä»»å¡ éå®åºå æ´æ¹è´§ä½ç¶æ |
| | | Dt_Task taskOut = new() |
| | | { |
| | | CurrentAddress = stockInfo.LocationCode, |
| | | Grade = 0, |
| | | PalletCode = stockInfo.PalletCode, |
| | | NextAddress = "", |
| | | Roadway = locationInfo.RoadwayNo, |
| | | SourceAddress = stockInfo.LocationCode, |
| | | TargetAddress = model.TargetAddressCode, |
| | | TaskStatus = (int)TaskStatusEnum.New, |
| | | TaskType = stockInfo.PalletType<2 ? (int)TaskTypeEnum.MaskOutNoticeSmall : (int)TaskTypeEnum.MaskOutNoticeLarge, |
| | | TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), |
| | | PalletType = stockInfo.PalletType, |
| | | WarehouseId = stockInfo.WarehouseId, |
| | | }; |
| | | string MaterielCode = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode; |
| | | float Quantity = (float)stockInfo.Details.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity); |
| | | string BatchNo = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.BatchNo; |
| | | if (MaterielCode != null && Quantity != null && BatchNo != null) |
| | | { |
| | | taskOut.MaterielCode = MaterielCode; |
| | | taskOut.Quantity = Quantity; |
| | | taskOut.BatchNo = BatchNo; |
| | | } |
| | | stockInfo.StockStatus = (int)StockStatusEmun.åºåºéå®; |
| | | LocationStatusEnum locationStatus = (LocationStatusEnum)locationInfo.LocationStatus; |
| | | locationInfo.LocationStatus = (int)LocationStatusEnum.Lock; |
| | | //夿æ¯å¦æåºåºåä¿¡æ¯ |
| | | _unitOfWorkManage.BeginTran(); |
| | | //æ´æ°åºåç¶æ |
| | | _stockRepository.StockInfoRepository.UpdateData(stockInfo); |
| | | //æ´æ°è´§ä½ç¶æ |
| | | _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId); |
| | | //æ°å»ºä»»å¡ |
| | | BaseDal.AddData(taskOut); |
| | | //å å
¥è´§ä½åå¨è®°å½ |
| | | _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, locationStatus, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", taskOut.TaskNum); |
| | | _unitOfWorkManage.CommitTran(); |
| | | //å°ä»»å¡æ¨éå°WCS |
| | | PushTasksToWCS(new List<Dt_Task>() { taskOut }, "AGV_ZH"); |
| | | responseContent.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | responseContent.Error(ex.Message); |
| | | } |
| | | return responseContent; |
| | | } |
| | | } |
| | | |
| | | public MesResponseContent SolderMaskOut(SolderMaskOut model) |
| | | { |
| | | lock (solderMask_out) |
| | | { |
| | | MesResponseContent responseContent = new MesResponseContent(); |
| | | try |
| | | { |
| | | |
| | | |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA154.ToString()); |
| | | //è·ååºåè®°å½ |
| | | List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => |
| | | x.WarehouseId == warehouse.WarehouseId && |
| | | x.StockStatus == (int)StockStatusEmun.å
¥åºå®æ).Includes(x => x.Details).ToList(); |
| | | Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == model.LotNo)); |
| | | if (stockInfo == null) |
| | | { |
| | | return responseContent.Error($"é²çåº:æ {model.LotNo}å¯ç¨åºå"); |
| | | } |
| | | Dt_Task exsit2 = Repository.QueryFirst(x => x.PalletCode == stockInfo.PalletCode); |
| | | if (exsit2 != null) |
| | | { |
| | | return responseContent.Error($"é²çä»»å¡{stockInfo.PalletCode}å·²åå¨"); |
| | | } |
| | | |
| | | Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode && |
| | | x.WarehouseId == stockInfo.WarehouseId && |
| | | x.LocationStatus == (int)LocationStatusEnum.InStock && |
| | | (x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut)); |
| | | if (locationInfo == null) |
| | | { |
| | | return responseContent.Error($"é²çè´§ä½:{stockInfo.LocationCode}åºåºæ¡ä»¶ä¸æ»¡è¶³"); |
| | | } |
| | | //çæé²çåºåºä»»å¡ éå®åºå æ´æ¹è´§ä½ç¶æ |
| | | Dt_Task taskOut = new() |
| | | { |
| | | CurrentAddress = stockInfo.LocationCode, |
| | | Grade = 0, |
| | | PalletCode = stockInfo.PalletCode, |
| | | NextAddress = "", |
| | | Roadway = locationInfo.RoadwayNo, |
| | | SourceAddress = stockInfo.LocationCode, |
| | | TargetAddress = model.TargetAddressCode, |
| | | TaskStatus = (int)TaskStatusEnum.New, |
| | | TaskType = stockInfo.PalletType < 2 ? (int)TaskTypeEnum.MaskOutSmall : (int)TaskTypeEnum.MaskOutLarge, |
| | | TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), |
| | | PalletType = stockInfo.PalletType, |
| | | WarehouseId = stockInfo.WarehouseId, |
| | | }; |
| | | string MaterielCode = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode; |
| | | float Quantity = (float)stockInfo.Details.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity); |
| | | string BatchNo = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.BatchNo; |
| | | if (MaterielCode != null && Quantity != null && BatchNo != null) |
| | | { |
| | | taskOut.MaterielCode = MaterielCode; |
| | | taskOut.Quantity = Quantity; |
| | | taskOut.BatchNo = BatchNo; |
| | | } |
| | | stockInfo.StockStatus = (int)StockStatusEmun.åºåºéå®; |
| | | LocationStatusEnum locationStatus = (LocationStatusEnum)locationInfo.LocationStatus; |
| | | locationInfo.LocationStatus = (int)LocationStatusEnum.Lock; |
| | | //夿æ¯å¦æåºåºåä¿¡æ¯ |
| | | _unitOfWorkManage.BeginTran(); |
| | | //æ´æ°åºåç¶æ |
| | | _stockRepository.StockInfoRepository.UpdateData(stockInfo); |
| | | //æ´æ°è´§ä½ç¶æ |
| | | _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId); |
| | | //æ°å»ºä»»å¡ |
| | | BaseDal.AddData(taskOut); |
| | | //å å
¥è´§ä½åå¨è®°å½ |
| | | _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, locationStatus, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", taskOut.TaskNum); |
| | | _unitOfWorkManage.CommitTran(); |
| | | //å°ä»»å¡æ¨éå°WCS |
| | | PushTasksToWCS(new List<Dt_Task>() { taskOut }, "AGV_ZH"); |
| | | responseContent.OK(); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | PalletType = stockInfo.PalletType, |
| | | WarehouseId = stockInfo.WarehouseId, |
| | | }; |
| | | string MaterielCode = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode; |
| | | float Quantity = (float)stockInfo.Details.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity); |
| | | string BatchNo = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.BatchNo; |
| | | if (MaterielCode != null && Quantity != null && BatchNo != null) |
| | | { |
| | | taskIn.MaterielCode = MaterielCode; |
| | | taskIn.Quantity = Quantity; |
| | | taskIn.BatchNo = BatchNo; |
| | | } |
| | | //æ´æ¹åºåç¶æ |
| | | stockInfo.StockStatus = StockStatusEmun.éåº.ObjToInt(); |
| | | BaseDal.AddData(taskIn); |
| | |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// WMS忥æååºåºè³MES |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent ShipmentOrderSync(MesShipmentOrderSync model) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMS_MES_ShipmentOrderSync.ToString()); |
| | | MESRoot<MesShipmentOrderSync> root = new MESRoot<MesShipmentOrderSync>() |
| | | { |
| | | From = "WMS", |
| | | DateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | Content = model |
| | | }; |
| | | JsonSerializerSettings settings = new JsonSerializerSettings |
| | | { |
| | | ContractResolver = new CamelCasePropertyNamesContractResolver() |
| | | }; |
| | | string request = JsonConvert.SerializeObject(root, settings); |
| | | string response = HttpMesHelper.Post(apiInfo.ApiAddress, request); |
| | | MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>(); |
| | | //è°ç¨æ¥å£ |
| | | if (mesResponseContent.BSucc == true) |
| | | { |
| | | content.OK(mesResponseContent.StrMsg); |
| | | } |
| | | else |
| | | { |
| | | content.Error(mesResponseContent.StrMsg); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | /// <param name="stockInfo"></param> |
| | |
| | | return model; |
| | | } |
| | | |
| | | public MesMaterialLotaAceptModel PPGetMesMaterialLotaAceptModel(Dt_StockInfo stockInfo, Dt_StockInfoDetail stockInfoDetail, string taskNo, string warehouseCode, float quantity, string cutedType = "", float ppWidth = 0) |
| | | { |
| | | MesMaterialLotaAceptModel model = new MesMaterialLotaAceptModel() |
| | | { |
| | | CarrierCode = stockInfo.PalletCode, |
| | | CutedType = cutedType, |
| | | ExpirationDate = stockInfoDetail.EffectiveDate, |
| | | MaterialBarCode = stockInfoDetail.SerialNumber, |
| | | MaterialCode = stockInfoDetail.MaterielCode, |
| | | MaterialLot = stockInfoDetail.MaterielCode + "," + stockInfoDetail.BatchNo, |
| | | MaterialName = stockInfoDetail.MaterielName, |
| | | PPWidth = ppWidth, |
| | | ProductionDate = stockInfoDetail.ProductionDate, |
| | | Quantity = quantity, |
| | | Supplier = "", |
| | | TaskNo = taskNo, |
| | | Type = 2, |
| | | WarehouseArea = warehouseCode, |
| | | WarehouseLocation = warehouseCode |
| | | }; |
| | | |
| | | return model; |
| | | } |
| | | /// <summary> |
| | | /// åºæ¿åºåº |
| | | /// </summary> |
| | |
| | | /// <returns></returns> |
| | | public MesResponseContent SubstrateOut(SubstrateOutModel model) |
| | | { |
| | | MesResponseContent content = new MesResponseContent(); |
| | | try |
| | | { |
| | | string line = string.Empty; |
| | |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == line); |
| | | if (warehouse == null) |
| | | { |
| | | return MesResponseContent.Instance.Error($"ä»åºåºç¡ä¿¡æ¯æªé
ç½®"); |
| | | return content.Error($"ä»åºåºç¡ä¿¡æ¯æªé
ç½®"); |
| | | } |
| | | |
| | | Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == model.MaterialCode); |
| | | if (materielInfo == null) |
| | | { |
| | | return MesResponseContent.Instance.Error($"æªæ¾å°è¯¥ç©æä¿¡æ¯"); |
| | | return content.Error($"æªæ¾å°è¯¥ç©æä¿¡æ¯"); |
| | | } |
| | | |
| | | //çæMESæ¿æåºåºåæ® |
| | | Dt_MesOutboundOrder mesOutboundOrder = new Dt_MesOutboundOrder() |
| | | { |
| | | CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), |
| | |
| | | }; |
| | | |
| | | List<Dt_Task> tasks = new List<Dt_Task>(); |
| | | |
| | | List<Dt_StockInfo>? stockInfos = null; |
| | | List<Dt_OutStockLockInfo>? outStockLockInfos = null; |
| | | List<Dt_LocationInfo>? locationInfos = null; |
| | | { |
| | | //åé
åºå |
| | | (List<Dt_StockInfo>, Dt_MesOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesOutboundOrderService.AssignStockOutbound(mesOutboundOrder); |
| | | if (result.Item1 != null && result.Item1.Count > 0) |
| | | { |
| | | //åå»ºä»»å¡ |
| | | tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound); |
| | | result.Item2.OrderStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); |
| | | result.Item3.ForEach(x => |
| | |
| | | _outboundService.MesOutboundOrderService.Repository.AddData(mesOutboundOrder); |
| | | if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0) |
| | | { |
| | | WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks); |
| | | WebResponseContent contentResponse = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks); |
| | | |
| | | if (!content.Status) |
| | | if (!contentResponse.Status) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return MesResponseContent.Instance.Error(content.Message); |
| | | return content.Error(contentResponse.Message); |
| | | } |
| | | } |
| | | _unitOfWorkManage.CommitTran(); |
| | | PushTasksToWCS(tasks); |
| | | |
| | | |
| | | return MesResponseContent.Instance.OK(); |
| | | //å°å¼æåé
çåºåæçè¿åç»MES |
| | | content.Content = new |
| | | { |
| | | VehicleCode = stockInfos?.Select(x => x.PalletCode).ToList() |
| | | }; |
| | | return content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return MesResponseContent.Instance.Error(ex.Message); |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == palletTypeInfo.WarehouseId); |
| | | |
| | | //夿æ¯å¦æçåºåæ¯å¦å·²åå¨ |
| | | Dt_StockInfo stockInfoOld = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == model.CarrierCode); |
| | | if (stockInfoOld != null) |
| | | { |
| | | return MesResponseContent.Instance.Error($"æçå·åºå{model.CarrierCode}å·²åå¨"); |
| | | } |
| | | |
| | | Dt_StockInfo_Hty stockInfo_Hty = _stockRepository.StockInfo_HtyRepository.QueryData(x => x.PalletCode == model.CarrierCode).OrderByDescending(x => x.SourceId).First(); |
| | | Dt_StockInfoDetail_Hty stockInfoDetail_Hty = _stockRepository.StockInfoDetail_HtyRepository.QueryFirst(x => x.StockId == stockInfo_Hty.SourceId); |
| | | |
| | | |
| | | Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail() |
| | | { |
| | | MaterielSpec = stockInfoDetail_Hty.MaterielSpec, |
| | | BatchNo = stockInfoDetail_Hty?.BatchNo ?? "", |
| | | EffectiveDate = model.ExpirationDate, |
| | | MaterielCode = model.MaterialCode, |
| | |
| | | MesResponseContent modelCount = new MesResponseContent(); |
| | | try |
| | | { |
| | | |
| | | Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA58.ToString()); |
| | | if (warehouse == null) |
| | | { |
| | |
| | | }; |
| | | mesPPOutboundOrderDetail.Add(dt_MesPPOutboundOrderDetail); |
| | | } |
| | | Dt_MesPPOutboundOrder mesOutboundOrder = new Dt_MesPPOutboundOrder() |
| | | Dt_MesPPOutboundOrder mesPPOutboundOrder1 = new Dt_MesPPOutboundOrder() |
| | | { |
| | | CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), |
| | | MaterialCode = model.MaterialCode, |
| | |
| | | Details = mesPPOutboundOrderDetail |
| | | }; |
| | | #region |
| | | //Db.InsertNav(mesOutboundOrder).Include(x=>x.Details).ExecuteCommand(); |
| | | // List<Dt_Task> tasks = new List<Dt_Task>(); |
| | | List<Dt_Task> tasks = new List<Dt_Task>(); |
| | | |
| | | // List<Dt_StockInfo>? stockInfos = null; |
| | | // List<Dt_OutStockLockInfo>? outStockLockInfos = null; |
| | | // List<Dt_LocationInfo>? locationInfos = null; |
| | | // { |
| | | //(List<Dt_StockInfo>, Dt_MesPPOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignStockOutbound(mesOutboundOrder); |
| | | // if (result.Item1 != null && result.Item1.Count > 0) |
| | | // { |
| | | // tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound); |
| | | // result.Item2.OrderStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); |
| | | // result.Item3.ForEach(x => |
| | | // { |
| | | // x.Status = OutLockStockStatusEnum.åºåºä¸.ObjToInt(); |
| | | // }); |
| | | List<Dt_StockInfo>? stockInfos = null; |
| | | List<Dt_OutStockLockInfo>? outStockLockInfos = null; |
| | | List<Dt_LocationInfo>? locationInfos = null; |
| | | List<Dt_MaterielCodeInfo> materielCodes = new List<Dt_MaterielCodeInfo>(); |
| | | { |
| | | (List<Dt_StockInfo>, Dt_MesPPOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignPPStockOutbound(mesPPOutboundOrder1); |
| | | if (result.Item1 != null && result.Item1.Count > 0) |
| | | { |
| | | tasks = GetTasks(result.Item1, TaskTypeEnum.MesPPOutbound); |
| | | result.Item2.OrderStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); |
| | | result.Item3.ForEach(x => |
| | | { |
| | | x.Status = OutLockStockStatusEnum.åºåºä¸.ObjToInt(); |
| | | }); |
| | | |
| | | // stockInfos = result.Item1; |
| | | // mesOutboundOrder = result.Item2; |
| | | // outStockLockInfos = result.Item3; |
| | | // locationInfos = result.Item4; |
| | | // mesPPOutboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); |
| | | stockInfos = result.Item1; |
| | | mesPPOutboundOrder1 = result.Item2; |
| | | outStockLockInfos = result.Item3; |
| | | locationInfos = result.Item4; |
| | | foreach (var item in mesPPOutboundOrderDetail) |
| | | { |
| | | item.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); |
| | | } |
| | | |
| | | // } |
| | | // else |
| | | // { |
| | | // throw new Exception("æ åºå"); |
| | | // } |
| | | // } |
| | | // tasks.ForEach(x => |
| | | // { |
| | | // x.TargetAddress = model.TargetAddressCode; |
| | | // }); |
| | | // _unitOfWorkManage.BeginTran(); |
| | | |
| | | // int id = BaseDal.AddData(tasks); |
| | | // outStockLockInfos.ForEach(x => |
| | | // { |
| | | // x.OrderNo = mesOutboundOrder.TaskNo; |
| | | // x.OrderDetailId = id; |
| | | // }); |
| | | // //_outboundService.MesPPOutboundOrderService.Repository.AddData(mesOutboundOrder); |
| | | // Db.InsertNav(mesOutboundOrder).Include(x => x.Details).ExecuteCommand(); |
| | | // if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0) |
| | | // { |
| | | // WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks); |
| | | |
| | | // if (!content.Status) |
| | | // { |
| | | // _unitOfWorkManage.RollbackTran(); |
| | | // return MesResponseContent.Instance.Error(content.Message); |
| | | // } |
| | | // } |
| | | // _unitOfWorkManage.CommitTran(); |
| | | // PushTasksToWCS(tasks); |
| | | |
| | | //} |
| | | #endregion |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("æ åºå"); |
| | | } |
| | | } |
| | | tasks.ForEach(x => |
| | | { |
| | | if (x.Roadway.Contains("AGV_PP")) |
| | | { |
| | | x.TargetAddress = model.TargetAddressCode; |
| | | } |
| | | |
| | | }); |
| | | _unitOfWorkManage.BeginTran(); |
| | | Db.InsertNav(mesOutboundOrder).Include(x => x.Details).ExecuteCommand(); |
| | | |
| | | int id = BaseDal.AddData(tasks); |
| | | outStockLockInfos.ForEach(x => |
| | | { |
| | | x.OrderNo = mesPPOutboundOrder1.TaskNo; |
| | | x.OrderDetailId = id; |
| | | }); |
| | | Db.InsertNav(mesPPOutboundOrder1).Include(x => x.Details).ExecuteCommand(); |
| | | if (stockInfos.Count > 0 && stockInfos != null) |
| | | { |
| | | var lkstockInfo = stockInfos.Where(x => x.LocationCode.Contains("SC01_PP")).ToList(); |
| | | if(lkstockInfo != null) |
| | | { |
| | | foreach (var item in lkstockInfo) |
| | | { |
| | | Dt_MaterielInfo materielInfo = BaseDal.Db.Queryable<Dt_MaterielInfo>().Where(x => x.MaterielCode == item.Details.FirstOrDefault().MaterielCode).First(); |
| | | if(materielInfo == null) |
| | | { |
| | | return MesResponseContent.Instance.Error($"æªæ¾å°ç©æç¼å·{item.Details.FirstOrDefault().MaterielCode}çç©æä¿¡æ¯"); |
| | | } |
| | | Dt_MaterielCodeInfo materielCodeInfo = new Dt_MaterielCodeInfo() |
| | | { |
| | | MaterielCode = item.Details.FirstOrDefault().MaterielCode, |
| | | MaterielName = materielInfo.MaterielName, |
| | | MaterielSpec = materielInfo.MaterielSpec, |
| | | LotNo = item.Details.FirstOrDefault().BatchNo, |
| | | ProductionDate = item.Details.FirstOrDefault().ProductionDate.ObjToDate(), |
| | | EffectiveDate = item.Details.FirstOrDefault().EffectiveDate.ObjToDate(), |
| | | PurchaseOrderNo = DateTime.Now.ToString("yyMMdd") + item.Details.FirstOrDefault().BatchNo, |
| | | Quantity = item.Details.FirstOrDefault().StockQuantity, |
| | | MaterielLength = (decimal)materielInfo.MaterielLength, |
| | | WarehouseId = warehouse.WarehouseId |
| | | }; |
| | | materielCodes.Add(materielCodeInfo); |
| | | } |
| | | Db.Insertable(materielCodes).ExecuteCommand(); |
| | | } |
| | | } |
| | | if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0) |
| | | { |
| | | WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks); |
| | | |
| | | if (!content.Status) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return MesResponseContent.Instance.Error(content.Message); |
| | | } |
| | | } |
| | | _unitOfWorkManage.CommitTran(); |
| | | var pktask = tasks.Where(x => x.Roadway.Contains("AGV_PP")).ToList(); |
| | | if(pktask != null&& pktask.Count>0) |
| | | { |
| | | PushTasksToWCS(pktask, "AGV_PP"); |
| | | } |
| | | var lktask = tasks.Where(x => x.Roadway.Contains("SC01_PP")).ToList(); |
| | | if (lktask != null&& lktask.Count>0) |
| | | { |
| | | PushTasksToWCS(lktask); |
| | | } |
| | | |
| | | #endregion |
| | | //_unitOfWorkManage.BeginTran(); |
| | | //Db.InsertNav(mesOutboundOrder).Include(x => x.Details).ExecuteCommand(); |
| | | //_unitOfWorkManage.CommitTran(); |
| | | return MesResponseContent.Instance.OK(); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | try |
| | | { |
| | | |
| | | Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA58.ToString()); |
| | | Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA581.ToString()); |
| | | if (warehouse == null) |
| | | { |
| | | return MesResponseContent.Instance.Error("ä»åºåºç¡ä¿¡æ¯æªé
ç½®"); |
| | |
| | | CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), |
| | | TaskNo = model.TaskNo, |
| | | OrderType = OutOrderTypeEnum.Issue.ObjToInt(), |
| | | OrderStatus = OutOrderStatusEnum.æªå¼å§.ObjToInt(), |
| | | OrderStatus = OutOrderStatusEnum.åºåºä¸.ObjToInt(), |
| | | WarehouseId = warehouse.WarehouseId, |
| | | Details = mesPPCutOutboundOrderDetail, |
| | | }; |
| | | _unitOfWorkManage.BeginTran(); |
| | | Db.InsertNav(mesPPOutboundOrder).Include(x => x.Details).ExecuteCommand(); |
| | | _unitOfWorkManage.CommitTran(); |
| | | |
| | | #region |
| | | //List<Dt_Task> tasks = new List<Dt_Task>(); |
| | | List<Dt_Task> tasks = new List<Dt_Task>(); |
| | | |
| | | //List<Dt_StockInfo>? stockInfos = null; |
| | | //List<Dt_OutStockLockInfo>? outStockLockInfos = null; |
| | | //List<Dt_LocationInfo>? locationInfos = null; |
| | | //{ |
| | | //(List<Dt_StockInfo>, Dt_MesPPCutOutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignStockOutbound(mesPPOutboundOrder, mesPPCutOutboundOrderDetail); |
| | | // if (result.Item1 != null && result.Item1.Count > 0) |
| | | // { |
| | | // tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound); |
| | | // result.Item2.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); |
| | | // result.Item3.ForEach(x => |
| | | // { |
| | | // x.Status = OutLockStockStatusEnum.åºåºä¸.ObjToInt(); |
| | | // }); |
| | | List<Dt_StockInfo>? stockInfos = null; |
| | | List<Dt_OutStockLockInfo>? outStockLockInfos = null; |
| | | List<Dt_LocationInfo>? locationInfos = null; |
| | | { |
| | | (List<Dt_StockInfo>, List<Dt_MesPPCutOutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignPPCutStockOutbound(mesPPOutboundOrder, mesPPCutOutboundOrderDetail); |
| | | if (result.Item1 != null && result.Item1.Count > 0) |
| | | { |
| | | tasks = GetTasks(result.Item1, TaskTypeEnum.MesPPCutOutbound); |
| | | result.Item2.ForEach(x => |
| | | { |
| | | x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); |
| | | }); |
| | | result.Item3.ForEach(x => |
| | | { |
| | | x.Status = OutLockStockStatusEnum.åºåºä¸.ObjToInt(); |
| | | }); |
| | | |
| | | // stockInfos = result.Item1; |
| | | // mesPPCutOutboundOrderDetail = result.Item2; |
| | | // outStockLockInfos = result.Item3; |
| | | // locationInfos = result.Item4; |
| | | stockInfos = result.Item1; |
| | | mesPPCutOutboundOrderDetail = result.Item2; |
| | | outStockLockInfos = result.Item3; |
| | | locationInfos = result.Item4; |
| | | |
| | | // } |
| | | // else |
| | | // { |
| | | // throw new Exception("æ åºå"); |
| | | // } |
| | | //} |
| | | //tasks.ForEach(x => |
| | | //{ |
| | | // x.TargetAddress = mesPPCutOutboundOrderDetail.TargetAddressCode; |
| | | //}); |
| | | //_unitOfWorkManage.BeginTran(); |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("æ åºå"); |
| | | } |
| | | } |
| | | |
| | | |
| | | //int id = BaseDal.AddData(tasks); |
| | | //outStockLockInfos.ForEach(x => |
| | | //{ |
| | | // x.OrderNo = mesPPOutboundOrder.TaskNo; |
| | | // x.OrderDetailId = id; |
| | | //}); |
| | | ////_outboundService.MesPPOutboundOrderService.Repository.AddData(mesOutboundOrder); |
| | | int id = BaseDal.AddData(tasks); |
| | | outStockLockInfos.ForEach(x => |
| | | { |
| | | x.OrderNo = mesPPOutboundOrder.TaskNo; |
| | | }); |
| | | |
| | | if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0) |
| | | { |
| | | WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks); |
| | | |
| | | if (!content.Status) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return MesResponseContent.Instance.Error(content.Message); |
| | | } |
| | | } |
| | | //Db.InsertNav(mesPPOutboundOrder).Include(x => x.Details).ExecuteCommand(); |
| | | //if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0) |
| | | //{ |
| | | // WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks); |
| | | |
| | | // if (!content.Status) |
| | | // { |
| | | // _unitOfWorkManage.RollbackTran(); |
| | | // return MesResponseContent.Instance.Error(content.Message); |
| | | // } |
| | | //} |
| | | //_unitOfWorkManage.CommitTran(); |
| | | //PushTasksToWCS(tasks, "AGV_PP"); |
| | | _unitOfWorkManage.CommitTran(); |
| | | PushTasksToWCS(tasks, "AGV_PP"); |
| | | #endregion |
| | | return MesResponseContent.Instance.OK(); |
| | | } |
| | |
| | | TaskType = TaskTypeEnum.Inbound.ObjToInt(), |
| | | TaskStatus = TaskStatusEnum.New.ObjToInt(), |
| | | WarehouseId = stockInfo.WarehouseId, |
| | | PalletType = stockInfo.PalletType |
| | | PalletType = stockInfo.PalletType, |
| | | }; |
| | | string MaterielCode = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode; |
| | | float Quantity = (float)stockInfo.Details.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity); |
| | | string BatchNo = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.BatchNo; |
| | | if (MaterielCode != null && Quantity != null && BatchNo != null) |
| | | { |
| | | newTask.MaterielCode = MaterielCode; |
| | | newTask.Quantity = Quantity; |
| | | newTask.BatchNo = BatchNo; |
| | | } |
| | | LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; |
| | | _unitOfWorkManage.BeginTran(); |
| | | _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation); |
| | |
| | | MesResponseContent content = new MesResponseContent(); |
| | | try |
| | | { |
| | | //é夿æ¥è¯¢ç«åº,å¹³åº |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA58.ToString()); |
| | | List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => |
| | | x.WarehouseId == warehouse.WarehouseId && |
| | | x.StockStatus == (int)StockStatusEmun.å
¥åºå®æ).Includes(x => x.Details).ToList(); |
| | | Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.MaterielCode == model.MaterialCode && x.CutedWidth == model.CutedWidth)); |
| | | if (stockInfo == null) |
| | | Dt_Warehouse lkwarehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA58.ToString()); |
| | | Dt_Warehouse pkwarehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA581.ToString()); |
| | | |
| | | if (lkwarehouse == null || pkwarehouse == null) |
| | | { |
| | | return content.Error($"PPä»ç«åº/å¹³åºï¼ç©æç¼å·:{model.MaterialCode},è£å宽:{model.CutedWidth},æªæ¾å°æ¤ç©æåºåä¿¡æ¯"); |
| | | return content.Error("ç«åºæå¹³åºä»åºä¿¡æ¯ä¸åå¨"); |
| | | } |
| | | var stock = stockInfo.Details.FirstOrDefault(); |
| | | if (stock != null) |
| | | |
| | | List<Dt_StockInfo> lkstockInfos = _stockRepository.StockInfoRepository.Db |
| | | .Queryable<Dt_StockInfo>() |
| | | .Where(x => x.WarehouseId == lkwarehouse.WarehouseId |
| | | && x.StockStatus == (int)StockStatusEmun.å
¥åºå®æ) |
| | | .Includes(x => x.Details) |
| | | .ToList(); |
| | | |
| | | List<Dt_StockInfo> lkTargetStockInfos = lkstockInfos |
| | | .Where(x => x.Details != null && x.Details.Any(d => d.MaterielCode == model.MaterialCode)) |
| | | .ToList(); |
| | | |
| | | List<Dt_StockInfo> pkstockInfos = _stockRepository.StockInfoRepository.Db |
| | | .Queryable<Dt_StockInfo>() |
| | | .Where(x => x.WarehouseId == pkwarehouse.WarehouseId |
| | | && x.StockStatus == (int)StockStatusEmun.å
¥åºå®æ) |
| | | .Includes(x => x.Details) |
| | | .ToList(); |
| | | |
| | | List<Dt_StockInfo> pkTargetStockInfos = pkstockInfos |
| | | .Where(x => x.Details != null && x.Details.Any(d => d.MaterielCode == model.MaterialCode)) |
| | | .ToList(); |
| | | |
| | | |
| | | decimal lkTotalQuantity = (decimal)lkTargetStockInfos |
| | | .SelectMany(x => x.Details ?? new List<Dt_StockInfoDetail>()) |
| | | .Where(d => d.MaterielCode == model.MaterialCode) |
| | | .Sum(d => d.StockQuantity); |
| | | |
| | | // å¹³åºæ»æ° |
| | | decimal pkTotalQuantity = (decimal)pkTargetStockInfos |
| | | .SelectMany(x => x.Details ?? new List<Dt_StockInfoDetail>()) |
| | | .Where(d => d.MaterielCode == model.MaterialCode) |
| | | .Sum(d => d.StockQuantity); |
| | | |
| | | if (lkTotalQuantity <= 0 && pkTotalQuantity <= 0) |
| | | { |
| | | content.Content = new |
| | | { |
| | | MaterialCode = stock.MaterielCode, |
| | | Quantity = stock.StockQuantity, |
| | | Unit = stock.Unit, |
| | | Warehouse = warehouse.WarehouseCode, |
| | | WarehouseName = warehouse.WarehouseName, |
| | | CutedWidth = stock.CutedWidth, |
| | | CarrierCode = stockInfo.PalletCode, |
| | | MaterialLot = stock.BatchNo, |
| | | }; |
| | | return content.Error($"PPä»ç«åº/å¹³åºï¼ç©æç¼å·:{model.MaterialCode},æªæ¾å°æ¤ç©æåºåä¿¡æ¯"); |
| | | } |
| | | |
| | | content.Content = new List<object> |
| | | { |
| | | new |
| | | { |
| | | MaterialCode = model.MaterialCode, |
| | | Quantity = lkTotalQuantity, |
| | | Unit = lkTargetStockInfos.SelectMany(x => x.Details ?? new List<Dt_StockInfoDetail>()) |
| | | .Where(d => d.MaterielCode == model.MaterialCode) |
| | | .FirstOrDefault()?.Unit ?? "ç®±", |
| | | Warehouse = lkwarehouse.WarehouseCode, |
| | | WarehouseName = lkwarehouse.WarehouseName, |
| | | CutedWidth = 0, |
| | | CarrierCode = "", |
| | | MaterialLot = "", |
| | | }, |
| | | new |
| | | { |
| | | MaterialCode = model.MaterialCode, |
| | | Quantity = pkTotalQuantity, |
| | | Unit = pkTargetStockInfos.SelectMany(x => x.Details ?? new List<Dt_StockInfoDetail>()) |
| | | .Where(d => d.MaterielCode == model.MaterialCode) |
| | | .FirstOrDefault()?.Unit ?? "ç®±", |
| | | Warehouse = pkwarehouse.WarehouseCode, |
| | | WarehouseName = pkwarehouse.WarehouseName, |
| | | CutedWidth = 0, |
| | | CarrierCode = "", |
| | | MaterialLot = "", |
| | | } |
| | | }; |
| | | |
| | | return content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return MesResponseContent.Instance.Error(ex.Message); |
| | | return MesResponseContent.Instance.Error($"æ¥è¯¢åºå失败ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// MESæåå
¥åºåæ¥æ¶ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public MesResponseContent BagInfoSync(MesBagInfoModel bagInfoModel) |
| | | { |
| | | MesResponseContent content = new MesResponseContent(); |
| | | try |
| | | { |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == bagInfoModel.WarehouseCode); |
| | | if (warehouse == null) |
| | | { |
| | | return content.Error("æªæ¾å°ä»åºä¿¡æ¯"); |
| | | } |
| | | Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.WarehouseId == warehouse.WarehouseId); |
| | | if (locationInfo==null) |
| | | { |
| | | return content.Error($"æªæ¾å°{warehouse.WarehouseCode}è´§ä½ä¿¡æ¯"); |
| | | } |
| | | //å
å
ä¿¡æ¯ç»ç |
| | | List<Dt_MesProInOrderDetail> mesProInOrderDetails = new List<Dt_MesProInOrderDetail>(); |
| | | foreach (var item in bagInfoModel.BagDetails) |
| | | { |
| | | foreach (var child in item.BagItems) |
| | | { |
| | | Dt_MesProInOrderDetail mesProInOrderDetail = new Dt_MesProInOrderDetail() |
| | | { |
| | | BagNo = item.BagNo, |
| | | ProductCode = item.ProductCode, |
| | | ProductVersion = item.ProductVersion, |
| | | SETQty = child.SETQty, |
| | | OKPCSQTY = child.OKPCSQTY, |
| | | DateCode = item.DateCode, |
| | | XQty = child.XQty, |
| | | XSite = child.XSite, |
| | | Weight = item.Weight, |
| | | PackingDate = item.PackingDate, |
| | | LotNumber = child.LotNumber, |
| | | ERPOrder = child.ERPOrder, |
| | | SaleOrder = child.SaleOrder, |
| | | MoNumber = child.MoNumber, |
| | | }; |
| | | mesProInOrderDetails.Add(mesProInOrderDetail); |
| | | } |
| | | } |
| | | List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>(); |
| | | foreach (var item in mesProInOrderDetails) |
| | | { |
| | | proStockInfoDetails.Add(_mapper.Map<Dt_ProStockInfoDetail>(item)); |
| | | } |
| | | Dt_MesProInOrder mesProInOrder = new Dt_MesProInOrder() |
| | | { |
| | | WarehouseId = warehouse.WarehouseId, |
| | | BatchNo = bagInfoModel.BatchNo, |
| | | WorkCenter = bagInfoModel.WorkCenter, |
| | | MesProStatus = InOrderStatusEnum.æªå¼å§.ObjToInt(), |
| | | UnPackStock = bagInfoModel.UnPackStock, |
| | | Details = mesProInOrderDetails |
| | | }; |
| | | Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo() |
| | | { |
| | | PalletCode = bagInfoModel.BatchNo, |
| | | PalletType = 1, |
| | | WarehouseId = warehouse.WarehouseId, |
| | | StockStatus = StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt(), |
| | | proStockInfoDetails = proStockInfoDetails |
| | | }; |
| | | Dt_Task newTask = new Dt_Task() |
| | | { |
| | | CurrentAddress = bagInfoModel.WorkCenter, |
| | | Grade = 0, |
| | | NextAddress = "", |
| | | PalletCode = proStockInfo.PalletCode, |
| | | Roadway = locationInfo.RoadwayNo, |
| | | SourceAddress = bagInfoModel.WorkCenter, |
| | | TargetAddress = "", |
| | | TaskType = TaskTypeEnum.InProduct.ObjToInt(), |
| | | TaskStatus = TaskStatusEnum.New.ObjToInt(), |
| | | WarehouseId = warehouse.WarehouseId, |
| | | PalletType = proStockInfo.PalletType |
| | | }; |
| | | _unitOfWorkManage.BeginTran(); |
| | | int taskId = BaseDal.AddData(newTask); |
| | | newTask.TaskId = taskId; |
| | | Db.InsertNav(mesProInOrder).Include(x => x.Details).ExecuteCommand(); |
| | | Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand(); |
| | | _unitOfWorkManage.CommitTran(); |
| | | //æ¨éä»»å¡ |
| | | PushTasksToWCS(new List<Dt_Task> { newTask }); |
| | | return content.OK("æ¥æ¶æå"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | //å¤å
ä¿¡æ¯æ¥æ¶ |
| | | public MesResponseContent BoxStockin(MesBoxInfoModel boxInfoModel) |
| | | { |
| | | MesResponseContent content = new MesResponseContent(); |
| | | try |
| | | { |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString()); |
| | | //è·åMESå
å
ä¿¡æ¯ |
| | | List<Dt_MesProInOrderDetail> mesProInOrderDetails = new List<Dt_MesProInOrderDetail>(); |
| | | foreach (var item in boxInfoModel.Bags) |
| | | { |
| | | foreach (var child in item.BagItems) |
| | | { |
| | | Dt_MesProInOrderDetail mesProInOrderDetail = new Dt_MesProInOrderDetail() |
| | | { |
| | | BagNo = item.BagNo, |
| | | ProductCode = item.ProductCode, |
| | | ProductVersion = item.ProductVersion, |
| | | SETQty = child.SETQty, |
| | | OKPCSQTY = child.OKPCSQTY, |
| | | DateCode = item.DateCode, |
| | | XQty = child.XQty, |
| | | XSite = child.XSite, |
| | | Weight = item.Weight, |
| | | PackingDate = item.PackingDate, |
| | | LotNumber = child.LotNumber, |
| | | ERPOrder = child.ERPOrder, |
| | | SaleOrder = child.SaleOrder, |
| | | MoNumber = child.MoNumber, |
| | | }; |
| | | mesProInOrderDetails.Add(mesProInOrderDetail); |
| | | } |
| | | } |
| | | List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>(); |
| | | foreach (var item in mesProInOrderDetails) |
| | | { |
| | | proStockInfoDetails.Add(_mapper.Map<Dt_ProStockInfoDetail>(item)); |
| | | } |
| | | Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo() |
| | | { |
| | | PalletCode = boxInfoModel.BoxNo, |
| | | PalletType = 0, |
| | | WarehouseId = warehouse.WarehouseId, |
| | | ShipmentOrder = boxInfoModel.ShipmentOrder, |
| | | StockStatus = StockStatusEmun.å
¥åºå®æ.ObjToInt(), |
| | | proStockInfoDetails = proStockInfoDetails |
| | | }; |
| | | _unitOfWorkManage.BeginTran(); |
| | | Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand(); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return content.OK("å¤å
æ¥æ¶æå"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// æåè¿å·¥æåº |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public MesResponseContent RworkTask(RworkTaskModel model) |
| | | { |
| | | MesResponseContent content = new MesResponseContent(); |
| | | try |
| | | { |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA72.ToString()); |
| | | if (warehouse==null) |
| | | { |
| | | return MesResponseContent.Instance.Error("æªæ¾å°æ¤ä»åº"); |
| | | } |
| | | Dt_MesRworkOutboundOrder mesRworkOutboundOrder = new Dt_MesRworkOutboundOrder() |
| | | { |
| | | WarehouseId=warehouse.WarehouseId, |
| | | TaskNo=model.TaskNo, |
| | | OrderStatus = InOrderStatusEnum.æªå¼å§.ObjToInt(), |
| | | CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), |
| | | ProductCode=model.ProductCode, |
| | | ProductName=model.ProductName, |
| | | ProductVersion=model.ProductVersion, |
| | | DateCode=model.DateCode, |
| | | RequiredQuantity=model.RequiredQuantity, |
| | | FactoryCode= model.FactoryCode, |
| | | SaleOrder=model.SaleOrder, |
| | | InventoryType=model.InventoryType, |
| | | }; |
| | | _unitOfWorkManage.BeginTran(); |
| | | _outboundService.RworkOutboundOrderService.AddData(mesRworkOutboundOrder); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return content.OK("æä¾è¿åºåæ¥æ¶æå"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// çæPP大å·åºåºä»»å¡ |
| | |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// è·åMESé»çæ¹æ¬¡ä¿¡æ¯ |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent GetZHMesMaterialLot(string materialLot) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMS_MES_GetProductByLot.ToString()); |
| | | object obj = new { LotNo = materialLot }; |
| | | MESRoot<object> root = new MESRoot<object>() |
| | | { |
| | | From = "WMS", |
| | | DateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | Content = obj |
| | | }; |
| | | JsonSerializerSettings settings = new JsonSerializerSettings |
| | | { |
| | | ContractResolver = new CamelCasePropertyNamesContractResolver() |
| | | }; |
| | | string request = JsonConvert.SerializeObject(root, settings); |
| | | string response = HttpMesHelper.Post(apiInfo.ApiAddress, request); |
| | | MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>(); |
| | | //è°ç¨æ¥å£ |
| | | if (mesResponseContent.BSucc == true) |
| | | { |
| | | content.OK(mesResponseContent.StrMsg, mesResponseContent.Content); |
| | | } |
| | | else |
| | | { |
| | | content.Error(mesResponseContent.StrMsg); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | public WebResponseContent PPTaskMove(string palletCode, string startPoint, int warehouseId, List<string> serNums) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == warehouseId); |
| | | if (warehouse == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥ä»åºä¿¡æ¯"); |
| | | } |
| | | |
| | | Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode && x.WarehouseId == warehouseId); |
| | | if (task != null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æçå·²çæä»»å¡"); |
| | | } |
| | | |
| | | List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.PPPKSerNumAnalysis, serNums); |
| | | //éªè¯å¤ææ¶é´æ ¼å¼ |
| | | WebResponseContent IsValidContent = IsValidMCDates(models); |
| | | if (!IsValidContent.Status) |
| | | { |
| | | return content.Error(IsValidContent.Message); |
| | | } |
| | | |
| | | Dt_Task newTask = new Dt_Task() |
| | | { |
| | | CurrentAddress = startPoint, |
| | | Grade = 0, |
| | | NextAddress = "PPCuttingWarehouse", |
| | | PalletCode = palletCode, |
| | | Roadway = "AGV_PP", |
| | | SourceAddress = startPoint, |
| | | TargetAddress = "PPCuttingWarehouse", |
| | | TaskType = TaskTypeEnum.MesPPMove.ObjToInt(), |
| | | TaskStatus = TaskStatusEnum.New.ObjToInt(), |
| | | WarehouseId = warehouseId, |
| | | PalletType = 0, |
| | | MaterielCode = models.FirstOrDefault()?.MaterielCode, |
| | | Quantity = (float)models.FirstOrDefault()?.Quantity, |
| | | BatchNo = models.FirstOrDefault()?.LotNo |
| | | }; |
| | | if (palletCode.Contains("DJ")) |
| | | { |
| | | newTask.PalletType = 2; |
| | | } |
| | | else if (palletCode.Contains("XJ")) |
| | | { |
| | | newTask.PalletType = 1; |
| | | } |
| | | else |
| | | { |
| | | return WebResponseContent.Instance.Error("该æçç éè¯¯ï¼æä¸å±äºPPå¹³åº"); |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | int taskId = BaseDal.AddData(newTask); |
| | | newTask.TaskId = taskId; |
| | | _unitOfWorkManage.CommitTran(); |
| | | PushTasksToWCS(new List<Dt_Task> { newTask }, "AGV_PP"); |
| | | content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | public WebResponseContent IsValidMCDates(List<MatSerNumAnalysisModel> analysisModels) |
| | | { |
| | | string[] effDates = analysisModels.Select(x => x.EffectiveDate).Distinct().ToArray(); |
| | | string[] ProDates = analysisModels.Select(x => x.ProductionDate).Distinct().ToArray(); |
| | | foreach (string effDate in effDates) |
| | | { |
| | | string format = "yyyy-MM-dd"; // ç®æ æ ¼å¼ |
| | | DateTime parsedDate; |
| | | // è§£æå¹¶éªè¯æ ¼å¼ |
| | | bool isValid = DateTime.TryParseExact( |
| | | effDate, |
| | | format, |
| | | CultureInfo.InvariantCulture, |
| | | DateTimeStyles.None, |
| | | out parsedDate |
| | | ); |
| | | |
| | | if (!isValid) |
| | | { |
| | | return WebResponseContent.Instance.Error("æ ¼å¼æ æææ¥æä¸åæ³"); |
| | | } |
| | | } |
| | | foreach (string ProDate in ProDates) |
| | | { |
| | | string format = "yyyy-MM-dd"; // ç®æ æ ¼å¼ |
| | | DateTime parsedDate; |
| | | // è§£æå¹¶éªè¯æ ¼å¼ |
| | | bool isValid = DateTime.TryParseExact( |
| | | ProDate, |
| | | format, |
| | | CultureInfo.InvariantCulture, |
| | | DateTimeStyles.None, |
| | | out parsedDate |
| | | ); |
| | | |
| | | if (!isValid) |
| | | { |
| | | return WebResponseContent.Instance.Error("æ ¼å¼æ æææ¥æä¸åæ³"); |
| | | } |
| | | } |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | } |
| | | } |