1
wangxinhui
2025-06-10 bb66bf9372783cfb1af35a5384fdc69cc9c56a9f
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs
@@ -1,8 +1,10 @@
using AutoMapper;
using MailKit.Search;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.CommonEnum;
@@ -11,6 +13,7 @@
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Helper;
using WIDESEA_Core.Utilities;
using WIDESEA_DTO;
using WIDESEA_DTO.Basic;
using WIDESEA_DTO.ERP;
@@ -81,14 +84,47 @@
            if (saveModel.MainData.TryGetValue(nameof(Dt_ReceiveOrder.SuppliersId).FirstLetterToLower(), out object? suppliersId) && suppliersId != null && !string.IsNullOrEmpty(suppliersId.ToString()))
            {
                Dt_ReceiveOrder receiveOrder = BaseDal.QueryFirst(x => x.SuppliersId == suppliersId.ToString() && x.WarehouseId == Convert.ToInt32(saveModel.MainData[nameof(Dt_ReceiveOrder.WarehouseId).FirstLetterToLower()]));
                if (receiveOrder != null && receiveOrder.ReceiveOrderStatus != ReceiveOrderStatusEnum.Completed.ObjToInt())
                Dt_ReceiveOrder receiveOrder = BaseDal.QueryFirst(x => x.SuppliersId == suppliersId.ToString() && x.WarehouseId == Convert.ToInt32(saveModel.MainData[nameof(Dt_ReceiveOrder.WarehouseId).FirstLetterToLower()]) && x.ReceiveOrderStatus< ReceiveOrderStatusEnum.Completed.ObjToInt());
                if (receiveOrder != null)
                {
                    return WebResponseContent.Instance.Error("该供应商有未完成的收货单");
                }
            }
            return base.AddData(saveModel);
        }
        public override object GetDetailPage(PageDataOptions pageData)
        {
            Type t = typeof(Dt_ReceiveOrder);
            if (pageData.Value == null) return new PageGridData<object>(total: 0, null);
            string keyName = t.GetKeyName();
            ////生成查询条件
            //Expression<Func<TEntity, bool>> whereExpression = keyName.CreateExpression<TEntity>(pageData.Value, LinqExpressionType.Equal);
            int totalCount = 0;
            PropertyInfo propertyInfo = t.GetProperties().FirstOrDefault(x => x.GetCustomAttribute<Navigate>() != null);
            if (propertyInfo != null)
            {
                Type detailType = propertyInfo.PropertyType.GetGenericArguments()[0];
                Navigate navigate = propertyInfo.GetCustomAttribute<Navigate>();
                List<Dt_ReceiveOrderDetail> list = BaseDal.Db.Queryable<Dt_ReceiveOrderDetail>().Where(navigate.GetName(), "=", pageData.Value).ToPageList(pageData.Page, pageData.Rows, ref totalCount);
                decimal sum = 0;
                list.ForEach(x =>
                {
                    sum += Convert.ToDecimal(x.ReceivedQuantity);
                });
                PageGridData<Dt_ReceiveOrderDetail> pageGridData = new PageGridData<Dt_ReceiveOrderDetail>()
                {
                    Total = totalCount,
                    Rows = list,
                    Summary = new
                    {
                        ReceivedQuantity = Math.Round(sum, 3),
                    }
                };
                return pageGridData;
            }
            return new PageGridData<object>(total: 0, null);
        }
        /// <summary>
        /// æ”¶è´§å®Œæˆå¹¶å›žä¼ ERP
@@ -166,13 +202,17 @@
                //收货推送至ER
                string response = _invokeERPService.InvokeMatReceiveApi(receiveModel);
                ErpRequestContent requestContent = response.DeserializeObject<ErpRequestContent>();
                if (requestContent.res == 1)
                if (requestContent.res != 1)
                {
                    receiveOrder.UploadStatus = WhetherEnum.True.ObjToInt();
                    return WebResponseContent.Instance.Error($"{requestContent.Data}");
                }
                receiveOrder.UploadStatus = WhetherEnum.True.ObjToInt();
                BaseDal.UpdateData(receiveOrder);
                //创建入库单
                CreateInboundOrder(orderId);
                if (receiveOrder.Details.FirstOrDefault(x=>x.IfInspection==WhetherEnum.True.ObjToInt())==null)
                {
                    //创建入库单 todo:明细都是不检验自动创建入库单
                    CreateInboundOrder(orderId);
                }
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
@@ -192,11 +232,11 @@
                List<Dt_ReceiveOrder> dt_ReceiveOrders = new List<Dt_ReceiveOrder>();
                if (string.IsNullOrEmpty(orderNo))
                {
                    dt_ReceiveOrders = Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderStatus < ReceiveOrderStatusEnum.Completed.ObjToInt() && x.WarehouseId == warehouseId).ToPageList(pageNo, 5);
                    dt_ReceiveOrders = Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderStatus < ReceiveOrderStatusEnum.Completed.ObjToInt() && x.WarehouseId == warehouseId).Includes(x=>x.Details).OrderByDescending(x=>x.ReceiveOrderId).ToPageList(pageNo, 5);
                }
                else
                {
                    dt_ReceiveOrders = Db.Queryable<Dt_ReceiveOrder>().Where(x => (x.ReceiveOrderNo.Contains(orderNo) || x.SuppliersId.Contains(orderNo)) && x.ReceiveOrderStatus < ReceiveOrderStatusEnum.Completed.ObjToInt() && x.WarehouseId == warehouseId).ToPageList(pageNo, 5);
                    dt_ReceiveOrders = Db.Queryable<Dt_ReceiveOrder>().Where(x => (x.ReceiveOrderNo.Contains(orderNo) || x.SuppliersId.Contains(orderNo)) && x.ReceiveOrderStatus < ReceiveOrderStatusEnum.Completed.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.ReceiveOrderId).Includes(x => x.Details).ToPageList(pageNo, 5);
                }
                content.OK(data: dt_ReceiveOrders);
@@ -240,16 +280,20 @@
                    return WebResponseContent.Instance.Error($"该收货单对应的入库单已存在");
                }
                #region æ³¨é‡Š
                ////List<Dt_CheckOrder> checkOrders = _checkOrderRepository.QueryData(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo);
                ////if (checkOrders.FirstOrDefault(x => x.CheckOrderStatus == CheckOrderStatusEnum.NotCheck.ObjToInt()) != null)
                ////{
                ////    return WebResponseContent.Instance.Error($"该收货单未质检完成");
                ////}
                List<Dt_CheckOrder> checkOrders = _checkOrderRepository.QueryData(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo);
                if (checkOrders.FirstOrDefault(x => x.CheckOrderStatus == CheckOrderStatusEnum.NotCheck.ObjToInt()) != null)
                {
                    return WebResponseContent.Instance.Error($"该收货单未质检完成");
                }
                ////if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null)
                ////{
                ////    return WebResponseContent.Instance.Error($"该收货单质检结果审批未完成");
                ////}
                //if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null)
                //{
                //    return WebResponseContent.Instance.Error($"该收货单质检结果审批未完成");
                //}
                if (checkOrders.FirstOrDefault(x => x.Result != CheckAcceptEnum.Accept.ToString()) != null)
                {
                    return WebResponseContent.Instance.Error($"收货明细中存有质检未通过");
                }
                #endregion
                Dt_InboundOrder inboundOrder = new Dt_InboundOrder()
@@ -267,15 +311,15 @@
                {
                    float quantity = item.ReceivedQuantity;
                    #region æ³¨é‡Š
                    ////if (item.IfInspection == WhetherEnum.True.ObjToInt())
                    ////{
                    ////    Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo);
                    ////    if (checkOrder == null)
                    ////    {
                    ////        return WebResponseContent.Instance.Error($"质检单数据错误");
                    ////    }
                    ////    quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault();
                    ////}
                    if (item.IfInspection == WhetherEnum.True.ObjToInt())
                    {
                        Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo);
                        if (checkOrder == null)
                        {
                            return WebResponseContent.Instance.Error($"质检单数据错误");
                        }
                        quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault();
                    }
                    #endregion
                    Dt_InboundOrderDetail detail = new Dt_InboundOrderDetail()
                    {
@@ -292,17 +336,21 @@
                    };
                    inboundOrder.Details.Add(detail);
                }
                //更新入库单创建状态
                receiveOrder.CreateInOrderStatus = WhetherEnum.True.ObjToInt();
                _unitOfWorkManage.BeginTran();
                BaseDal.UpdateData(receiveOrder);
                _inboundRepository.InboundOrderRepository.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand();
                _unitOfWorkManage.CommitTran();
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        #region æµ‹è¯•
        public WebResponseContent ReceiveAllOrder(int purchaseOrderId, string lotNo)
        {
            try
@@ -467,5 +515,6 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        #endregion
    }
}