647556386
2026-02-02 95c92db3c831c73b05068b09221c13ad4a250322
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs
@@ -113,10 +113,6 @@
                {
                    return WebResponseContent.Instance.Error($"未找到出库单明细信息");
                }
                if (outboundOrder.OrderStatus != (int)OutOrderStatusEnum.未开始)
                {
                    return WebResponseContent.Instance.Error($"该订单状态不允许修改");
                }
                List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
                List<Dt_OutboundOrderDetail> updateoutboundOrderDetails = new List<Dt_OutboundOrderDetail>();
                List<int> detailIds = new List<int>();
@@ -161,6 +157,10 @@
                    }
                    else
                    {
                        if(item.OrderQuantity < outboundOrderDetail.LockQuantity + outboundOrderDetail.MoveQty)
                        {
                            return WebResponseContent.Instance.Error($"修改的行号{item.lineNo}数量超过了智仓出库锁定数量加上挪料数量,不允许修改");
                        }
                        outboundOrderDetail.lineNo = item.lineNo;
                        outboundOrderDetail.MaterielCode = item.MaterielCode;
                        outboundOrderDetail.SupplyCode = item.SupplyCode;
@@ -198,6 +198,10 @@
                _unitOfWorkManage.BeginTran();
                foreach (var item in deletePurchaseOrderDetails)
                {
                    if(item.LockQuantity > 0)
                    {
                        return WebResponseContent.Instance.Error($"原单据行号{item.lineNo}已经锁定出库,不允许删除,请重新更改数据推送");
                    }
                    // _outboundOrderDetailRepository.DeleteAndMoveIntoHty(item, OperateTypeEnum.自动删除);
                    _outboundOrderDetailRepository.DeleteData(item);
                }
@@ -205,6 +209,10 @@
                _outboundOrderDetailRepository.UpdateData(updateoutboundOrderDetails);
                _outboundOrderDetailRepository.AddData(outboundOrderDetails);
                if(outboundOrder.Details.All(x => x.OverOutQuantity >= x.OrderQuantity - x.MoveQty))
                {
                    outboundOrder.OrderStatus = (int)OutOrderStatusEnum.出库完成;
                }
                BaseDal.UpdateData(outboundOrder);
                _unitOfWorkManage.CommitTran();
@@ -331,8 +339,6 @@
        public override PageGridData<Dt_OutboundOrder> GetPageData(PageDataOptions options)
        {
            string wheres = ValidatePageOptions(options);
            //获取排序字段
            Dictionary<string, SqlSugar.OrderByType> orderbyDic = GetPageDataSort(options, TProperties);
            List<OrderByModel> orderByModels = new List<OrderByModel>();
            foreach (var item in orderbyDic)
@@ -345,7 +351,7 @@
                orderByModels.Add(orderByModel);
            }
            ISugarQueryable<Dt_OutboundOrder> sugarQueryable1 = BaseDal.Db.Queryable<Dt_OutboundOrder>().Includes(x => x.Details);
            int totalCount = 0;
            List<SearchParameters> searchParametersList = new List<SearchParameters>();
            if (!string.IsNullOrEmpty(options.Wheres))
@@ -354,11 +360,84 @@
                {
                    searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
                    options.Filter = searchParametersList;
                    if (searchParametersList.Count > 0)
                    {
                        var materielCodeParam = searchParametersList.FirstOrDefault(x =>
                    x.Name.Equals("materielCode", StringComparison.OrdinalIgnoreCase));
                        if (materielCodeParam != null && !string.IsNullOrEmpty(materielCodeParam.Value?.ToString()))
                        {
                            string materielCode = materielCodeParam.Value.ToString().Trim();
                            sugarQueryable1 = sugarQueryable1.Where(x =>
                                x.Details.Any(d => d.MaterielCode.Contains(materielCode)));
                        }
                        var upperOrderNoParam = searchParametersList.FirstOrDefault(x =>
                            x.Name.Equals(nameof(Dt_OutboundOrder.UpperOrderNo).FirstLetterToLower(), StringComparison.OrdinalIgnoreCase));
                        if (upperOrderNoParam != null && !string.IsNullOrEmpty(upperOrderNoParam.Value?.ToString()))
                        {
                            string upperOrderNo = upperOrderNoParam.Value.ToString().Trim();
                            sugarQueryable1 = sugarQueryable1.Where(x => x.UpperOrderNo.Contains(upperOrderNo));
                        }
                        var orderNoParam = searchParametersList.FirstOrDefault(x =>
                            x.Name.Equals(nameof(Dt_OutboundOrder.OrderNo).FirstLetterToLower(), StringComparison.OrdinalIgnoreCase));
                        if (orderNoParam != null && !string.IsNullOrEmpty(orderNoParam.Value?.ToString()))
                        {
                            string orderNo = orderNoParam.Value.ToString().Trim();
                            sugarQueryable1 = sugarQueryable1.Where(x => x.OrderNo.Contains(orderNo));
                        }
                        var orderStatusParam = searchParametersList.FirstOrDefault(x =>
                            x.Name.Equals(nameof(Dt_OutboundOrder.OrderStatus).FirstLetterToLower(), StringComparison.OrdinalIgnoreCase));
                        if (orderStatusParam != null && !string.IsNullOrEmpty(orderStatusParam.Value?.ToString()))
                        {
                            string orderStatus = orderStatusParam.Value.ToString().Trim();
                            sugarQueryable1 = sugarQueryable1.Where(x => x.OrderStatus.Equals(orderStatus));
                        }
                        var returnToMESStatusParam = searchParametersList.FirstOrDefault(x =>
                            x.Name.Equals(nameof(Dt_OutboundOrder.ReturnToMESStatus).FirstLetterToLower(), StringComparison.OrdinalIgnoreCase));
                        if (returnToMESStatusParam != null && !string.IsNullOrEmpty(returnToMESStatusParam.Value?.ToString()))
                        {
                            string returnToMESStatus = returnToMESStatusParam.Value.ToString().Trim();
                            sugarQueryable1 = sugarQueryable1.Where(x => x.ReturnToMESStatus.Equals(returnToMESStatus));
                        }
                        var createDateParams = searchParametersList
                    .Where(x => x.Name.Equals("createDate", StringComparison.OrdinalIgnoreCase)
                                && !string.IsNullOrEmpty(x.Value?.ToString()))
                    .ToList();
                        DateTime? minCreateDate = null;
                        DateTime? maxCreateDate = null;
                        foreach (var dateParam in createDateParams)
                        {
                            if (DateTime.TryParse(dateParam.Value.ToString(), out DateTime dateValue))
                            {
                                LinqExpressionType expressionType = dateParam.DisplayType.GetLinqCondition();
                                switch (expressionType)
                                {
                                    case LinqExpressionType.ThanOrEqual:
                                        minCreateDate = dateValue;
                                        break;
                                    case LinqExpressionType.LessThanOrEqual:
                                        maxCreateDate = dateValue;
                                        break;
                                }
                            }
                        }
                        if (minCreateDate.HasValue)
                        {
                            sugarQueryable1 = sugarQueryable1.Where(x => x.CreateDate >= minCreateDate.Value);
                        }
                        if (maxCreateDate.HasValue)
                        {
                            sugarQueryable1 = sugarQueryable1.Where(x => x.CreateDate <= maxCreateDate.Value);
                        }
                    }
                }
                catch { }
            }
            var data = BaseDal.Db.Queryable<Dt_OutboundOrder>()
                .WhereIF(!wheres.IsNullOrEmpty(), wheres)
            var data = sugarQueryable1
                .Where(x => x.OrderType == 0 || x.OrderType == 116)
                .OrderBy(orderByModels)
                .ToPageList(options.Page, options.Rows, ref totalCount);