| | |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Linq.Expressions; |
| | | using System.Reflection; |
| | | using System.Reflection.Metadata; |
| | |
| | | using WIDESEA_Model.Models; |
| | | using WIDESEA_Model.Models.Basic; |
| | | using WIDESEA_Model.Models.ERP; |
| | | using WIDESEA_Model.Models.Order; |
| | | using WIDESEA_OrderRepository; |
| | | using WIDESEA_StorageTaskRepository; |
| | | using WIDESEAWCS_BasicInfoRepository; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | | using static System.Collections.Specialized.BitVector32; |
| | |
| | | private readonly IDt_AreaInfoRepository _areaInfoRepository; //åºå |
| | | private readonly IDt_StationManagerRepository _stationManagerRepository; |
| | | private readonly ISys_ConfigService _configService; |
| | | private readonly IDt_OutboundOrderRepository _outorderRepository; |
| | | private readonly IDt_OutboundOrderDetailRepository _outorderdetailRepository; |
| | | private readonly IDt_OrderOutDetailsRepository _orderOutDetailsRepository; |
| | | |
| | | public Dt_TaskService(IDt_TaskRepository BaseDal, |
| | | IUnitOfWorkManage unitOfWorkManage, |
| | |
| | | IStockInfoDetailRepository stockInfoDetailRepository, |
| | | IDt_StationManagerRepository stationManagerRepository, |
| | | ISys_ConfigService configService, |
| | | IDt_OutboundOrderRepository outorderRepository, |
| | | IDt_OutboundOrderDetailRepository outorderdetailRepository) : base(BaseDal) |
| | | IDt_OrderOutDetailsRepository orderOutDetailsRepository) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _stockInfoRepository = stockInfoRepository; |
| | |
| | | _stockInfoDetailRepository = stockInfoDetailRepository; |
| | | _stationManagerRepository = stationManagerRepository; |
| | | _configService = configService; |
| | | _outorderRepository = outorderRepository; |
| | | _outorderdetailRepository = outorderdetailRepository; |
| | | _orderOutDetailsRepository = orderOutDetailsRepository; |
| | | } |
| | | |
| | | #region å¤é¨æ¥å£æ¹æ³ |
| | |
| | | taskHty.FinishTime = DateTime.Now; |
| | | taskHty.OperateType = App.User.UserName != null ? (int)OperateTypeEnum.äººå·¥å®æ : (int)OperateTypeEnum.èªå¨å®æ; |
| | | taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System"; |
| | | |
| | | //DtStockInfo_Hty stockInfo_Hty = stock.Adapt<DtStockInfo_Hty>(); |
| | | //stockInfo_Hty.ModifyDate = DateTime.Now; |
| | | stock.ModifyDate = DateTime.Now; |
| | | stock.LocationCode = task.TargetAddress; |
| | | var result1 = UpdateLocationStatus(locationStart, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | var result2 = UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | DtStockInfo_Hty stockInfo_Hty = stock.Adapt<DtStockInfo_Hty>(); |
| | | var orderDetails = _orderOutDetailsRepository.QueryData(x => x.PalletCode == task.PalletCode); |
| | | List<Dt_OrderOutDetails_Hty> orderdetailshtys = new List<Dt_OrderOutDetails_Hty>(); |
| | | |
| | | orderDetails.ForEach(item => |
| | | { |
| | | orderdetailshtys.Add(item.Adapt<Dt_OrderOutDetails_Hty>()); |
| | | }); |
| | | //çç¹åºåº |
| | | |
| | | if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound || task.TaskType == (int)TaskOutboundTypeEnum.OutAllocate) |
| | | { |
| | | if (orderDetails.Count > 0) |
| | | content = await ERPAllocate(orderDetails); |
| | | } |
| | | //å
¶ä»åºåº |
| | | else if (task.TaskType == (int)TaskOutboundTypeEnum.OutOther) |
| | | { |
| | | if (orderDetails.Count > 0) |
| | | content = await ERPMixedSend(orderDetails); |
| | | } |
| | | //çäº§é¢æåºåº |
| | | else if (task.TaskType == (int)TaskOutboundTypeEnum.MaterialRequisition) |
| | | { |
| | | if (orderDetails.Count > 0) |
| | | content = await ERPProduction(orderDetails); |
| | | } |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | //await DeleteStockInfoAsync(stock.Id); |
| | | //await DeleteStockInfoDetailsAsync(stock.StockInfoDetails); |
| | | //await AddStockInfoHtyAsync(stockInfo_Hty); |
| | | _stockInfoRepository.UpdateData(stock); |
| | | await DeleteStockInfoAsync(stock.Id); |
| | | await DeleteStockInfoDetailsAsync(stock.StockInfoDetails); |
| | | await AddStockInfoHtyAsync(stockInfo_Hty); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result2.Item1); |
| | | await _locationRepository.UpdateDataAsync(result1.Item2); |
| | | await _locationRepository.UpdateDataAsync(result2.Item2); |
| | | await _orderOutDetailsRepository.DeleteDataAsync(orderDetails); |
| | | await SqlSugarHelper.DbWMS.Insertable(orderdetailshtys).ExecuteCommandAsync(); |
| | | |
| | | //_orderOutDetailsRepository.DeleteAndMoveIntoHty(orderDetails,OperateTypeEnum.èªå¨å é¤); |
| | | |
| | | await DeleteTaskAsync(task.TaskId); |
| | | await AddTaskHtyAsync(taskHty); |
| | | }); |
| | | content.OK("åºåºå®æ"); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | |
| | | |
| | | #endregion åºåºä»»å¡å®æ |
| | | |
| | |
| | | var locationStart = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.SourceAddress); |
| | | var locationEnd = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress); |
| | | |
| | | task.TaskState = (int)TaskOutStatusEnum.OutFinish; |
| | | task.TaskState = (int)TaskRelocationStatusEnum.AGV_RelocationFinish; |
| | | var taskHty = task.Adapt<Dt_Task_Hty>(); |
| | | taskHty.FinishTime = DateTime.Now; |
| | | taskHty.OperateType = App.User.UserName != null ? (int)OperateTypeEnum.äººå·¥å®æ : (int)OperateTypeEnum.èªå¨å®æ; |
| | |
| | | var result = UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticRelocation); |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | //UpdateLocationStatus(locationStart, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result.Item1); |
| | | await _locationRepository.UpdateDataAsync(result.Item2); |
| | | _stockInfoRepository.UpdateData(stock); |
| | |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode && x.StockStatus == (int)StockStateEmun.ç»çæå); |
| | | var boxinfo = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode); |
| | | var locationStart = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.SourceAddress); |
| | | var locationEnd = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress); |
| | | |
| | | if (stock == null) |
| | | if (boxinfo == null) |
| | | { |
| | | return content.Error("æªæ¾å°ç»çæ°æ®"); |
| | | } |
| | | stock.LocationCode = task.TargetAddress; |
| | | stock.StockStatus = (int)StockStateEmun.å·²å
¥åº; |
| | | |
| | | var stock = CreateStock(boxinfo, task); |
| | | |
| | | task.TaskState = (int)TaskInStatusEnum.InFinish; |
| | | var taskHty = task.Adapt<Dt_Task_Hty>(); |
| | | taskHty.FinishTime = DateTime.Now; |
| | | taskHty.OperateType = App.User.UserName != null ? (int)OperateTypeEnum.äººå·¥å®æ : (int)OperateTypeEnum.èªå¨å®æ; |
| | | taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System"; |
| | | var result1 = UpdateLocationStatus(locationStart, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | var result2 = UpdateLocationStatus(locationEnd, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | |
| | | var result1 = UpdateLocationStatus(task.SourceAddress, LocationEnum.Free, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | var result2 = UpdateLocationStatus(task.TargetAddress, LocationEnum.InStock, task.TaskNum.Value, (int)StatusChangeTypeEnum.AutomaticInbound); |
| | | |
| | | content = await ERPAllocate(stock); |
| | | //if (!content.Status) |
| | | //{ |
| | | // throw new Exception(content.Message); |
| | | //} |
| | | //stock.Remark = ""; |
| | | |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | await _stockInfoRepository.UpdateDataAsync(stock); |
| | | await _stockInfoRepository.AddDataNavAsync(stock); |
| | | await DeleteTaskAsync(task.TaskId); |
| | | await AddTaskHtyAsync(taskHty); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result2.Item1); |
| | | await _locationRepository.UpdateDataAsync(result1.Item2); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result1.Item1); |
| | | await _locationRepository.UpdateDataAsync(result2.Item2); |
| | | |
| | | await _locationRepository.UpdateDataAsync(result1.Item2); |
| | | }); |
| | | content.OK("å
¥åºå®æ"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | task.ErrorMessage = ex.Message; |
| | | await BaseDal.UpdateDataAsync(task); |
| | | return content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | |
| | | public DtStockInfo CreateStock(DtBoxingInfo boxingInfo,Dt_Task task) |
| | | { |
| | | var boxDetail = boxingInfo.BoxingInfoDetails.Adapt<List<DtStockInfoDetail>>(); |
| | | boxDetail.ForEach(x => { x.Status = (int)StockStateEmun.å·²å
¥åº; }); |
| | | return new DtStockInfo() |
| | | { |
| | | PalletCode = task.PalletCode, |
| | | LocationCode = task.TargetAddress, |
| | | CreateDate = DateTime.Now, |
| | | Creater = "system", |
| | | IsFullExit = boxingInfo.IsFullExit, |
| | | StockInfoDetails = boxDetail, |
| | | StockStatus = (int)StockStateEmun.å·²å
¥åº |
| | | }; |
| | | } |
| | | #endregion å
¥åºä»»å¡å®æ |
| | | |
| | | #region AGVæ¬è¿ä»»å¡å®æ |
| | |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == taskDto.PalletCode && x.StockStatus == (int)StockStateEmun.ç»çæå); |
| | | if (stock == null) |
| | | var boxingInfo = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == taskDto.PalletCode && x.StockStatus == (int)StockStateEmun.ç»çæå); |
| | | |
| | | if (boxingInfo == null) |
| | | { |
| | | return content.Error("æçä¿¡æ¯ä¸åå¨ï¼è¯·ç¡®è®¤æçå·²ç»çæå"); |
| | | } |
| | | |
| | | //foreach (var item in boxingInfo.BoxingInfoDetails) |
| | | //{ |
| | | // var ERPStock = SqlSugarHelper.DBERP.Queryable<WMS_ç¨ååºåä¸è§è¡¨_ST>().Where(x => x.ä»åºåç§° == item.Warehouse && x.æå· == item.MaterielCode && x.åå == item.MaterielName).ToList().FirstOrDefault(); |
| | | // if (ERPStock == null) |
| | | // { |
| | | // return content.Error($"ç»çæ°æ®æªå¨ERPåºåæ°æ®ä¸ï¼è¯·äººå·¥ç¡®è®¤æ°æ®æ¯å¦æ£ç¡®"); |
| | | // } |
| | | //} |
| | | foreach (var item in boxingInfo.BoxingInfoDetails) |
| | | { |
| | | var ERPStock = SqlSugarHelper.DBERP.Queryable<WMS_ç¨ååºåä¸è§è¡¨_ST>().Where(x => x.ä»åºåç§° == item.Warehouse && x.æå· == item.MaterielCode && x.åå == item.MaterielName).ToList().FirstOrDefault(); |
| | | if (ERPStock == null) |
| | | { |
| | | return content.Error($"ç»çæ°æ®æªå¨ERPåºåæ°æ®ä¸ï¼è¯·äººå·¥ç¡®è®¤æ°æ®æ¯å¦æ£ç¡®"); |
| | | } |
| | | } |
| | | |
| | | var StartAddress = await _locationRepository.QueryFirstAsync(x => x.LocationCode == taskDto.Position); |
| | | if (StartAddress == null) |
| | |
| | | BaseDal.AddData(taskNew); |
| | | }); |
| | | return content = await SendWCSTask(taskDTO); |
| | | //return content.OK("æå"); |
| | | } |
| | | catch (Exception err) |
| | | { |
| | |
| | | Dt_Task taskNew = new Dt_Task(); |
| | | if (StartAddress.Floor != location.Floor) |
| | | { |
| | | taskNew = RequestAcrossFloorTask(StartAddress, location, (int)TaskInboundTypeEnum.Inbound, taskDto.PalletCode); |
| | | taskNew = RequestAcrossFloorTask(StartAddress, location, (int)TaskInboundTypeEnum.Inbound, taskDto); |
| | | } |
| | | else |
| | | { |
| | | taskNew = RequestAGVCarryTask(StartAddress, location, (int)TaskInboundTypeEnum.Inbound, taskDto.PalletCode); |
| | | taskNew = RequestAGVCarryTask(StartAddress, location, (int)TaskInboundTypeEnum.Inbound, taskDto); |
| | | } |
| | | return taskNew; |
| | | |
| | |
| | | if (task == null) |
| | | return content.Error("æªæ¾å°ä»»å¡"); |
| | | |
| | | if (taskState == (int)TaskOutStatusEnum.Line_OutFinish || taskState == (int)TaskInStatusEnum.SC_InFinish || taskState == (int)TaskRelocationStatusEnum.SC_RelocationFinish || taskState == (int)TaskAGVCarryStatusEnum.AGV_CarryFinish) |
| | | { |
| | | var taskHty = CreateHistoricalTask(task); |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | var asb = await BaseDal.DeleteDataByIdAsync(task.TaskId); |
| | | var asbHty = await _task_HtyRepository.AddDataAsync(taskHty) > 0; |
| | | if (asb && asbHty) |
| | | content.OK(); |
| | | else |
| | | throw new Exception(); |
| | | }); |
| | | task.TaskState = taskState; |
| | | var asb = await BaseDal.UpdateDataAsync(task); |
| | | if (asb) |
| | | content.OK(); |
| | | } |
| | | else |
| | | { |
| | | task.TaskState = taskState; |
| | | var asb = await BaseDal.UpdateDataAsync(task); |
| | | if (asb) |
| | | content.OK(); |
| | | else |
| | | content.Error(); |
| | | } |
| | | content.Error(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | #endregion |
| | | |
| | | #region 请æ±åºåº |
| | | public async Task<WebResponseContent> OtherOutBoundTaskAsync(string palletCode) |
| | | public async Task<WebResponseContent> OutBoundTaskAsync(string palletCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | DtStockInfo stcok = await _stockInfoRepository.QueryFirstAsync(x => x.PalletCode == palletCode); |
| | | DtStockInfo stcok = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == palletCode); |
| | | if (stcok == null) |
| | | { |
| | | return content.Error("æçä¿¡æ¯ä¸åå¨ï¼è¯·ç¡®è®¤æçå·²å
¥åºæå"); |
| | | } |
| | | |
| | | if (stcok.LocationInfo.LocationStatus != (int)LocationEnum.InStock) |
| | | { |
| | | return content.Error("请确认åºåè´§ä½ç¶ææ¯å¦ä¸ºæè´§"); |
| | | } |
| | | var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == palletCode); |
| | | if (task != null) |
| | | { |
| | | return content.Error("该æçå·²åå¨ä»»å¡"); |
| | | } |
| | | |
| | | var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == stcok.LocationCode); |
| | | if (location.AreaId == 2) |
| | | { |
| | | return content.Error("该æçåºåå·²å¨åºåºç¼ååº"); |
| | | } |
| | | |
| | | Dt_Task taskNew= await RequestOutboundTaskAsync(new RequestTaskDto { PalletCode = palletCode, AreaId = 2, Position = stcok.LocationCode, TaskType = (int)TaskOutboundTypeEnum.OutOther }); |
| | | return content.OK(data: taskNew); |
| | | Dt_Task taskNew = await RequestOutboundTaskAsync(new RequestTaskDto { PalletCode = palletCode, AreaId = 2, Position = stcok.LocationCode, TaskType = (int)TaskOutboundTypeEnum.Outbound }); |
| | | List<Dt_OrderOutDetails> outDetails = new List<Dt_OrderOutDetails>(); |
| | | stcok.StockInfoDetails.ForEach(x => |
| | | { |
| | | outDetails.Add(new Dt_OrderOutDetails() |
| | | { |
| | | OrderNo = "", |
| | | PalletCode = stcok.PalletCode, |
| | | OrderType = (int)OrderTypeEmun.çç¹åºåºå, |
| | | ERPOrderId = "", |
| | | MaterielCode = x.MaterielCode, |
| | | MaterielName = x.MaterielName, |
| | | AllocateWarehouse = "WMSåºåºç¼ååº", |
| | | Warehouse = "æºè½ç«åº", |
| | | WareHouseId = "107", |
| | | AllocateWarehouseId = "205", |
| | | OutboundQuantity = x.Quantity, |
| | | }); |
| | | }); |
| | | |
| | | var taskDto = CreateListTaskDTO(taskNew); |
| | | var result = GetlcoationState(taskNew, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | BaseDal.AddData(taskNew); |
| | | _stockInfoRepository.UpdateData(stcok); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result.Item1); |
| | | await _locationRepository.UpdateDataAsync(result.Item2); |
| | | _orderOutDetailsRepository.AddData(outDetails); |
| | | }); |
| | | return content = await SendWCSTask(taskDto); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | public (List<DtLocationStatusChangeRecord>,List<DtLocationInfo>) GetlcoationState(Dt_Task task,int StatusChangeTypeEnum) |
| | | { |
| | | List<DtLocationStatusChangeRecord> locationStatusChangeRecords = new List<DtLocationStatusChangeRecord>(); |
| | | List<DtLocationInfo> locations = new List<DtLocationInfo>(); |
| | | var result1 = UpdateLocationStatus(task.SourceAddress, LocationEnum.InStockDisable, task.TaskNum.Value, StatusChangeTypeEnum); |
| | | var result2 = UpdateLocationStatus(task.TargetAddress, LocationEnum.Lock, task.TaskNum.Value, StatusChangeTypeEnum); |
| | | locationStatusChangeRecords.AddRange(result1.Item1); |
| | | locationStatusChangeRecords.AddRange(result2.Item1); |
| | | locations.AddRange(result1.Item2); |
| | | locations.AddRange(result2.Item2); |
| | | |
| | | return (locationStatusChangeRecords,locations); |
| | | } |
| | | |
| | | public (List<DtLocationStatusChangeRecord>, List<DtLocationInfo>) GetlcoationState(List<Dt_Task> tasks, int StatusChangeTypeEnum) |
| | | { |
| | | List<DtLocationStatusChangeRecord> locationStatusChangeRecords = new List<DtLocationStatusChangeRecord>(); |
| | | List<DtLocationInfo> locations = new List<DtLocationInfo>(); |
| | | foreach (var item in tasks) |
| | | { |
| | | var result1 = UpdateLocationStatus(item.SourceAddress, LocationEnum.InStockDisable, item.TaskNum.Value, StatusChangeTypeEnum); |
| | | var result2 = UpdateLocationStatus(item.TargetAddress, LocationEnum.Lock, item.TaskNum.Value, StatusChangeTypeEnum); |
| | | locationStatusChangeRecords.AddRange(result1.Item1); |
| | | locationStatusChangeRecords.AddRange(result2.Item1); |
| | | locations.AddRange(result1.Item2); |
| | | locations.AddRange(result2.Item2); |
| | | } |
| | | return (locationStatusChangeRecords, locations); |
| | | } |
| | | |
| | | |
| | |
| | | Roadway = "SC1", |
| | | TargetAddress = location.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | MaterialNo = taskDto.MaterielCode, |
| | | NextAddress = station.stationChildCode, |
| | | OrderNo = null, |
| | | OrderNo = taskDto.OrderNo, |
| | | PalletCode = taskDto.PalletCode, |
| | | SourceAddress = taskDto.Position, |
| | | CurrentAddress = taskDto.Position, |
| | |
| | | Dt_Task taskNew = new Dt_Task(); |
| | | if (StartAddress.Floor != location.Floor) |
| | | { |
| | | taskNew = RequestAcrossFloorTask(StartAddress, location, taskDto.TaskType, taskDto.PalletCode); |
| | | taskNew = RequestAcrossFloorTask(StartAddress, location, taskDto.TaskType, taskDto); |
| | | } |
| | | else |
| | | { |
| | | taskNew = RequestAGVCarryTask(StartAddress, location, taskDto.TaskType, taskDto.PalletCode); |
| | | taskNew = RequestAGVCarryTask(StartAddress, location, taskDto.TaskType, taskDto); |
| | | } |
| | | return taskNew; |
| | | |
| | |
| | | #endregion |
| | | |
| | | #region 请æ±è·¨æ¥¼å±ä»»å¡ |
| | | public Dt_Task RequestAcrossFloorTask(DtLocationInfo StartAddress, DtLocationInfo EndAddress, int TaskType, string palletCode) |
| | | public Dt_Task RequestAcrossFloorTask(DtLocationInfo StartAddress, DtLocationInfo EndAddress, int TaskType, RequestTaskDto taskDto) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | |
| | |
| | | Roadway = "AGV", |
| | | TargetAddress = EndAddress.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | MaterialNo = taskDto.MaterielCode, |
| | | NextAddress = next.stationChildCode, |
| | | OrderNo = null, |
| | | PalletCode = palletCode, |
| | | OrderNo = taskDto.OrderNo, |
| | | PalletCode = taskDto.PalletCode, |
| | | SourceAddress = StartAddress.LocationCode, |
| | | CurrentAddress = StartAddress.LocationCode, |
| | | TaskState = (int)TaskAcrossFloorStatusEnum.CarryNew, |
| | |
| | | #endregion |
| | | |
| | | #region 请æ±AGVæ¬è¿ä»»å¡ |
| | | public Dt_Task RequestAGVCarryTask(DtLocationInfo StartAddress, DtLocationInfo EndAddress, int TaskType, string palletCode) |
| | | public Dt_Task RequestAGVCarryTask(DtLocationInfo StartAddress, DtLocationInfo EndAddress, int TaskType, RequestTaskDto taskDto) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | |
| | |
| | | Roadway = "AGV", |
| | | TargetAddress = EndAddress.LocationCode, |
| | | Dispatchertime = DateTime.Now, |
| | | MaterialNo = "", |
| | | MaterialNo = taskDto.MaterielCode, |
| | | NextAddress = EndAddress.LocationCode, |
| | | OrderNo = null, |
| | | PalletCode = palletCode, |
| | | OrderNo = taskDto.OrderNo, |
| | | PalletCode = taskDto.PalletCode, |
| | | SourceAddress = StartAddress.LocationCode, |
| | | CurrentAddress = StartAddress.LocationCode, |
| | | TaskState = (int)TaskAGVCarryStatusEnum.CarryNew, |
| | |
| | | MaterialNo = "", |
| | | NextAddress = TargetAddress.LocationCode, |
| | | OrderNo = null, |
| | | PalletCode = taskDto.PalletCode + "001", |
| | | PalletCode = stock.PalletCode, |
| | | SourceAddress = locationLateral.LocationCode, |
| | | CurrentAddress = locationLateral.LocationCode, |
| | | TaskState = (int)TaskRelocationStatusEnum.RelocationNew, |
| | |
| | | return wcsBasez + address; |
| | | } |
| | | |
| | | public async Task<WebResponseContent> SendERPTaskCompletion(string palletCode) |
| | | /// <summary> |
| | | /// çäº§é¢æ |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> ERPProduction(List<Dt_OrderOutDetails> orderOutDetails) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | DtStockInfo stock = await _stockInfoRepository.QueryFirstNavAsync(x=>x.PalletCode== palletCode); |
| | | MaterialRequisition materialRequisition = new MaterialRequisition |
| | | { |
| | | context = new Context |
| | | { |
| | | CultureName = "zh-CN", |
| | | EntCode = "001", |
| | | OrgCode = "102", |
| | | UserCode = "MH0551" |
| | | }, |
| | | documentTypeCode = "TransIn002", |
| | | businessDate = DateTime.Now.ToString("yyyy-MM-dd"), |
| | | isApproved = true, |
| | | issueList = orderOutDetails.Select(item => new issueList |
| | | { |
| | | PickListID = item.MaterielID, |
| | | //åå¨å°ç¹ |
| | | WhCode = item.WareHouseId, |
| | | //颿æ°é |
| | | IssueQty = item.OutboundQuantity, |
| | | }).ToList() |
| | | |
| | | }; |
| | | var ERPProduction = GetERPIPAddress(SysConfigConst.ERPIPAddress, SysConfigConst.MaterialRequisition); |
| | | // åé请æ±å¹¶çå¾
ååº |
| | | |
| | | var result = await HttpsClient.PostAsync(ERPProduction, materialRequisition.ToJsonString()); |
| | | |
| | | var respone = JsonConvert.DeserializeObject<Respone>(result.ToString()); |
| | | if (respone.ResultStatus) |
| | | { |
| | | return content.OK(); |
| | | } |
| | | return content.Error(respone.ResultMsg); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// è°æ¨ |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | /// |
| | | public async Task<WebResponseContent> ERPAllocate(DtStockInfo stock) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Allocate allocate = new Allocate |
| | | { |
| | | context = new Context |
| | |
| | | |
| | | transferInList = stock.StockInfoDetails.Select(item => new transferInList |
| | | { |
| | | //ç©æç¼ç |
| | | ItemCode = item.MaterielCode, |
| | | TransInWHCode = item.Warehouse, |
| | | //è°å
¥ä»åºå°å |
| | | TransInWHCode = "107", |
| | | //è°å
¥æ°é |
| | | TransInQty = item.Quantity, |
| | | TransOutWHCode = "001", |
| | | // è°åºä»åºç¼ç |
| | | TransOutWHCode = item.WareHouseId, |
| | | }).ToList() |
| | | }; |
| | | var Allocate = GetERPIPAddress(SysConfigConst.ERPIPAddress, SysConfigConst.Allocate); |
| | | // åé请æ±å¹¶çå¾
ååº |
| | | var result = await HttpsClient.PostAsync(Allocate, allocate.ToJsonString()); |
| | | |
| | | var respone = JsonConvert.DeserializeObject<Respone>(result.ToString()); |
| | | if (respone.ResultStatus) |
| | | { |
| | | return content.OK(); |
| | | } |
| | | return content.Error(respone.ResultMsg); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | public async Task<WebResponseContent> ERPAllocate(List<Dt_OrderOutDetails> orderOutDetails) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | List<transferInList> transferInList=new List<transferInList>(); |
| | | orderOutDetails.ForEach(x => |
| | | { |
| | | transferInList.Add(new transferInList |
| | | { |
| | | //ç©æç¼ç |
| | | ItemCode = x.MaterielCode, |
| | | //è°å
¥ä»åºå°å |
| | | TransInWHCode = x.AllocateWarehouseId, |
| | | //è°å
¥æ°é |
| | | TransInQty = x.OutboundQuantity, |
| | | // è°åºä»åºç¼ç |
| | | TransOutWHCode = x.WareHouseId, |
| | | }); |
| | | }); |
| | | Allocate allocate = new Allocate |
| | | { |
| | | context = new Context |
| | | { |
| | | CultureName = "zh-CN", |
| | | EntCode = "001", |
| | | OrgCode = "102", |
| | | UserCode = "MH0551" |
| | | }, |
| | | documentTypeCode = "TransIn002", |
| | | businessDate = DateTime.Now.ToString("yyyy-MM-dd"), |
| | | isApproved = true, |
| | | transferInList = transferInList, |
| | | }; |
| | | var Allocate = GetERPIPAddress(SysConfigConst.ERPIPAddress, SysConfigConst.Allocate); |
| | | // åé请æ±å¹¶çå¾
ååº |
| | | var result = await HttpsClient.PostAsync(Allocate, allocate.ToJsonString()); |
| | | |
| | | var respone = JsonConvert.DeserializeObject<Respone>(result.ToString()); |
| | | if (respone.ResultStatus) |
| | | { |
| | | return content.OK(); |
| | | } |
| | | return content.Error(respone.ResultMsg); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// æå |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> ERPMixedSend(List<Dt_OrderOutDetails> orderOutDetails) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | MixedSend send = new MixedSend |
| | | { |
| | | context = new Context |
| | | { |
| | | CultureName = "zh-CN", |
| | | EntCode = "001", |
| | | OrgCode = "102", |
| | | UserCode = "MH0551" |
| | | }, |
| | | documentTypeCode = "TransIn002", |
| | | businessDate = DateTime.Now.ToString("yyyy-MM-dd"), |
| | | isApproved = true, |
| | | |
| | | miscShipList = orderOutDetails.Select(item => new miscShipList |
| | | { |
| | | //ç©æç¼ç |
| | | ItemCode = item.MaterielCode, |
| | | //åå¨å°ç¹ç¼å· |
| | | WhCode = item.WareHouseId, |
| | | //æåæ°é |
| | | Qty = item.OutboundQuantity, |
| | | BenefitDeptCode = "0505", |
| | | }).ToList() |
| | | }; |
| | | var ERPMixedSend = GetERPIPAddress(SysConfigConst.ERPIPAddress, SysConfigConst.MixedSend); |
| | | // åé请æ±å¹¶çå¾
ååº |
| | | var result = await HttpsClient.PostAsync(ERPMixedSend, send.ToJsonString()); |
| | | |
| | | var respone = JsonConvert.DeserializeObject<Respone>(result.ToString()); |
| | | if (respone.ResultStatus) |
| | | { |
| | | return content.OK(); |
| | | } |
| | | return content.Error(respone.ResultMsg); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// ææ¶ |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> ERPMixedReceive(string palletCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | DtStockInfo stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == palletCode); |
| | | MixedReceive allocate = new MixedReceive |
| | | { |
| | | context = new Context |
| | | { |
| | | CultureName = "zh-CN", |
| | | EntCode = "001", |
| | | OrgCode = "102", |
| | | UserCode = "MH0551" |
| | | }, |
| | | documentTypeCode = "TransIn002", |
| | | businessDate = DateTime.Now.ToString("yyyy-MM-dd"), |
| | | isApproved = true, |
| | | |
| | | miscRcvList = stock.StockInfoDetails.Where(x => x.OutboundQuantity > 0).Select(item => new miscRcvList |
| | | { |
| | | ItemCode = item.MaterielCode, |
| | | WhCode = item.Warehouse, |
| | | Qty = item.OutboundQuantity, |
| | | CostPrice = 0, |
| | | }).ToList() |
| | | }; |
| | | return content.OK(data: allocate); |
| | |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// éæ |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> ERPreturnMaterialList(string palletCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | DtStockInfo stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == palletCode); |
| | | ReturnMaterials allocate = new ReturnMaterials |
| | | { |
| | | context = new Context |
| | | { |
| | | CultureName = "zh-CN", |
| | | EntCode = "001", |
| | | OrgCode = "102", |
| | | UserCode = "MH0551" |
| | | }, |
| | | documentTypeCode = "TransIn002", |
| | | businessDate = DateTime.Now.ToString("yyyy-MM-dd"), |
| | | isApproved = true, |
| | | |
| | | returnMaterialList = stock.StockInfoDetails.Select(item => new returnMaterialList |
| | | { |
| | | PickListID = item.MaterielCode, |
| | | WhCode = item.Warehouse, |
| | | RecedeQty = item.OutboundQuantity, |
| | | RecedeReason = 1, |
| | | }).ToList() |
| | | }; |
| | | return content.OK(data: allocate); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |