| | |
| | | using Mapster; |
| | | using Masuit.Tools; |
| | | using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal; |
| | | using NewLife; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; |
| | | using OfficeOpenXml.Table.PivotTable; |
| | |
| | | if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound || task.TaskType == (int)TaskOutboundTypeEnum.OutAllocate) |
| | | { |
| | | if (orderDetails.Count > 0) |
| | | content = await ERPAllocate(orderDetails); |
| | | await ERPAllocate(orderDetails.Where(x => x.OrderType == (int)OrderTypeEmun.çç¹åºåºå || x.OrderType == (int)OrderTypeEmun.è°æ¨åºåºå).ToList()); |
| | | } |
| | | //å
¶ä»åºåº |
| | | else if (task.TaskType == (int)TaskOutboundTypeEnum.OutOther) |
| | | { |
| | | if (orderDetails.Count > 0) |
| | | content = await ERPMixedSend(orderDetails); |
| | | { |
| | | await ERPMixedSend(orderDetails.Where(x => x.OrderType == (int)OrderTypeEmun.å
¶ä»åºåºå).ToList()); |
| | | await ERPAllocate(orderDetails.Where(x => x.OrderType == (int)OrderTypeEmun.è°æ¨åºåºå).ToList()); |
| | | } |
| | | } |
| | | //çäº§é¢æåºåº |
| | | else if (task.TaskType == (int)TaskOutboundTypeEnum.MaterialRequisition) |
| | | { |
| | | if (orderDetails.Count > 0) |
| | | content = await ERPProduction(orderDetails); |
| | | { |
| | | content = await ERPProduction(orderDetails.Where(x => x.OrderType == (int)OrderTypeEmun.çäº§é¢æå).ToList()); |
| | | await ERPAllocate(orderDetails.Where(x => x.OrderType == (int)OrderTypeEmun.è°æ¨åºåºå).ToList()); |
| | | } |
| | | } |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | |
| | | await _orderOutDetailsRepository.DeleteDataAsync(orderDetails); |
| | | await SqlSugarHelper.DbWMS.Insertable(orderdetailshtys).ExecuteCommandAsync(); |
| | | |
| | | //_orderOutDetailsRepository.DeleteAndMoveIntoHty(orderDetails,OperateTypeEnum.èªå¨å é¤); |
| | | |
| | | await DeleteTaskAsync(task.TaskId); |
| | | await AddTaskHtyAsync(taskHty); |
| | | }); |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | task.ErrorMessage = ex.Message; |
| | | await BaseDal.UpdateDataAsync(task); |
| | | return content.Error(ex.Message); |
| | | } |
| | | return content; |
| | |
| | | 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 ERPAllocate(stock); |
| | | |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | |
| | | #endregion |
| | | |
| | | #region 请æ±åºåº |
| | | /// <summary> |
| | | /// æå¨åºåºè³ç¼ååºå |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> OutBoundTaskAsync(string palletCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | public async Task<WebResponseContent> OtherOutBoundTaskAsync(List<DtStockInfoDetail> details) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.Id == details[0].StockId); |
| | | if (stock == null) |
| | | { |
| | | return content.Error("æªæ¾å°åºå表头信æ¯"); |
| | | } |
| | | if (stock.LocationInfo.LocationStatus != (int)LocationEnum.InStock) |
| | | { |
| | | return content.Error("请确认åºåè´§ä½ç¶ææ¯å¦ä¸ºæè´§"); |
| | | } |
| | | var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == stock.PalletCode); |
| | | if (task != null) |
| | | { |
| | | return content.Error("该æçå·²åå¨ä»»å¡"); |
| | | } |
| | | if (stock.LocationInfo.AreaId == 2) |
| | | { |
| | | return content.Error("该æçåºåå·²å¨åºåºç¼ååº"); |
| | | } |
| | | |
| | | Dt_Task taskNew = await RequestOutboundTaskAsync(new RequestTaskDto { PalletCode = stock.PalletCode, AreaId = 2, Position = stock.LocationCode, TaskType = (int)TaskOutboundTypeEnum.OutOther }); |
| | | |
| | | List<Dt_OrderOutDetails> outDetails = new List<Dt_OrderOutDetails>(); |
| | | details.Where(x => x.OutboundQuantity > 0).ForEach(x => |
| | | { |
| | | outDetails.Add(new Dt_OrderOutDetails() |
| | | { |
| | | OrderNo = "", |
| | | PalletCode = stock.PalletCode, |
| | | OrderType = (int)OrderTypeEmun.å
¶ä»åºåºå, |
| | | ERPOrderId = "", |
| | | MaterielCode = x.MaterielCode, |
| | | MaterielName = x.MaterielName, |
| | | AllocateWarehouse = "", |
| | | Warehouse = "æºè½ç«åº", |
| | | WareHouseId = "107", |
| | | AllocateWarehouseId = "", |
| | | OutboundQuantity = x.OutboundQuantity, |
| | | }); |
| | | }); |
| | | details.Where(x => x.OutboundQuantity == 0 || (x.Quantity - x.OutboundQuantity) > 0).ForEach(x => |
| | | { |
| | | outDetails.Add(new Dt_OrderOutDetails() |
| | | { |
| | | OrderNo = "", |
| | | PalletCode = stock.PalletCode, |
| | | OrderType = (int)OrderTypeEmun.è°æ¨åºåºå, |
| | | ERPOrderId = "", |
| | | MaterielCode = x.MaterielCode, |
| | | MaterielName = x.MaterielName, |
| | | AllocateWarehouse = "WMSåºåºç¼ååº", |
| | | Warehouse = "æºè½ç«åº", |
| | | WareHouseId = "107", |
| | | AllocateWarehouseId = "205", |
| | | OutboundQuantity = x.Quantity - x.OutboundQuantity, |
| | | }); |
| | | }); |
| | | stock.StockInfoDetails = details; |
| | | |
| | | var taskDto = CreateListTaskDTO(taskNew); |
| | | var result = GetlcoationState(taskNew, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | await BaseDal.AddDataAsync(taskNew); |
| | | await _stockInfoRepository.UpdateDataNavAsync(stock); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result.Item1); |
| | | await _locationRepository.UpdateDataAsync(result.Item2); |
| | | await _orderOutDetailsRepository.AddDataAsync(outDetails); |
| | | }); |
| | | return content = await SendWCSTask(taskDto); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æå¨è°æ¨ |
| | | /// </summary> |
| | | /// <param name="details"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> HandAllocateOutBoundTaskAsync(List<DtStockInfoDetail> details) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.Id == details[0].StockId); |
| | | if (stock == null) |
| | | { |
| | | return content.Error("æªæ¾å°åºå表头信æ¯"); |
| | | } |
| | | if (stock.LocationInfo.LocationStatus != (int)LocationEnum.InStock) |
| | | { |
| | | return content.Error("请确认åºåè´§ä½ç¶ææ¯å¦ä¸ºæè´§"); |
| | | } |
| | | var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == stock.PalletCode); |
| | | if (task != null) |
| | | { |
| | | return content.Error("该æçå·²åå¨ä»»å¡"); |
| | | } |
| | | if (stock.LocationInfo.AreaId == 2) |
| | | { |
| | | return content.Error("该æçåºåå·²å¨åºåºç¼ååº"); |
| | | } |
| | | |
| | | Dt_Task taskNew = await RequestOutboundTaskAsync(new RequestTaskDto { PalletCode = stock.PalletCode, AreaId = 2, Position = stock.LocationCode, TaskType = (int)TaskOutboundTypeEnum.OutOther }); |
| | | |
| | | List<Dt_OrderOutDetails> outDetails = new List<Dt_OrderOutDetails>(); |
| | | details.Where(x => x.OutboundQuantity > 0).ForEach(x => |
| | | { |
| | | var areaName = _areaInfoRepository.QueryFirst(y => y.AreaName == x.Remark); |
| | | if (areaName == null) |
| | | { |
| | | throw new Exception($"æªæ¾å°è°æ¨ä»åº{x.Remark}æ°æ®"); |
| | | } |
| | | outDetails.Add(new Dt_OrderOutDetails() |
| | | { |
| | | OrderNo = "", |
| | | PalletCode = stock.PalletCode, |
| | | OrderType = (int)OrderTypeEmun.è°æ¨åºåºå, |
| | | ERPOrderId = "", |
| | | MaterielCode = x.MaterielCode, |
| | | MaterielName = x.MaterielName, |
| | | AllocateWarehouse = x.Remark, |
| | | Warehouse = "æºè½ç«åº", |
| | | WareHouseId = "107", |
| | | AllocateWarehouseId = areaName.AreaName, |
| | | OutboundQuantity = x.OutboundQuantity, |
| | | }); |
| | | }); |
| | | details.Where(x => x.OutboundQuantity == 0 || (x.Quantity - x.OutboundQuantity) > 0).ForEach(x => |
| | | { |
| | | outDetails.Add(new Dt_OrderOutDetails() |
| | | { |
| | | OrderNo = "", |
| | | PalletCode = stock.PalletCode, |
| | | OrderType = (int)OrderTypeEmun.è°æ¨åºåºå, |
| | | ERPOrderId = "", |
| | | MaterielCode = x.MaterielCode, |
| | | MaterielName = x.MaterielName, |
| | | AllocateWarehouse = "WMSåºåºç¼ååº", |
| | | Warehouse = "æºè½ç«åº", |
| | | WareHouseId = "107", |
| | | AllocateWarehouseId = "205", |
| | | OutboundQuantity = x.Quantity - x.OutboundQuantity, |
| | | }); |
| | | }); |
| | | stock.StockInfoDetails = details; |
| | | |
| | | var taskDto = CreateListTaskDTO(taskNew); |
| | | var result = GetlcoationState(taskNew, (int)StatusChangeTypeEnum.AutomaticOutbound); |
| | | await _unitOfWorkManage.UseTranAsync(async () => |
| | | { |
| | | await BaseDal.AddDataAsync(taskNew); |
| | | await _stockInfoRepository.UpdateDataNavAsync(stock); |
| | | await _locationStatusChangeRecordRepository.AddDataAsync(result.Item1); |
| | | await _locationRepository.UpdateDataAsync(result.Item2); |
| | | await _orderOutDetailsRepository.AddDataAsync(outDetails); |
| | | }); |
| | | return content = await SendWCSTask(taskDto); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | var result = await HttpsClient.PostAsync(ERPProduction, materialRequisition.ToJsonString()); |
| | | |
| | | var respone = JsonConvert.DeserializeObject<Respone>(result.ToString()); |
| | | if (respone.ResultStatus) |
| | | var respone = JsonConvert.DeserializeObject<ResponeData>(result.ToString()); |
| | | if (respone.d.ResultStatus) |
| | | { |
| | | return content.OK(); |
| | | } |
| | | return content.Error(respone.ResultMsg); |
| | | return content.Error(respone.d.ResultMsg); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | /// |
| | | public async Task<WebResponseContent> ERPAllocate(DtStockInfo stock) |
| | | public async Task ERPAllocate(DtStockInfo stock) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("æªæ¾å°åºåä¿¡æ¯"); |
| | | } |
| | | Allocate allocate = new Allocate |
| | | { |
| | | context = new Context |
| | |
| | | // åé请æ±å¹¶çå¾
ååº |
| | | var result = await HttpsClient.PostAsync(Allocate, allocate.ToJsonString()); |
| | | |
| | | var respone = JsonConvert.DeserializeObject<Respone>(result.ToString()); |
| | | if (respone.ResultStatus) |
| | | var respone = JsonConvert.DeserializeObject<ResponeData>(result.ToString()); |
| | | if (!respone.d.ResultStatus) |
| | | { |
| | | return content.OK(); |
| | | throw new Exception(respone.d.ResultMsg); |
| | | } |
| | | return content.Error(respone.ResultMsg); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | public async Task<WebResponseContent> ERPAllocate(List<Dt_OrderOutDetails> orderOutDetails) |
| | | public async Task ERPAllocate(List<Dt_OrderOutDetails> orderOutDetails) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (orderOutDetails.Count <= 0) |
| | | { |
| | | throw new Exception($"æªæ¾å°è°æ¨åºåºæ°æ®"); |
| | | } |
| | | List<transferInList> transferInList=new List<transferInList>(); |
| | | orderOutDetails.ForEach(x => |
| | | { |
| | |
| | | // åé请æ±å¹¶çå¾
ååº |
| | | var result = await HttpsClient.PostAsync(Allocate, allocate.ToJsonString()); |
| | | |
| | | var respone = JsonConvert.DeserializeObject<Respone>(result.ToString()); |
| | | if (respone.ResultStatus) |
| | | var respone = JsonConvert.DeserializeObject<ResponeData>(result.ToString()); |
| | | if (!respone.d.ResultStatus) |
| | | { |
| | | return content.OK(); |
| | | throw new Exception($"ERPè°æ¨åºåº{respone.d.ResultMsg}"); |
| | | } |
| | | return content.Error(respone.ResultMsg); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | /// <param name="palletCode"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> ERPMixedSend(List<Dt_OrderOutDetails> orderOutDetails) |
| | | public async Task ERPMixedSend(List<Dt_OrderOutDetails> orderOutDetails) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (orderOutDetails.Count <= 0) |
| | | { |
| | | throw new Exception($"æªæ¾å°è°æ¨åºåºæ°æ®"); |
| | | } |
| | | MixedSend send = new MixedSend |
| | | { |
| | | context = new Context |
| | |
| | | // åé请æ±å¹¶çå¾
ååº |
| | | var result = await HttpsClient.PostAsync(ERPMixedSend, send.ToJsonString()); |
| | | |
| | | var respone = JsonConvert.DeserializeObject<Respone>(result.ToString()); |
| | | if (respone.ResultStatus) |
| | | var respone = JsonConvert.DeserializeObject<ResponeData>(result.ToString()); |
| | | if (!respone.d.ResultStatus) |
| | | { |
| | | return content.OK(); |
| | | throw new Exception($"ERPå
¶ä»åºåº{respone.d.ResultMsg}"); |
| | | } |
| | | return content.Error(respone.ResultMsg); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return content.Error(ex.Message); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |