|  |  | 
 |  |  | using System.Threading.Tasks; | 
 |  |  | using WIDESEA_Common; | 
 |  |  | using WIDESEA_Core; | 
 |  |  | using WIDESEA_Core.Const; | 
 |  |  | using WIDESEA_DTO; | 
 |  |  | using WIDESEA_DTO.WMS; | 
 |  |  | using WIDESEA_IServices; | 
 |  |  | using WIDESEA_Model.Models; | 
 |  |  |  | 
 |  |  | namespace WIDESEA_StorageBasicService; | 
 |  |  | 
 |  |  |     private readonly IDt_WareAreaInfoRepository _wareAreaInfoRepository; | 
 |  |  |     private readonly IPointStackerRelationRepository _pointStackerRelationRepository; | 
 |  |  |     private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository; | 
 |  |  |     private readonly IDt_AreaInfoRepository _AreaInfoRepository; | 
 |  |  |     private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository; | 
 |  |  |     private readonly ISys_ConfigService _configService; | 
 |  |  |     private readonly IMapper _mapper; | 
 |  |  |  | 
 |  |  |     public LocationInfoService(ILocationInfoRepository BaseDal, | 
 |  |  | 
 |  |  |                                     ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository, | 
 |  |  |                                     IStockInfoDetailRepository stockInfoDetailRepository, | 
 |  |  |                                     IMapper mapper, | 
 |  |  |                                     IDt_TaskService taskService) : base(BaseDal) | 
 |  |  |                                     IDt_TaskService taskService , | 
 |  |  |                                     IDt_AreaInfoRepository AreaInfoRepository, | 
 |  |  |                                     ISys_ConfigService configService) : base(BaseDal) | 
 |  |  |     { | 
 |  |  |         _unitOfWorkManage = unitOfWorkManage; | 
 |  |  |         _taskRepository = taskRepository; | 
 |  |  | 
 |  |  |         _locationStatusChangeRecordRepository = locationStatusChangeRecordRepository; | 
 |  |  |         _stockInfoDetailRepository = stockInfoDetailRepository; | 
 |  |  |         _mapper = mapper; | 
 |  |  |         _taskService = taskService; | 
 |  |  |         _taskService = taskService;  | 
 |  |  |         _AreaInfoRepository = AreaInfoRepository; | 
 |  |  |         _configService = configService; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /// <summary> | 
 |  |  | 
 |  |  |  | 
 |  |  |         return base.UpdateData(saveModel); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public WebResponseContent HandOutTask(int locationID) | 
 |  |  |     { | 
 |  |  |         LogFactory.GetLog("手动出库任务").InfoFormat(true, "手动出库任务", JsonConvert.SerializeObject(locationID), App.User.UserName); | 
 |  |  |         WebResponseContent content = new WebResponseContent(); | 
 |  |  |         try | 
 |  |  |         { | 
 |  |  |             Dt_AreaInfo areaInfo = _AreaInfoRepository.QueryFirst(x => x.AreaCode == "CWSC1"); | 
 |  |  |             DtLocationInfo location = BaseDal.QueryFirst(x => x.Id == locationID); | 
 |  |  |             DtStockInfo stock = _stockInfoRepository.QueryFirst(x => x.LocationId == location.Id && x.LocationCode == location.LocationCode); | 
 |  |  |             if (location.AreaId == areaInfo.AreaID) | 
 |  |  |             { | 
 |  |  |                 Dt_Task task = new Dt_Task | 
 |  |  |                 { | 
 |  |  |                     Grade = 3, | 
 |  |  |                     Roadway = location.RoadwayNo, | 
 |  |  |                     TargetAddress = "001-048-001", | 
 |  |  |                     Dispatchertime = DateTime.Now, | 
 |  |  |                     MaterialNo = "", | 
 |  |  |                     NextAddress = "001-048-001", | 
 |  |  |                     OrderNo = null, | 
 |  |  |                     PalletCode = stock == null ? "M" + DateTime.Now.ToString("MMddHHmmss") + "-" + new Random().Next(100, 1000) : stock.PalletCode, | 
 |  |  |                     SourceAddress = location.LocationCode, | 
 |  |  |                     CurrentAddress = location.LocationCode, | 
 |  |  |                     TaskState = (int)TaskOutStatusEnum.OutNew, | 
 |  |  |                     TaskType = (int)TaskOutboundTypeEnum.InToOut, | 
 |  |  |                     TaskNum = _taskRepository.GetTaskNo().Result, | 
 |  |  |                     Creater = "System", // 修正拼写错误 | 
 |  |  |                     CreateDate = DateTime.Now, | 
 |  |  |                     TaskId = 0, | 
 |  |  |                     ProductionLine = stock == null ? "" : stock.ProductionLine, | 
 |  |  |                     ProcessCode = stock == null ? "" : stock.ProcessCode, | 
 |  |  |                 }; | 
 |  |  |  | 
 |  |  |                 var taskDTO = new WMSTaskDTO | 
 |  |  |                 { | 
 |  |  |                     TaskNum = task.TaskNum.Value, | 
 |  |  |                     Grade = task.Grade.Value, | 
 |  |  |                     PalletCode = task.PalletCode, | 
 |  |  |                     RoadWay = task.Roadway, | 
 |  |  |                     SourceAddress = task.SourceAddress, | 
 |  |  |                     TargetAddress = task.TargetAddress, | 
 |  |  |                     TaskState = task.TaskState.Value, | 
 |  |  |                     Id = 0, | 
 |  |  |                     TaskType = task.TaskType, | 
 |  |  |                     ProductionLine = task.ProductionLine, | 
 |  |  |                 }; | 
 |  |  |                 var configs = _configService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); | 
 |  |  |                 var ipAddress = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.WCSIPAddress)?.ConfigValue; | 
 |  |  |                 var ReceiveByWMSTask = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.ReceiveByWMSTask)?.ConfigValue; | 
 |  |  |                 if (ReceiveByWMSTask == null || ipAddress == null) | 
 |  |  |                 { | 
 |  |  |                     throw new Exception("WMS IP 未配置"); | 
 |  |  |                 } | 
 |  |  |                 var wmsIpAddrss = ipAddress + ReceiveByWMSTask; | 
 |  |  |  | 
 |  |  |                 var respon = HttpHelper.Post(wmsIpAddrss, JsonConvert.SerializeObject(taskDTO));   //http://localhost:9291/api/Task/ReceiveTask, | 
 |  |  |                 if (respon != null) | 
 |  |  |                 { | 
 |  |  |                     WebResponseContent respone = JsonConvert.DeserializeObject<WebResponseContent>(respon.ToString()); | 
 |  |  |                     if (respone.Status) | 
 |  |  |                     { | 
 |  |  |                         var taskId = _taskRepository.AddData(task); | 
 |  |  |                         location.LocationStatus = (int)LocationEnum.InStockDisable; | 
 |  |  |                         BaseDal.UpdateData(location); | 
 |  |  |                     } | 
 |  |  |                     else | 
 |  |  |                     { | 
 |  |  |                         throw new Exception("WCS处理失败:" + respone.Message); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  |                     throw new Exception("WCS处理失败"); | 
 |  |  |                 } | 
 |  |  |                 return content.OK("任务添加成功!"); | 
 |  |  |             } | 
 |  |  |             else | 
 |  |  |             { | 
 |  |  |                 return content.Error("不是常温货位,不允许出库!!"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         catch (Exception ex) | 
 |  |  |         { | 
 |  |  |             return content.Error(ex.Message); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     #region 初始化库位 | 
 |  |  |     public async Task<WebResponseContent> initializeLocation(int locationID) | 
 |  |  |     { | 
 |  |  | 
 |  |  |             DtStockInfo stock = _stockInfoRepository.QueryFirst(x => x.LocationId == location.Id); | 
 |  |  |             if(stock == null) | 
 |  |  |             { | 
 |  |  |                 location.LocationStatus= (int)LocationEnum.Lock; | 
 |  |  |                 location.LocationStatus= (int)LocationEnum.Free; | 
 |  |  |                 BaseDal.UpdateData(location); | 
 |  |  |             } | 
 |  |  |             else | 
 |  |  | 
 |  |  |                 await AddStockInfoHtyAsync(stockInfo_Hty); | 
 |  |  |                  | 
 |  |  |  | 
 |  |  |                 location.LocationStatus = (int)LocationEnum.Lock; | 
 |  |  |                 location.LocationStatus = (int)LocationEnum.Free; | 
 |  |  |                 BaseDal.UpdateData(location); | 
 |  |  |  | 
 |  |  |                 _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(location, LastStatus, (int)StatusChangeTypeEnum.ManualOperation, 0); |