| | |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_DTO.Inbound; |
| | | using WIDESEA_DTO.Task; |
| | | using WIDESEA_IStockService; |
| | | using WIDESEA_ITaskInfoService; |
| | | using WIDESEA_Model.Models; |
| | | using static WIDESEA_ITaskInfoService.ITaskService; |
| | | |
| | |
| | | { |
| | | public partial class TaskService |
| | | { |
| | | public static List<string> InStationareaList = new List<string>() { "1113", "1114", "1115", "1116", "1117", "1118", "1119", "1120", "1121", "1122" ,"1123"}; |
| | | //å
¥åºï¼ç©ºçååº |
| | | public ApiResponse AddInStoreDoc(MES_InTask mES_In) |
| | | { |
| | |
| | | Dt_Task setask = BaseDal.QueryData(x => x.PalletCode == mES_In.containerNo).FirstOrDefault(); |
| | | if (setask != null) return apiResponse.Error($"WMSå·²æå½åä»»å¡ï¼ä¸å¯éå¤ä¸åï¼æçç¼å·ï¼{mES_In.containerNo}"); |
| | | |
| | | // 夿ä¸åçæçç¼å·æ¯å¦åºåæçç¼å·æéå¤ |
| | | if (_stockInfoService.IsContainerNoExist(mES_In.containerNo)) return apiResponse.Error($"å½ååºä½å·²æè¯¥æçç¼å·ï¼æçç¼å·ï¼{mES_In.containerNo}"); |
| | | Dt_Warehouse dt_Warehouse = _warehouseService.QueryWarehouse(mES_In.warehouseNo); |
| | | int LocationType = 1; |
| | | string Roadway = "0"; |
| | | |
| | | if(mES_In.startPosition == "1206") |
| | | { |
| | | mES_In.startPosition = "1205"; |
| | | } |
| | | |
| | | string SourceAddress = mES_In.startPosition; |
| | | string TargetAddress = ""; |
| | |
| | | { |
| | | LocationType = 3; |
| | | } |
| | | Roadway = _locationInfoService.AccessingTunnel(dt_Warehouse.WarehouseId, LocationType); |
| | | if (Roadway == "0") return apiResponse.Error($"WMSæªè½æ¥è¯¢é对åºå··éç¼å·ï¼ä»åºç¼ç ï¼{mES_In.warehouseNo}"); |
| | | |
| | | // æ¥è¯¢æ¯ä¸ªå··éå·ç任塿°é |
| | | List<RoadwayTaskCount> roadwayTaskCounts; |
| | | |
| | | // æ ¹æ® WarehouseId è·å对åºçå··éå表 |
| | | var roadwayList = WarehouseId == 1 |
| | | ? new[] { "1", "2" } |
| | | : new[] { "3", "4", "5" }; |
| | | |
| | | // æ¥è¯¢æ°æ®åºä¸çå®é
æ°æ® |
| | | var queryData = BaseDal.QueryData(x => x.WarehouseId == WarehouseId && x.PalletType == (LocationType.ToString() == "3" ? "1" : LocationType.ToString())) |
| | | .GroupBy(x => x.Roadway) |
| | | .Select(g => new RoadwayTaskCount |
| | | { |
| | | Roadway = g.Key, |
| | | TaskCount = g.Count() |
| | | }) |
| | | .ToList(); |
| | | |
| | | // åå¹¶ææéè¦çå··éï¼ç¡®ä¿æ¯ä¸ªå··é齿坹åºç TaskCount |
| | | roadwayTaskCounts = roadwayList |
| | | .Select(roadway => new RoadwayTaskCount |
| | | { |
| | | Roadway = roadway, |
| | | TaskCount = queryData.FirstOrDefault(x => x.Roadway == roadway)?.TaskCount ?? 0 |
| | | }) |
| | | .ToList(); |
| | | |
| | | //var taskCount = BaseDal.QueryData(x => x.WarehouseId == WarehouseId && x.PalletType == LocationType.ToString()).Count(); |
| | | |
| | | Roadway = _locationInfoService.AccessingTunnel(dt_Warehouse.WarehouseId, LocationType, roadwayTaskCounts); |
| | | |
| | | //if (Roadway == "0") return apiResponse.Error($"WMSæªè½æ¥è¯¢é对åºå··éç¼å·ï¼ä»åºç¼ç ï¼{mES_In.warehouseNo}"); |
| | | if (Roadway == "0") return apiResponse.Error($"å½åä»åºå·²ç»æ»¡ï¼{mES_In.warehouseNo}"); |
| | | //è·å对åºPLCç«å°ä¿¡æ¯ |
| | | Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(Roadway); |
| | | NextAddress = _Roadwayinfo.InStationCode; |
| | |
| | | task.Grade = 1; |
| | | task.Creater = "MES"; |
| | | task.CreateDate = DateTime.Now; |
| | | int taskid=BaseDal.AddData(task); |
| | | |
| | | /*Dt_StockInfo dt_StockInfo = new Dt_StockInfo(); |
| | | dt_StockInfo.PalletCode = task.PalletCode; |
| | | dt_StockInfo.PalletType = task.PalletType; |
| | | dt_StockInfo.WarehouseId = task.WarehouseId; |
| | | dt_StockInfo.StockStatus = (int)StockStatusEmun.å
¥åºä¸; |
| | | dt_StockInfo.Creater = "MWS"; |
| | | dt_StockInfo.CreateDate = DateTime.Now;*/ |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.AddData(task); |
| | | //_stockInfoService.Repository.AddData(dt_StockInfo); |
| | | _unitOfWorkManage.CommitTran(); |
| | | WriteLog.Write_Log("MES_æ¥æ¶å
¥åºä»»å¡ä¸å", $"åé¦ä¿¡æ¯", "æå", $"任塿·»å æåï¼æçæ¡ç ï¼{task.PalletCode}"); |
| | | return apiResponse.OK(); |
| | | //å建任å¡åï¼å¤ææ¯å¦æ¯äº§çº¿ååºçä»»å¡ |
| | | if (!InStationareaList.Contains(task.SourceAddress)) |
| | | { |
| | | WriteLog.Write_Log("MES_æ¥æ¶å
¥åºä»»å¡ä¸å", $"åé¦ä¿¡æ¯", "æå", $"任塿·»å æåï¼æçæ¡ç ï¼{task.PalletCode}"); |
| | | return apiResponse.OK(); |
| | | } |
| | | else |
| | | { |
| | | WCSginseng result = PLC_IssueTasks( |
| | | taskid, // 䏿¯task.Taskid |
| | | task.WarehouseId, |
| | | task.TaskNum, |
| | | task.PalletCode, |
| | | int.Parse(task.PalletType), |
| | | task.CurrentAddress, |
| | | task.NextAddress, |
| | | ""); |
| | | if (result.IsSuccess) |
| | | { |
| | | Dt_Task deltaskin = BaseDal.QueryData(x => x.TaskId == taskid).FirstOrDefault(); |
| | | deltaskin.TaskStatus = (int)InTaskStatusEnum.PLC_InExecuting; |
| | | deltaskin.Dispatchertime = DateTime.Now; |
| | | string Result = MesInTaskStatusEnum.Start.GetDescription(); |
| | | BaseDal.UpdateData(deltaskin); |
| | | //è°å䏿¸¸ç³»ç»åé¦å¼å§ä»»å¡ |
| | | InStoreDocCallback(task.TaskNum, Result, "æä½æå", task.PalletCode, ""); |
| | | return apiResponse.OK(); |
| | | } |
| | | else |
| | | { |
| | | Dt_Task deltask= BaseDal.QueryData(x => x.TaskId == taskid).FirstOrDefault(); |
| | | BaseDal.DeleteData(deltask); |
| | | return apiResponse.Error($"ä¸åä»»å¡å¤±è´¥ï¼ä¸åWCS失败ï¼åå ï¼{result.Message}"); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | if (string.IsNullOrWhiteSpace(mES_In.containerNo)) return apiResponse.Error("æçç ä¸è½ä¸ºç©º"); |
| | | if (string.IsNullOrWhiteSpace(mES_In.endPosition)) return apiResponse.Error("ç®æ ä½ç½®ä¸è½ä¸ºç©º"); |
| | | |
| | | |
| | | Dt_StockInfo dt_Stock=_stockInfoService.Repository.QueryData(x=>x.PalletCode== mES_In.containerNo && x.StockStatus== (int)StockStatusEmun.å·²å
¥åº).FirstOrDefault(); |
| | | // å½åä»»å¡mES_In.endPositionç®æ ä½ç½®1113 - 1122 |
| | | var restrictedPositions = new List<string> { "1113", "1114", "1115", "1116", "1117", "1118", "1119", "1120", "1121", "1122", "1123" }; |
| | | bool isRestrictedPosition = restrictedPositions.Contains(mES_In.endPosition); |
| | | if (isRestrictedPosition) |
| | | { |
| | | bool hasExistingTask = BaseDal.QueryData(x => x.TargetAddress == mES_In.endPosition).Any(); |
| | | if (hasExistingTask) |
| | | { |
| | | // ç®æ ä½ç½®å¨1113-1122èå´å
çå¤çé»è¾ |
| | | return apiResponse.Error($"å½åæå»ç®æ ä½ç½®{mES_In.endPosition}çä»»å¡ï¼è¯·éæ°æä½"); |
| | | } |
| | | } |
| | | Dt_StockInfo dt_Stock=_stockInfoService.Repository.QueryData(x=>x.PalletCode== mES_In.containerNo).FirstOrDefault(); |
| | | if (dt_Stock == null) return apiResponse.Error($"WMSæªè½æ¥æ¾é该æçæ¡ç çåºåè´§ä½ä¿¡æ¯ï¼æ¡ç ï¼{mES_In.containerNo}"); |
| | | |
| | | Dt_LocationInfo dt_LocationInfo = _locationInfoService.Repository.QueryData(x => x.LocationCode == dt_Stock.LocationCode && x.LocationStatus== (int)LocationStatusEnum.InStock).FirstOrDefault(); |
| | | if (dt_LocationInfo == null) return apiResponse.Error($"WMSæªè½æ¥æ¾é该æçæ¡ç çåºåè´§ä½ä¿¡æ¯ï¼æ¡ç ï¼{mES_In.containerNo}ï¼æªæ¾å°è´§ä½å·ï¼{dt_Stock.LocationCode}"); |
| | | if(dt_Stock.StockStatus == (int)StockStatusEmun.å·²å
¥åº) |
| | | { |
| | | Dt_LocationInfo dt_LocationInfo = _locationInfoService.Repository.QueryData(x => x.LocationCode == dt_Stock.LocationCode && x.LocationStatus == (int)LocationStatusEnum.InStock).FirstOrDefault(); |
| | | if (dt_LocationInfo == null) return apiResponse.Error($"WMSæªè½æ¥æ¾é该æçæ¡ç çåºåè´§ä½ä¿¡æ¯ï¼æ¡ç ï¼{mES_In.containerNo}ï¼æªæ¾å°è´§ä½å·ï¼{dt_Stock.LocationCode}"); |
| | | |
| | | Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(dt_LocationInfo.RoadwayNo); |
| | | Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(dt_LocationInfo.RoadwayNo); |
| | | |
| | | Dt_Task setask = BaseDal.QueryData(x => x.PalletCode == mES_In.containerNo).FirstOrDefault(); |
| | | if (setask != null) return apiResponse.Error($"WMSå·²æå½åä»»å¡ï¼ä¸å¯éå¤ä¸åï¼æçç¼å·ï¼{mES_In.containerNo}"); |
| | | Dt_Task setask = BaseDal.QueryData(x => x.PalletCode == mES_In.containerNo).FirstOrDefault(); |
| | | if (setask != null) return apiResponse.Error($"WMSå·²æå½åä»»å¡ï¼ä¸å¯éå¤ä¸åï¼æçç¼å·ï¼{mES_In.containerNo}"); |
| | | |
| | | Dt_Task task = new Dt_Task(); |
| | | task.TaskNum = mES_In.transNo; |
| | | task.PalletCode = dt_Stock.PalletCode; |
| | | task.PalletType = dt_Stock.PalletType; |
| | | task.Roadway = dt_LocationInfo.RoadwayNo; |
| | | task.TaskType = (int)TaskTypeEnum.Outbound; |
| | | task.TaskStatus = (int)OutTaskStatusEnum.OutNew; |
| | | task.SourceAddress = dt_LocationInfo.LocationCode; |
| | | task.TargetAddress = mES_In.endPosition; |
| | | task.CurrentAddress = dt_LocationInfo.LocationCode; |
| | | task.NextAddress = _Roadwayinfo.OutSCStationCode; |
| | | task.WarehouseId = dt_LocationInfo.WarehouseId; |
| | | task.OrderNo = mES_In.transDate.ToString(); |
| | | task.Grade = 1; |
| | | task.Creater = "MES"; |
| | | task.CreateDate = DateTime.Now; |
| | | Dt_Task task = new Dt_Task(); |
| | | task.TaskNum = mES_In.transNo; |
| | | task.PalletCode = dt_Stock.PalletCode; |
| | | task.PalletType = dt_Stock.PalletType; |
| | | task.Roadway = dt_LocationInfo.RoadwayNo; |
| | | task.TaskType = (int)TaskTypeEnum.Outbound; |
| | | task.TaskStatus = (int)OutTaskStatusEnum.OutNew; |
| | | task.SourceAddress = dt_LocationInfo.LocationCode; |
| | | task.TargetAddress = mES_In.endPosition; |
| | | task.CurrentAddress = dt_LocationInfo.LocationCode; |
| | | task.NextAddress = _Roadwayinfo.OutSCStationCode; |
| | | task.WarehouseId = dt_LocationInfo.WarehouseId; |
| | | task.OrderNo = mES_In.transDate.ToString(); |
| | | task.Grade = 1; |
| | | task.Creater = "MES"; |
| | | task.CreateDate = DateTime.Now; |
| | | |
| | | dt_Stock.StockStatus = (int)StockStatusEmun.åºåºä¸; |
| | | dt_LocationInfo.LocationStatus = (int)LocationStatusEnum.Lock; |
| | | dt_Stock.StockStatus = (int)StockStatusEmun.åºåºä¸; |
| | | dt_LocationInfo.LocationStatus = (int)LocationStatusEnum.Lock; |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.AddData(task); |
| | | _stockInfoService.Repository.UpdateData(dt_Stock); |
| | | _locationInfoService.Repository.UpdateData(dt_LocationInfo); |
| | | _unitOfWorkManage.CommitTran(); |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.AddData(task); |
| | | _stockInfoService.Repository.UpdateData(dt_Stock); |
| | | _locationInfoService.Repository.UpdateData(dt_LocationInfo); |
| | | _unitOfWorkManage.CommitTran(); |
| | | |
| | | |
| | | WriteLog.Write_Log("MES_æ¥æ¶MESåºåºä»»å¡ä¸å", $"åºåºä»»å¡æ·»å ", "æå", $"æ·»å æåï¼æçæ¡ç ï¼{dt_Stock.PalletCode}"); |
| | | return apiResponse.OK(); |
| | | WriteLog.Write_Log("MES_æ¥æ¶MESåºåºä»»å¡ä¸å", $"åºåºä»»å¡æ·»å ", "æå", $"æ·»å æåï¼æçæ¡ç ï¼{dt_Stock.PalletCode}"); |
| | | return apiResponse.OK(); |
| | | }else if(dt_Stock.StockStatus == (int)StockStatusEmun.ç§»åºéå®) |
| | | { |
| | | Dt_LocationInfo dt_LocationInfo = _locationInfoService.Repository.QueryData(x => x.LocationCode == dt_Stock.LocationCode && x.LocationStatus == (int)LocationStatusEnum.Lock).FirstOrDefault(); |
| | | if (dt_LocationInfo == null) return apiResponse.Error($"WMSæªè½æ¥æ¾é该æçæ¡ç çåºåè´§ä½ä¿¡æ¯ï¼æ¡ç ï¼{mES_In.containerNo}ï¼æªæ¾å°è´§ä½å·ï¼{dt_Stock.LocationCode}"); |
| | | |
| | | Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(dt_LocationInfo.RoadwayNo); |
| | | |
| | | Dt_Task task = new Dt_Task(); |
| | | task.TaskNum = mES_In.transNo; |
| | | task.PalletCode = dt_Stock.PalletCode; |
| | | task.PalletType = dt_Stock.PalletType; |
| | | task.Roadway = dt_LocationInfo.RoadwayNo; |
| | | task.TaskType = (int)TaskTypeEnum.Outbound; |
| | | task.TaskStatus = (int)OutTaskStatusEnum.OutWait; |
| | | task.SourceAddress = dt_LocationInfo.LocationCode; |
| | | task.TargetAddress = mES_In.endPosition; |
| | | task.CurrentAddress = dt_LocationInfo.LocationCode; |
| | | task.NextAddress = _Roadwayinfo.OutSCStationCode; |
| | | task.WarehouseId = dt_LocationInfo.WarehouseId; |
| | | task.OrderNo = mES_In.transDate.ToString(); |
| | | task.Grade = 1; |
| | | task.Creater = "MES"; |
| | | task.CreateDate = DateTime.Now; |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.AddData(task); |
| | | _unitOfWorkManage.CommitTran(); |
| | | WriteLog.Write_Log("MES_æ¥æ¶MESåºåºä»»å¡ä¸å", $"åºåºä»»å¡æ·»å ", "æå", $"æ·»å æåï¼æçæ¡ç ï¼{dt_Stock.PalletCode}"); |
| | | return apiResponse.OK(); |
| | | |
| | | } |
| | | else |
| | | { |
| | | WriteLog.Write_Log("MES_æ¥æ¶MESåºåºä»»å¡ä¸å", $"åºåºä»»å¡æ·»å ", $"失败,æçæ¡ç ï¼{dt_Stock.PalletCode}", $"åºåç¶æé误ï¼è¯·æ¥çWMSç³»ç»åºå,åºåç¶æï¼{dt_Stock.StockStatus}"); |
| | | return apiResponse.Error("åºåç¶æé误ï¼è¯·æ¥çWMSç³»ç»åºå"); |
| | | } |
| | | |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | { |
| | | if (string.IsNullOrWhiteSpace(mES_In.transNo)) return apiResponse.Error("åæ®ç¼å·ä¸è½ä¸ºç©º"); |
| | | Dt_Task dt_Task = BaseDal.QueryData(x => x.TaskNum == mES_In.transNo).FirstOrDefault(); |
| | | if (dt_Task == null) return apiResponse.Error($"WMSæªè½æ¥æ¾é对åºåæ®ä»»å¡ï¼æ¡ç ï¼{mES_In.transNo}"); |
| | | if (dt_Task == null) { |
| | | WriteLog.Write_Log("MES_ä»»å¡åæ¶æ¥å£", $"ä»»å¡åæ¶æ¥å£", "æå", $"åæ®ç¼å·ï¼{mES_In.transNo}ï¼æ³¨æï¼ï¼WMSæªè½æ¥æ¾é对åºåæ®ä»»å¡"); |
| | | return apiResponse.OK(); |
| | | //return apiResponse.Error($"WMSæªè½æ¥æ¾é对åºåæ®ä»»å¡ï¼æ¡ç ï¼{mES_In.transNo}"); |
| | | } |
| | | if(dt_Task.TaskStatus== (int)InTaskStatusEnum.InNew) |
| | | { |
| | | BaseDal.DeleteData(dt_Task); |