|  |  |  | 
|---|
|  |  |  | using WIDESEA_Common.StockEnum; | 
|---|
|  |  |  | using WIDESEA_Common.CommonEnum; | 
|---|
|  |  |  | using WIDESEA_Common.LocationEnum; | 
|---|
|  |  |  | using MailKit.Search; | 
|---|
|  |  |  | using WIDESEA_External.Model; | 
|---|
|  |  |  | using WIDESEA_Core.CodeConfigEnum; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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) | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("æªæ¾å°åºåºåæç»ä¿¡æ¯"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (outboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus > OrderDetailStatusEnum.New.ObjToInt() && x.OrderDetailStatus != OrderDetailStatusEnum.AssignOverPartial.ObjToInt()) != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception("æéåºåºåæç»åå¨åºåºä¸æå·²å®æ"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<Dt_StockInfo>? stockInfos = null; | 
|---|
|  |  |  | List<Dt_OutboundOrderDetail>? orderDetails = null; | 
|---|
|  |  |  | List<Dt_OutStockLockInfo>? outStockLockInfos = null; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// å¹³åºç´æ¥åºåº | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="orderDetailId"></param> | 
|---|
|  |  |  | /// <param name="stockSelectViews"></param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public WebResponseContent GeneratePKOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | #region MyRegion | 
|---|
|  |  |  | 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(); | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region ä¸æ¥ERP | 
|---|
|  |  |  | if (outboundOrder.OrderStatus == OutOrderStatusEnum.åºåºå®æ.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //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 = _outboundService.OutboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.FLCodeRule)), | 
|---|
|  |  |  | //    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(_outboundService.OutboundOrderService.GetERPIssueModel(outboundOrder, warehouse.WarehouseCode)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return WebResponseContent.Instance.OK(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error(ex.Message); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// çæåºåºä»»å¡åæ°æ®æ´æ°å°æ°æ®åº | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="tasks"></param> | 
|---|
|  |  |  | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="keys">åºåºåæç»ä¸»é®</param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public WebResponseContent GenerateOutboundTask(int[] keys) | 
|---|
|  |  |  | public WebResponseContent GenerateOutboundTasks(int[] keys) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | List<int> keys = _outboundService.OutboundOrderDetailService.Repository.QueryData(x => x.Id, x => x.OrderId == outboundId); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return GenerateOutboundTask(keys.ToArray()); | 
|---|
|  |  |  | return GenerateOutboundTasks(keys.ToArray()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|