| | |
| | | using AutoMapper; |
| | | using SqlSugar; |
| | | using System.Dynamic; |
| | | using System.Text.RegularExpressions; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Common.CommonEnum; |
| | | using WIDESEA_Common.OrderEnum; |
| | |
| | | } |
| | | } |
| | | |
| | | public WebResponseContent UndoPalletGroup(string palletCode) |
| | | public WebResponseContent UndoPalletGroup(string palletCode, string barcode = "") |
| | | { |
| | | |
| | | if (string.IsNullOrWhiteSpace(palletCode)) |
| | | { |
| | | return WebResponseContent.Instance.Error("æçå·ä¸è½ä¸ºç©º"); |
| | | } |
| | | var stock = _stockRepository.Db.Queryable<Dt_StockInfo>().Includes(o => o.Details).First(x => x.PalletCode == palletCode && x.StockStatus == (int)StockStatusEmun.ç»çæå); |
| | | if (stock == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°æçå·{palletCode}对åºçåºåè®°å½"); |
| | | } |
| | | |
| | | if (stock.Details == null || !stock.Details.Any()) |
| | | |
| | | try |
| | | { |
| | | _unitOfWorkManage.BeginTran(); |
| | | |
| | | // 2. æ¥è¯¢æçåºå主记å½ï¼é¿å
æ æ°æ®æå¼å¸¸ï¼ |
| | | var stock = _stockRepository.Db.Queryable<Dt_StockInfo>() |
| | | .Includes(o => o.Details) |
| | | .First(x => x.PalletCode == palletCode |
| | | && (x.StockStatus == (int)StockStatusEmun.ç»çæå |
| | | || x.StockStatus == StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt())); |
| | | |
| | | if (stock == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°æçå·{palletCode}对åºçåºåè®°å½"); |
| | | } |
| | | |
| | | // 3. åºæ¯1ï¼å 餿宿¡ç |
| | | if (!string.IsNullOrWhiteSpace(barcode)) |
| | | { |
| | | var targetDetail = stock.Details?.FirstOrDefault(x => x.Barcode == barcode); |
| | | if (targetDetail == null) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error($"æç{palletCode}䏿ªæ¾å°æ¡ç {barcode}çæç»è®°å½"); |
| | | } |
| | | |
| | | ResetInboundOrderStatus(new List<string> { targetDetail.OrderNo},new List<string> { targetDetail.Barcode}); |
| | | // å é¤æå®æç» |
| | | _stockDetailRepository.DeleteData(targetDetail); |
| | | |
| | | |
| | | // éæ°æ¥è¯¢å©ä½æç»ï¼ä¿è¯æ°æ®åç¡®æ§ï¼ |
| | | var remainingDetails = _stockDetailRepository.Db.Queryable<Dt_StockInfoDetail>() |
| | | .Where(x => x.StockId == stock.Id) |
| | | .ToList(); |
| | | |
| | | // å©ä½æç»ä¸ºç©º â å é¤ä¸»è¡¨ + éç½®å
¥åºååæç»ç¶æ |
| | | if (!remainingDetails.Any()) |
| | | { |
| | | // éç½®å
¥åºååæç»ç¶æ |
| | | ResetInboundOrderStatus(stock.Details.Select(d => d.OrderNo).Distinct().ToList()); |
| | | |
| | | _stockRepository.DeleteData(stock); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK($"æ¡ç {barcode}æ¤éæåï¼æçæ å©ä½æç»ï¼å·²å 餿çå¹¶éç½®å
³èå
¥åºåç¶æ"); |
| | | } |
| | | |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK($"æ¡ç {barcode}æ¤éæåï¼æç仿å©ä½æç»"); |
| | | } |
| | | |
| | | // å 餿´æçï¼æ æ¡ç ä¼ å
¥ï¼ |
| | | if (stock.Details == null || !stock.Details.Any()) |
| | | { |
| | | _stockRepository.DeleteData(stock); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK("æçæ æç»è®°å½ï¼å·²ç´æ¥å 餿çä¸»æ°æ®"); |
| | | } |
| | | |
| | | // ææç» â éç½®å
¥åºååæç»ç¶æ + å é¤åºå |
| | | var relatedOrderNos = stock.Details.Select(d => d.OrderNo).Distinct().ToList(); |
| | | if (!relatedOrderNos.Any()) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error("åºåæç»æªå
³èä»»ä½å
¥åºåå·ï¼æ æ³å®ææ¤é"); |
| | | } |
| | | |
| | | // éç½®å
¥åºåä¸»ç¶æ + æç»ç¶æ |
| | | ResetInboundOrderStatus(relatedOrderNos, stock.Details.Select(d => d.Barcode).ToList()); |
| | | |
| | | // 4.3 å é¤åºåæç»å主表 |
| | | _stockDetailRepository.DeleteData(stock.Details); |
| | | _stockRepository.DeleteData(stock); |
| | | return WebResponseContent.Instance.OK(); |
| | | |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK("æçæ¤éæåï¼å·²éç½®å
³èå
¥åºååæç»ç¶æ"); |
| | | } |
| | | // è·ååºå详æ
å
³èçææå
¥åºåå· |
| | | var relatedOrderNos = stock.Details.Select(d => d.OrderNo).First(); |
| | | // æ¥è¯¢ææå
³èçå
¥åºåï¼å«è¯¦æ
ï¼ |
| | | var inboundOrders = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>() |
| | | .Includes(x => x.Details) |
| | | .Where(x => relatedOrderNos == x.InboundOrderNo) |
| | | .First(); |
| | | |
| | | var barcodes = stock.Details.Select(d => d.Barcode).ToList(); |
| | | |
| | | // å¹é
åºåæ¡ç 对åºçå
¥åºåæç» |
| | | var matchedInboundDetails = inboundOrders.Details |
| | | ?.Where(d => barcodes.Contains(d.Barcode)) |
| | | .ToList(); |
| | | foreach (var detail in matchedInboundDetails) |
| | | catch (Exception ex) |
| | | { |
| | | detail.ReceiptQuantity = 0; |
| | | detail.OrderDetailStatus = 0; |
| | | _inboundOrderDetailRepository.UpdateData(detail); |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error($"æçæ¤é失败ï¼{ex.Message}"); |
| | | } |
| | | _stockDetailRepository.DeleteData(stock.Details); |
| | | _stockRepository.DeleteData(stock); |
| | | } |
| | | |
| | | |
| | | return WebResponseContent.Instance.OK("æçæ¤éæå"); |
| | | private void ResetInboundOrderStatus(List<string> orderNos, List<string> barcodes = null) |
| | | { |
| | | foreach (var orderNo in orderNos) |
| | | { |
| | | var inboundOrder = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>() |
| | | .Includes(x => x.Details) |
| | | .First(x => x.InboundOrderNo == orderNo); |
| | | |
| | | if (inboundOrder == null) continue; |
| | | |
| | | bool isSingleBarcode = barcodes != null && barcodes.Count == 1; |
| | | if (!isSingleBarcode) |
| | | { |
| | | // éå个æ¡ç ï¼æ´å/å¤ä¸ªæ¡ç ï¼ï¼éç½®ä¸»è¡¨ç¶æä¸º0 |
| | | inboundOrder.OrderStatus = 0; |
| | | _inboundOrderRepository.UpdateData(inboundOrder); |
| | | } |
| | | |
| | | // éç½®å
¥åºåæç»ç¶æ |
| | | if (inboundOrder.Details == null || !inboundOrder.Details.Any()) continue; |
| | | |
| | | var targetDetails = barcodes == null |
| | | ? inboundOrder.Details.ToList() // ä¸ä¼ æ¡ç åéç½®æ´åæç» |
| | | : inboundOrder.Details.Where(d => barcodes.Contains(d.Barcode)).ToList(); |
| | | |
| | | foreach (var detail in targetDetails) |
| | | { |
| | | detail.ReceiptQuantity = 0; |
| | | detail.OrderDetailStatus = 0; |
| | | _inboundOrderDetailRepository.UpdateData(detail); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public override PageGridData<Dt_InboundOrder> GetPageData(PageDataOptions options) |
| | | { |
| | | string wheres = ValidatePageOptions(options); |
| | | |
| | | string pattern = @"inboundOrderNo like '[^']+'\s*and\s*"; |
| | | wheres = Regex.Replace(wheres, pattern, "", RegexOptions.IgnoreCase); |
| | | |
| | | //è·åæåºå段 |
| | | Dictionary<string, SqlSugar.OrderByType> orderbyDic = GetPageDataSort(options, TProperties); |
| | | List<OrderByModel> orderByModels = new List<OrderByModel>(); |
| | |
| | | }; |
| | | orderByModels.Add(orderByModel); |
| | | } |
| | | |
| | | ISugarQueryable<Dt_InboundOrder> sugarQueryable1 = BaseDal.Db.Queryable<Dt_InboundOrder>(); |
| | | |
| | | int totalCount = 0; |
| | | List<SearchParameters> searchParametersList = new List<SearchParameters>(); |
| | | if (!string.IsNullOrEmpty(options.Wheres)) |
| | | { |
| | | try |
| | | { |
| | | { |
| | | searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>(); |
| | | if (searchParametersList.Count > 0) |
| | | { |
| | | |
| | | SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_InboundOrder.InboundOrderNo).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.InboundOrderNo.Contains(searchParameters.Value.ToString()) |
| | | || x.UpperOrderNo.Contains(searchParameters.Value.ToString()) || |
| | | x.Details.Any(d => d.Barcode == searchParameters.Value.ToString())); |
| | | } |
| | | searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_InboundOrder.OrderType).FirstLetterToLower()); |
| | | if (searchParameters != null) |
| | | { |
| | | sugarQueryable1 = sugarQueryable1.Where(x => x.OrderType.Equals(searchParameters.Value.ToString())); |
| | | } |
| | | //var dataList = sugarQueryable1.ToPageList(options.Page, options.Rows, ref totalCount); |
| | | //return new PageGridData<Dt_InboundOrder>(totalCount, dataList); |
| | | } |
| | | options.Filter = searchParametersList; |
| | | } |
| | | catch { } |
| | | } |
| | | var data = BaseDal.Db.Queryable<Dt_InboundOrder>() |
| | | var data = sugarQueryable1 |
| | | .WhereIF(!wheres.IsNullOrEmpty(), wheres) |
| | | .OrderBy(orderByModels).Includes(x=>x.Details) |
| | | .Where(x => x.OrderType == 0) |
| | | .OrderBy(orderByModels).Includes(x => x.Details) |
| | | .ToPageList(options.Page, options.Rows, ref totalCount); |
| | | |
| | | return new PageGridData<Dt_InboundOrder>(totalCount, data); |
| | | } |
| | | |
| | | //public override PageGridData<Dt_InboundOrder> GetPageData(PageDataOptions options) |
| | | //{ |
| | | // //var pageGridData = base.GetPageData(options); |
| | | |
| | | // ISugarQueryable<Dt_InboundOrder> sugarQueryable1 = BaseDal.Db.Queryable<Dt_InboundOrder>(); |
| | | // if (!string.IsNullOrEmpty(options.Wheres)) |
| | | // { |
| | | |
| | | // List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>(); |
| | | // int totalCount = 0; |
| | | // if (searchParametersList.Count > 0) |
| | | // { |
| | | |
| | | // SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_InboundOrder.InboundOrderNo).FirstLetterToLower()); |
| | | // if (searchParameters != null) |
| | | // { |
| | | // sugarQueryable1 = sugarQueryable1.Where(x => x.InboundOrderNo.Contains(searchParameters.Value.ToString()) |
| | | // || x.UpperOrderNo.Contains(searchParameters.Value.ToString()) || |
| | | // x.Details.Any(d => d.Barcode == searchParameters.Value.ToString())); |
| | | // } |
| | | // searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_InboundOrder.OrderType).FirstLetterToLower()); |
| | | // if (searchParameters != null) |
| | | // { |
| | | // sugarQueryable1 = sugarQueryable1.Where(x => x.OrderType.Equals(searchParameters.Value.ToString())); |
| | | // } |
| | | // var dataList = sugarQueryable1.ToPageList(options.Page, options.Rows, ref totalCount); |
| | | // return new PageGridData<Dt_InboundOrder>(totalCount, dataList); |
| | | // } |
| | | // } |
| | | // return new PageGridData<Dt_InboundOrder>(); |
| | | //} |
| | | |
| | | } |
| | | } |