| | |
| | | using WIDESEA_Common.StockEnum; |
| | | using WIDESEA_Common.CommonEnum; |
| | | using WIDESEA_Common.LocationEnum; |
| | | using MailKit.Search; |
| | | using WIDESEA_External.Model; |
| | | |
| | | namespace WIDESEA_TaskInfoService |
| | | { |
| | |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x=>x.Id==id).Includes(x=>x.Details).First(); |
| | | Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.Id == id).Includes(x => x.Details).First(); |
| | | if (stockInfo == null) |
| | | { |
| | | return content.Error($"æªæ¾å°åºå"); |
| | | } |
| | | Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode); |
| | | if (locationInfo!=null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus==LocationStatusEnum.InStock.ObjToInt() && stockInfo.StockStatus==StockStatusEmun.å
¥åºå®æ.ObjToInt()) |
| | | if (locationInfo != null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && stockInfo.StockStatus == StockStatusEmun.å
¥åºå®æ.ObjToInt()) |
| | | { |
| | | List<Dt_Task> tasks = GetTasks(new List<Dt_StockInfo>() { stockInfo }, TaskTypeEnum.Outbound); |
| | | if (tasks == null || tasks.Count <= 0) |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å¹³åºç´æ¥åºåº |
| | | /// </summary> |
| | | /// <param name="orderDetailId"></param> |
| | | /// <param name="stockSelectViews"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent GeneratePKOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews) |
| | | { |
| | | try |
| | | { |
| | | Dt_OutboundOrderDetail OrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == orderDetailId); |
| | | |
| | | if (OrderDetail == null) |
| | | { |
| | | throw new Exception("æªæ¾å°åºåºåæç»ä¿¡æ¯"); |
| | | } |
| | | if (OrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()) |
| | | throw new Exception("åºåºå已宿"); |
| | | Dt_OutboundOrder outboundOrder = BaseDal.Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == OrderDetail.OrderId).Includes(x => x.Details).First(); |
| | | if (outboundOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°åºåºåä¿¡æ¯"); |
| | | } |
| | | Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == outboundOrder.WarehouseId); |
| | | List<Dt_StockInfo> outStocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockSelectViews.Select(x => x.PalletCode).ToList()); |
| | | if (outStocks.Count < 1) return WebResponseContent.Instance.Error($"åºåä¸è¶³"); |
| | | List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>(); |
| | | List<Dt_StockInfo> upStocks = new List<Dt_StockInfo>(); |
| | | List<Dt_StockInfo> deStocks = new List<Dt_StockInfo>(); |
| | | List<Dt_StockInfoDetail> upstockDetails = new List<Dt_StockInfoDetail>(); |
| | | List<Dt_StockInfoDetail> destockDetails = new List<Dt_StockInfoDetail>(); |
| | | outStocks.ForEach(x => |
| | | { |
| | | x.Details.Where(x => x.MaterielCode == OrderDetail.MaterielCode).ToList().ForEach(v => |
| | | { |
| | | float OriginalQuantity = v.StockQuantity; |
| | | float assignQuantity = 0;//åé
æ°é |
| | | float assignAmount = OrderDetail.OrderQuantity - OrderDetail.OverOutQuantity;//å¾
åºæ°é |
| | | if (assignAmount > 0) |
| | | { |
| | | if (v.StockQuantity >= assignAmount) |
| | | { |
| | | assignQuantity = assignAmount; |
| | | v.StockQuantity -= assignAmount; |
| | | OrderDetail.OverOutQuantity += assignAmount; |
| | | OrderDetail.LockQuantity += assignAmount; |
| | | upstockDetails.Add(v); |
| | | } |
| | | else |
| | | { |
| | | assignQuantity = v.StockQuantity; |
| | | OrderDetail.OverOutQuantity += v.StockQuantity; |
| | | OrderDetail.LockQuantity += v.StockQuantity; |
| | | v.StockQuantity = 0; |
| | | destockDetails.Add(v); |
| | | } |
| | | Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo() |
| | | { |
| | | PalletCode = x.PalletCode, |
| | | AssignQuantity = assignQuantity, |
| | | MaterielCode = OrderDetail.MaterielCode, |
| | | BatchNo = v.BatchNo, |
| | | LocationCode = x.LocationCode, |
| | | MaterielName = v.MaterielName, |
| | | OrderDetailId = OrderDetail.Id, |
| | | OrderNo = outboundOrder.OrderNo, |
| | | OrderType = outboundOrder.OrderType, |
| | | OriginalQuantity = OriginalQuantity, |
| | | Status = OutLockStockStatusEnum.åºåºå®æ.ObjToInt(), |
| | | StockId = x.Id, |
| | | TaskNum = 0, |
| | | OrderQuantity = OrderDetail.OrderQuantity, |
| | | Unit = OrderDetail.Unit |
| | | }; |
| | | outStockLockInfos.Add(outStockLockInfo); |
| | | } |
| | | }); |
| | | int overCount = x.Details.Where(x => x.StockQuantity == 0).Count(); |
| | | if (overCount == x.Details.Count) deStocks.Add(x); |
| | | else upStocks.Add(x); |
| | | }); |
| | | outboundOrder.OrderStatus = OutOrderStatusEnum.åºåºä¸.ObjToInt(); |
| | | OrderDetail.OrderDetailStatus = OrderDetail.OrderQuantity > OrderDetail.OverOutQuantity ? OrderDetailStatusEnum.AssignOverPartial.ObjToInt() : OrderDetailStatusEnum.Over.ObjToInt(); |
| | | if (OrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()) |
| | | { |
| | | int overCount = outboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); |
| | | if (outboundOrder.Details.Count - 1 == overCount) |
| | | outboundOrder.OrderStatus = OutOrderStatusEnum.åºåºå®æ.ObjToInt(); |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | _outboundService.OutboundStockLockInfoService.AddData(outStockLockInfos); |
| | | _outboundService.OutboundOrderService.UpdateData(outboundOrder); |
| | | _outboundService.OutboundOrderDetailService.UpdateData(OrderDetail); |
| | | _stockRepository.StockInfoRepository.UpdateData(upStocks); |
| | | _stockRepository.StockInfoRepository.DeleteData(deStocks); |
| | | _stockRepository.StockInfoDetailRepository.UpdateData(upstockDetails); |
| | | _stockRepository.StockInfoDetailRepository.DeleteData(destockDetails); |
| | | _unitOfWorkManage.CommitTran(); |
| | | |
| | | #region 䏿¥ERP |
| | | List<ERPPickModel> eRPPickModels = new List<ERPPickModel>(); |
| | | outStockLockInfos.ForEach(x => |
| | | { |
| | | ERPPickItemModel pickItemModel = new ERPPickItemModel() |
| | | { |
| | | Lotno = x.BatchNo, |
| | | Qty = x.AssignQuantity.ToString(), |
| | | Location = warehouse.WarehouseCode |
| | | }; |
| | | ERPPickModel pickModel = new ERPPickModel() |
| | | { |
| | | Rowindex = OrderDetail.RowNo, |
| | | Material = OrderDetail.MaterielCode, |
| | | Qty = pickItemModel.Qty, |
| | | Dataitem = new List<ERPPickItemModel> { pickItemModel } |
| | | }; |
| | | eRPPickModels.Add(pickModel); |
| | | }); |
| | | ERPIssueItemModel issueItemModel = new ERPIssueItemModel() |
| | | { |
| | | Pickcode = outboundOrder.UpperOrderNo, |
| | | PickList = eRPPickModels |
| | | }; |
| | | ERPIssueModel issueModel = new ERPIssueModel() |
| | | { |
| | | UniqueTag = outboundOrder.Id.ToString(), |
| | | Code = outboundOrder.OrderNo, |
| | | WarehouseCode = warehouse.WarehouseCode, |
| | | Docremark = "", |
| | | Deptno = outboundOrder.DepartmentCode, |
| | | Deptname = outboundOrder.DepartmentName, |
| | | Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | Createuser = App.User.UserName, |
| | | Issitem = new List<ERPIssueItemModel>() { issueItemModel } |
| | | }; |
| | | _invokeERPService.InvokeOutStandardsApi(issueModel); |
| | | #endregion |
| | | |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// çæåºåºä»»å¡åæ°æ®æ´æ°å°æ°æ®åº |
| | | /// </summary> |
| | | /// <param name="tasks"></param> |